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 проверял. Что не так делаю. Поделитесь кодом правильной работы с этими каналами.
|