Jump to content

    

Oleg_IT

Свой
  • Content Count

    936
  • Joined

  • Last visited

Everything posted by Oleg_IT


  1. AM1808 от TI

    На сколько OMAP-L138 близок к AM1808, с точностью до хедеров? На сколько серьёзно там накосячено? С AM1808/AM1810 чего-то ни чего отладочного нет.
  2. AM1808 от TI

    !!!!!!!!!!!Вот я и говорю, Не там ищу:) Я то искал один общий файл, а там для каждой периферии свой. Буду пробовать. Если что, опять спрошу, не ругайте.
  3. AM1808 от TI

    Увы, проблема осталась. Не найду хедр для am1808(am1810). Смотрю там http://www.keil.com/dd/. Может не там смотрю? Получается, что Keil на прямую не поддерживает amXXXX?
  4. AM1808 от TI

    Посмотрел на компе, попереключал режимы 16 bit <-> 32 bit, на фотографиях разницы не увидел. Успокоился:) Некоторые вопросы пока не ясны. 1. В Keil, в мастере проектов ARM 926 EJ-S под разделом ARM нет, есть ARM 966E, ARM 9E, Cortex-ы. 2. Бюджетный КИТ на am18xx существует?
  5. AM1808 от TI

    Я о том, что не вижу LCD_DATA[16..23], а следовательно о полноценном контроллере говорить не приходится. Так? SPRUFV5A скачал pdf изучаю.
  6. AM1808 от TI

    У меня TFT и хочется полноценный RGB иметь. V, H SYNC, PCLK на выходе есть. Спасибо, именно это я и спрашивал. Только ARM 926 EJ-S у меня в мастере проектов под разделом ARM нет, есть ARM 966E, ARM 9E, Cortex-ы. А бюджетный КИТ на am18xx существует? А то как то круто в Терре! Спасибо. А am18xx_cstartup.s для Keil подойдет? Или он сам его сгенерит? Ни чему не мешает. Только BOOT пересекается с LCD_DATA[8] - LCD_DATA[15] и полного RGB не вижу, а - хочется полноценный RGB иметь. Куда глянуть? В «кит на близкого родственника сабжа - OMAP-L137»?
  7. AM1808 от TI

    Спасибо, посмотрю внимательнее. Как так? Поддерживает, LCD одни пины и соответствующий блок, VPIF другие пины. А как в Keil с ним работать? Прошу прощения, это вообще на сайте или только в ARM разделе? В даташите в раздели LCD описаны только 16 пин. Должны же они как то оговорить эту особенность.
  8. AM1808 от TI

    В Keil этого ARM-а нет. Как его определить в Keil? Линий данных для LCD только 16. Полноценное RGB он не поддерживает? Не вижу полное, по битовое описание регистров, и примеры программирования. Где взять? Направьте.
  9. Минимальный вариант проекта. TestUART_ATMega2560.rar
  10. С 128к это я учту, но тут проблема явно не та, объём кода меньше 3,5к. Чего ещё проверить можно, нужно?
  11. Не судите строго, но я уже перестаю чего-либо понимать. Размер адреса у UART2 и UART3 по размерности такие же, как и у UART0 и UART1 (в моём случае UART0 - 0000041E, UART1 - 00000484, UART2 - 000004EE, UART3 - 00000554). Ставил точки прерывания в таблице адресов прерывания, на все строки. Та же картина, UART0 и UART1 остановы есть, UART2 и UART3 остановов нет. Ладно, переход из таблицы прерываний не туда (куда? и если не туда, то невероятно, что программа не рушится), но должна же программа прийти в таблицу прерывания Ни когда не работал с trampoline секцией. Где об этом почитать, поисковики куда-то ни туда направляют.
  12. AVCC через LC (рекомендованный) фильтр подключен к питанию. PORTF используя как порт OUT, 0 и 1 пины использую для контроля возникновения прерываний.
  13. Ни чего плохого в таблице прерываний не нахожу. Привожу её полностью. +00000000: 940C0072 JMP 0x00000072 Jump +00000002: 940C0093 JMP 0x00000093 Jump +00000004: 940C0093 JMP 0x00000093 Jump +00000006: 940C0093 JMP 0x00000093 Jump +00000008: 940C0093 JMP 0x00000093 Jump +0000000A: 940C0093 JMP 0x00000093 Jump +0000000C: 940C0093 JMP 0x00000093 Jump +0000000E: 940C0093 JMP 0x00000093 Jump +00000010: 940C0093 JMP 0x00000093 Jump +00000012: 940C0093 JMP 0x00000093 Jump +00000014: 940C0093 JMP 0x00000093 Jump +00000016: 940C0093 JMP 0x00000093 Jump +00000018: 940C0093 JMP 0x00000093 Jump +0000001A: 940C0093 JMP 0x00000093 Jump +0000001C: 940C0093 JMP 0x00000093 Jump +0000001E: 940C0093 JMP 0x00000093 Jump +00000020: 940C0093 JMP 0x00000093 Jump +00000022: 940C0093 JMP 0x00000093 Jump +00000024: 940C0093 JMP 0x00000093 Jump +00000026: 940C0093 JMP 0x00000093 Jump +00000028: 940C0093 JMP 0x00000093 Jump +0000002A: 940C0119 JMP 0x00000119 Jump +0000002C: 940C0093 JMP 0x00000093 Jump +0000002E: 940C0093 JMP 0x00000093 Jump +00000030: 940C0093 JMP 0x00000093 Jump +00000032: 940C0093 JMP 0x00000093 Jump +00000034: 940C041E JMP 0x0000041E Jump +00000036: 940C0402 JMP 0x00000402 Jump +00000038: 940C0093 JMP 0x00000093 Jump +0000003A: 940C010A JMP 0x0000010A Jump +0000003C: 940C0093 JMP 0x00000093 Jump +0000003E: 940C0093 JMP 0x00000093 Jump +00000040: 940C0093 JMP 0x00000093 Jump +00000042: 940C0093 JMP 0x00000093 Jump +00000044: 940C0093 JMP 0x00000093 Jump +00000046: 940C0093 JMP 0x00000093 Jump +00000048: 940C0093 JMP 0x00000093 Jump +0000004A: 940C0484 JMP 0x00000484 Jump +0000004C: 940C0468 JMP 0x00000468 Jump +0000004E: 940C0093 JMP 0x00000093 Jump +00000050: 940C0093 JMP 0x00000093 Jump +00000052: 940C0093 JMP 0x00000093 Jump +00000054: 940C0093 JMP 0x00000093 Jump +00000056: 940C0093 JMP 0x00000093 Jump +00000058: 940C0093 JMP 0x00000093 Jump +0000005A: 940C0093 JMP 0x00000093 Jump +0000005C: 940C0093 JMP 0x00000093 Jump +0000005E: 940C0093 JMP 0x00000093 Jump +00000060: 940C0093 JMP 0x00000093 Jump +00000062: 940C0093 JMP 0x00000093 Jump +00000064: 940C0093 JMP 0x00000093 Jump +00000066: 940C0093 JMP 0x00000093 Jump +00000068: 940C04EE JMP 0x000004EE Jump +0000006A: 940C04D2 JMP 0x000004D2 Jump +0000006C: 940C0093 JMP 0x00000093 Jump +0000006E: 940C0554 JMP 0x00000554 Jump +00000070: 940C0538 JMP 0x00000538 Jump Первые строки обработчиков прерываний UDRE @0000041E: __vector_26 80: { +0000041E: 921F PUSH R1 Push register on stack @00000484: __vector_37 115: { +00000484: 921F PUSH R1 Push register on stack @000004EE: __vector_52 149: { +000004EE: 921F PUSH R1 Push register on stack @00000554: __vector_55 184: { +00000554: 921F PUSH R1 Push register on stack Возможно это то самый баг, который Вы указали, но как его обойти в WinAVR-20100110 не знаю. Рекомендации даны для gcc.
  14. Прошу прощение за объёмы кода. Ассемблер код инициализации UART0 и прерываний. 58: { +000003E7: 9A88 SBI 0x11,0 Set bit in I/O register 61: FlagTx_0 = 0; +000003E8: 92100226 STS 0x0226,R1 Store direct to data space 63: UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01)); +000003EA: ECE2 LDI R30,0xC2 Load immediate +000003EB: E0F0 LDI R31,0x00 Load immediate +000003EC: 8180 LDD R24,Z+0 Load indirect with displacement +000003ED: 6086 ORI R24,0x06 Logical OR with immediate +000003EE: 8380 STD Z+0,R24 Store indirect with displacement 64: UBRR0H = 0; +000003EF: 921000C5 STS 0x00C5,R1 Store direct to data space 65: UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k +000003F1: E08E LDI R24,0x0E Load immediate +000003F2: 938000C4 STS 0x00C4,R24 Store direct to data space 66: UDR0 = Buff[0]; +000003F4: 91800857 LDS R24,0x0857 Load direct from data space +000003F6: 938000C6 STS 0x00C6,R24 Store direct to data space 67: CountTx_0 = 1; +000003F8: E081 LDI R24,0x01 Load immediate +000003F9: 93800246 STS 0x0246,R24 Store direct to data space 68: UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0)); +000003FB: ECE1 LDI R30,0xC1 Load immediate +000003FC: E0F0 LDI R31,0x00 Load immediate +000003FD: 8180 LDD R24,Z+0 Load indirect with displacement +000003FE: 6288 ORI R24,0x28 Logical OR with immediate +000003FF: 8380 STD Z+0,R24 Store indirect with displacement 69: } +00000400: 9508 RET Subroutine return @00000401: __vector_27 72: { +00000401: 921F PUSH R1 Push register on stack +00000402: 920F PUSH R0 Push register on stack +00000403: B60F IN R0,0x3F In from I/O location +00000404: 920F PUSH R0 Push register on stack +00000405: B60B IN R0,0x3B In from I/O location +00000406: 920F PUSH R0 Push register on stack +00000407: 2411 CLR R1 Clear Register +00000408: 938F PUSH R24 Push register on stack +00000409: 93EF PUSH R30 Push register on stack +0000040A: 93FF PUSH R31 Push register on stack 73: FlagTx_0 = 1; +0000040B: E081 LDI R24,0x01 Load immediate +0000040C: 93800226 STS 0x0226,R24 Store direct to data space 74: UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0)); +0000040E: ECE1 LDI R30,0xC1 Load immediate +0000040F: E0F0 LDI R31,0x00 Load immediate +00000410: 8180 LDD R24,Z+0 Load indirect with displacement +00000411: 7987 ANDI R24,0x97 Logical AND with immediate +00000412: 8380 STD Z+0,R24 Store indirect with displacement 75: } +00000413: 91FF POP R31 Pop register from stack +00000414: 91EF POP R30 Pop register from stack +00000415: 918F POP R24 Pop register from stack +00000416: 900F POP R0 Pop register from stack +00000417: BE0B OUT 0x3B,R0 Out to I/O location +00000418: 900F POP R0 Pop register from stack +00000419: BE0F OUT 0x3F,R0 Out to I/O location +0000041A: 900F POP R0 Pop register from stack +0000041B: 901F POP R1 Pop register from stack +0000041C: 9518 RETI Interrupt return @0000041D: __vector_26 79: { +0000041D: 921F PUSH R1 Push register on stack +0000041E: 920F PUSH R0 Push register on stack +0000041F: B60F IN R0,0x3F In from I/O location +00000420: 920F PUSH R0 Push register on stack +00000421: B60B IN R0,0x3B In from I/O location +00000422: 920F PUSH R0 Push register on stack +00000423: 2411 CLR R1 Clear Register +00000424: 938F PUSH R24 Push register on stack +00000425: 93EF PUSH R30 Push register on stack +00000426: 93FF PUSH R31 Push register on stack 80: PORTF &=~ (1 << 0); +00000427: 9888 CBI 0x11,0 Clear bit in I/O register 82: UDR0 = Buff [CountTx_0]; +00000428: 91E00246 LDS R30,0x0246 Load direct from data space +0000042A: E0F0 LDI R31,0x00 Load immediate +0000042B: 5AE9 SUBI R30,0xA9 Subtract immediate +0000042C: 4FF7 SBCI R31,0xF7 Subtract immediate with carry +0000042D: 8180 LDD R24,Z+0 Load indirect with displacement +0000042E: 938000C6 STS 0x00C6,R24 Store direct to data space 84: CountTx_0++; +00000430: 91800246 LDS R24,0x0246 Load direct from data space +00000432: 5F8F SUBI R24,0xFF Subtract immediate +00000433: 93800246 STS 0x0246,R24 Store direct to data space 85: if (CountTx_0 == sizeof(Buff)) +00000435: 91800246 LDS R24,0x0246 Load direct from data space +00000437: 308A CPI R24,0x0A Compare with immediate +00000438: F451 BRNE PC+0x0B Branch if not equal 87: UCSR0B &=~ (1 << UDRIE0); +00000439: 918000C1 LDS R24,0x00C1 Load direct from data space +0000043B: 7D8F ANDI R24,0xDF Logical AND with immediate +0000043C: 938000C1 STS 0x00C1,R24 Store direct to data space 88: UCSR0B |= (1 << TXCIE0); +0000043E: 918000C1 LDS R24,0x00C1 Load direct from data space +00000440: 6480 ORI R24,0x40 Logical OR with immediate +00000441: 938000C1 STS 0x00C1,R24 Store direct to data space 91: } +00000443: 91FF POP R31 Pop register from stack +00000444: 91EF POP R30 Pop register from stack +00000445: 918F POP R24 Pop register from stack +00000446: 900F POP R0 Pop register from stack +00000447: BE0B OUT 0x3B,R0 Out to I/O location +00000448: 900F POP R0 Pop register from stack +00000449: BE0F OUT 0x3F,R0 Out to I/O location +0000044A: 900F POP R0 Pop register from stack +0000044B: 901F POP R1 Pop register from stack +0000044C: 9518 RETI Interrupt return Ассемблер код инициализации UART3 и прерываний. 159: { +0000051A: 9A88 SBI 0x11,0 Set bit in I/O register 162: FlagTx_3 = 0; +0000051B: 92100229 STS 0x0229,R1 Store direct to data space 164: UCSR3C |= ((1 << UCSZ30) | (1 << UCSZ31)); +0000051D: E3E2 LDI R30,0x32 Load immediate +0000051E: E0F1 LDI R31,0x01 Load immediate +0000051F: 8180 LDD R24,Z+0 Load indirect with displacement +00000520: 6086 ORI R24,0x06 Logical OR with immediate +00000521: 8380 STD Z+0,R24 Store indirect with displacement 165: UBRR3H = 0; +00000522: 92100135 STS 0x0135,R1 Store direct to data space 166: UBRR3L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k +00000524: E08E LDI R24,0x0E Load immediate +00000525: 93800134 STS 0x0134,R24 Store direct to data space 167: UDR3 = Buff[0]; +00000527: 91800857 LDS R24,0x0857 Load direct from data space +00000529: 93800136 STS 0x0136,R24 Store direct to data space 168: CountTx_3 = 1; +0000052B: E081 LDI R24,0x01 Load immediate +0000052C: 9380024E STS 0x024E,R24 Store direct to data space 169: UCSR3B |= ((1 << TXEN3) | (1 << UDRIE3)); +0000052E: E3E1 LDI R30,0x31 Load immediate +0000052F: E0F1 LDI R31,0x01 Load immediate +00000530: 8180 LDD R24,Z+0 Load indirect with displacement +00000531: 6288 ORI R24,0x28 Logical OR with immediate +00000532: 8380 STD Z+0,R24 Store indirect with displacement 170: } +00000533: 9508 RET Subroutine return @00000534: __vector_56 173: { +00000534: 921F PUSH R1 Push register on stack +00000535: 920F PUSH R0 Push register on stack +00000536: B60F IN R0,0x3F In from I/O location +00000537: 920F PUSH R0 Push register on stack +00000538: B60B IN R0,0x3B In from I/O location +00000539: 920F PUSH R0 Push register on stack +0000053A: 2411 CLR R1 Clear Register +0000053B: 938F PUSH R24 Push register on stack +0000053C: 93EF PUSH R30 Push register on stack +0000053D: 93FF PUSH R31 Push register on stack 174: FlagTx_3 = 1; +0000053E: E081 LDI R24,0x01 Load immediate +0000053F: 93800229 STS 0x0229,R24 Store direct to data space 176: UCSR3B &=~ ((1 << TXCIE3) | (1 << TXEN3) | (1 << UDRIE3)); +00000541: E3E1 LDI R30,0x31 Load immediate +00000542: E0F1 LDI R31,0x01 Load immediate +00000543: 8180 LDD R24,Z+0 Load indirect with displacement +00000544: 7987 ANDI R24,0x97 Logical AND with immediate +00000545: 8380 STD Z+0,R24 Store indirect with displacement 177: } +00000546: 91FF POP R31 Pop register from stack +00000547: 91EF POP R30 Pop register from stack +00000548: 918F POP R24 Pop register from stack +00000549: 900F POP R0 Pop register from stack +0000054A: BE0B OUT 0x3B,R0 Out to I/O location +0000054B: 900F POP R0 Pop register from stack +0000054C: BE0F OUT 0x3F,R0 Out to I/O location +0000054D: 900F POP R0 Pop register from stack +0000054E: 901F POP R1 Pop register from stack +0000054F: 9518 RETI Interrupt return @00000550: __vector_55 180: { +00000550: 921F PUSH R1 Push register on stack +00000551: 920F PUSH R0 Push register on stack +00000552: B60F IN R0,0x3F In from I/O location +00000553: 920F PUSH R0 Push register on stack +00000554: B60B IN R0,0x3B In from I/O location +00000555: 920F PUSH R0 Push register on stack +00000556: 2411 CLR R1 Clear Register +00000557: 938F PUSH R24 Push register on stack +00000558: 93EF PUSH R30 Push register on stack +00000559: 93FF PUSH R31 Push register on stack 181: PORTF &=~ (1 << 0); +0000055A: 9888 CBI 0x11,0 Clear bit in I/O register 183: UDR3 = Buff [CountTx_3]; +0000055B: 91E0024E LDS R30,0x024E Load direct from data space +0000055D: E0F0 LDI R31,0x00 Load immediate +0000055E: 5AE9 SUBI R30,0xA9 Subtract immediate +0000055F: 4FF7 SBCI R31,0xF7 Subtract immediate with carry +00000560: 8180 LDD R24,Z+0 Load indirect with displacement +00000561: 93800136 STS 0x0136,R24 Store direct to data space 185: CountTx_3++; +00000563: 9180024E LDS R24,0x024E Load direct from data space +00000565: 5F8F SUBI R24,0xFF Subtract immediate +00000566: 9380024E STS 0x024E,R24 Store direct to data space 186: if (CountTx_3 == sizeof(Buff)) +00000568: 9180024E LDS R24,0x024E Load direct from data space +0000056A: 308A CPI R24,0x0A Compare with immediate +0000056B: F451 BRNE PC+0x0B Branch if not equal 188: UCSR3B &=~ (1 << UDRIE3); +0000056C: 91800131 LDS R24,0x0131 Load direct from data space +0000056E: 7D8F ANDI R24,0xDF Logical AND with immediate +0000056F: 93800131 STS 0x0131,R24 Store direct to data space 189: UCSR3B |= (1 << TXCIE3); +00000571: 91800131 LDS R24,0x0131 Load direct from data space +00000573: 6480 ORI R24,0x40 Logical OR with immediate +00000574: 93800131 STS 0x0131,R24 Store direct to data space 192: } +00000576: 91FF POP R31 Pop register from stack +00000577: 91EF POP R30 Pop register from stack +00000578: 918F POP R24 Pop register from stack +00000579: 900F POP R0 Pop register from stack +0000057A: BE0B OUT 0x3B,R0 Out to I/O location +0000057B: 900F POP R0 Pop register from stack +0000057C: BE0F OUT 0x3F,R0 Out to I/O location +0000057D: 900F POP R0 Pop register from stack +0000057E: 901F POP R1 Pop register from stack +0000057F: 9518 RETI Interrupt return Не вижу я тут ни чего особенного. В дебагере видно, что регистры всех каналов инициализированы одинаково. Может это только в дебагере?
  15. Код, как он есть #include "PortDefine.h" #include "InitIO.h" #include <string.h> volatile unsigned char CountTx_0 = 0; volatile unsigned char CountTx_1 = 0; volatile unsigned char CountTx_2 = 0; volatile unsigned char CountTx_3 = 0; volatile unsigned char FlagTx_0 = 1; volatile unsigned char FlagTx_1 = 1; volatile unsigned char FlagTx_2 = 1; volatile unsigned char FlagTx_3 = 1; volatile char Buff[10]; void StartTX_0(void) { PORTF |= (1 << 0); FlagTx_0 = 0; UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01)); UBRR0H = 0; UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k UDR0 = Buff[0]; CountTx_0 = 1; UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0)); } ISR (USART0_TX_vect) { FlagTx_0 = 1; UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0)); } ISR (USART0_UDRE_vect) { PORTF &=~ (1 << 0); UDR0 = Buff [CountTx_0]; CountTx_0++; if (CountTx_0 == sizeof(Buff)) { UCSR0B &=~ (1 << UDRIE0); UCSR0B |= (1 << TXCIE0); return; } } void StartTX_1(void) { FlagTx_1 = 0; UCSR1C |= ((1 << UCSZ10) | (1 << UCSZ11)); UBRR1H = 0; UBRR1L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k UDR1 = Buff[0]; CountTx_1 = 1; UCSR1B |= ((1 << TXEN1) | (1 << UDRIE1)); } ISR (USART1_TX_vect) { FlagTx_1 = 1; UCSR1B &=~ ((1 << TXCIE1) | (1 << TXEN1) | (1 << UDRIE1)); } ISR (USART1_UDRE_vect) { UDR1 = Buff [CountTx_1]; CountTx_1++; if (CountTx_1 == sizeof(Buff)) { UCSR1B &=~ (1 << UDRIE1); UCSR1B |= (1 << TXCIE1); return; } } void StartTX_2(void) { FlagTx_2 = 0; PRR1 &=~ (1 << PRUSART2); UCSR2C |= ((1 << UCSZ20) | (1 << UCSZ21)); UBRR2H = 0; UBRR2L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k UDR2 = Buff[0]; CountTx_2 = 1; UCSR2B |= ((1 << TXEN2) | (1 << UDRIE2)); } ISR (USART2_TX_vect) { FlagTx_2 = 1; UCSR2B &=~ ((1 << TXCIE2) | (1 << TXEN2) | (1 << UDRIE2)); } ISR (USART2_UDRE_vect) { UDR2 = Buff [CountTx_2]; CountTx_2++; if (CountTx_2 == sizeof(Buff)) { UCSR2B &=~ (1 << UDRIE2); UCSR2B |= (1 << TXCIE2); return; } } void StartTX_3(void) { PORTF |= (1 << 0); FlagTx_3 = 0; PRR1 &=~ (1 << PRUSART3); UCSR3C |= ((1 << UCSZ30) | (1 << UCSZ31)); UBRR3H = 0; UBRR3L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k UDR3 = Buff[0]; CountTx_3 = 1; UCSR3B |= ((1 << TXEN3) | (1 << UDRIE3)); } ISR (USART3_TX_vect) { FlagTx_3 = 1; UCSR3B &=~ ((1 << TXCIE3) | (1 << TXEN3) | (1 << UDRIE3)); } ISR (USART3_UDRE_vect) { PORTF &=~ (1 << 0); UDR3 = Buff [CountTx_3]; CountTx_3++; if (CountTx_3 == sizeof(Buff)) { UCSR3B &=~ (1 << UDRIE3); UCSR3B |= (1 << TXCIE3); return; } } Ещё ассемблер гляну, сравню 0 и 3. Принимаю и отрабатываю любые предложения.
  16. У меня тоже ни когда с этим проблем не было. Предыдущая версия устройства на ATMega128 работает без вопросов и на других камнях тоже без вопросов UART работает. Пришло время расширять функциональность, выбрал ATMega2560, и тут засада, откуда не ждали! И мне уже не важно есть ли прерывания в эмуляторе, лишь бы они в железе были. Для теста все 4 канала инициализирую одинаково, а работают они по разному. Я уж думаю, не попал ли я на левак, но куплены МК в Терре. Описание UART-а на все 4 канала одно, ни каких особенностей инициализации по каналам не вижу, может, просто не вижу. Я не курящий, но для решения моей проблемы можно и поступится:) Подскажите какие страницы в даташите скуривать нужно?
  17. Ваш код сейчас попробовать не могу, только вечером, но он очень похож на мой. Проверяю дёрганием пинов. А Вы для ATMega2560 проверяли? Да, у меня AVRStudio+WINAVR. Но прерывания не идут не только в Studio, но и на живой плате. Где про «known issue...» прочитать? Может мне битый китаец попался?
  18. UART0, UART1 работают, а у второго и третьего каналов прерывания не идут. Инициализирую UART-ы одинаково, только номера меняю. Пример для UART0 volatile unsigned char FlagTx_0 = 1; volatile unsigned char FlagTx_1 = 1; volatile unsigned char FlagTx_2 = 1; volatile unsigned char FlagTx_3 = 1; volatile char Buff[10]; void StartTX_0(void) { FlagTx_0 = 0; UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01)); UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k UBRR0H = 0; UDR0 = Buff[0]; CountTx_0 = 1; UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0)); } ISR (USART0_TX_vect) { FlagTx_0 = 1; UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0)); } ISR (USART0_UDRE_vect) { UDR0 = Buff [CountTx_0]; CountTx_0++; if (CountTx_0 == sizeof(Buff)) { UCSR0B &=~ (1 << UDRIE0); UCSR0B |= (1 << TXCIE0); return; } } Сразу скажу, может не всё запрограммировано строго по правилам, но первые два канала работают, а вторые два нет. Ератта молчит. Регистры PRR0 и PRR1 проверял. Что не так делаю. Поделитесь кодом правильной работы с этими каналами.
  19. 1. Частота 13,824 это для RS485 (ежесекундный опрос оборудования). 2. Попробую. 3. Ёмкости, середина рекомендуемого диапазона, 15пФ. 4. 5В Буду и Ваши рекомендации пробовать и самые невероятные.
  20. О чём это? Можно понятнее. Предпологаю об измерении скорости работы МК. Точность то тут не нужна и так ни чего не понятно:)
  21. Поребрал все варианты, увы, не помогло.
  22. По поводу проверки скорости. По таймеру, у меня секундные тики генерятся и что бы они остались секундными, мне пришлось предделитель таймера уменьшить в 128 раз По поводу «"ровность" цифры 128». Честно говоря сейчас секундность периода проверял на глаз, но думаю, что оно правда.
  23. Но как я понимаю из описания эти биты влияют только на Start-up Times (Table 9-4. и Table 9-6.). Но всё равно проверю. Боитесь что сервер форума переполнится? Не стоит:) Но вы не правы. Я говорил, и по картинке это видно, что фьюз CKDIV8 не запрограммирован и следовательно, если регистр CLKPR не трогать, то биты CLKPSx будут иметь значения 0, а следовательно коэффициент деления 1.
  24. Взял пример Voice_Recorder_v2.04, переделал его под LPC2478 в Keil-е, запустил. В выходной буфер для теста сгенерил синус. После подачи команды Play the audio процессор из I2S прерывания, похоже, не выходит, т.е. отработка прерывания завершается и сразу возникает следующее. Из основного цикла ни какая команда больше не отрабатывается. В примере значение I2S_TXRATE = 16 (рассчитывается), если я сам ставлю I2S_TXRATE = 150 (границу не ловил), основной цикл начинает нормально работать. Где искать причину неправильной работы программы?