Цитата(Starick @ Oct 12 2007, 09:48)

всем привет. Вопрос собствено вот в чем. Вроде все просто. Нужно мне юзать 4 юарта. Взял для этих целей м1280 и был бы счастлив, еслиб все они заработали. Но работают только 0 и 1 юарт, 2 и 3 нивкакую. Что я не так делаю? Для проверки даже на асме быстро прогу наваял. Прерывания от 0 и 1 срабатывают, а вот от 2 - нет.

Спецы, подскажите заблудившему в поиске истины.
В CodeVisionAVR заработали сразу все 4 порта. Инициализация и обработчики на С совершенно одинаковые для всех четырех UART.
Инициализация:
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 115200 (Double Speed Mode)
UCSR0A=0x02;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x07;
// USART2 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART2 Receiver: On
// USART2 Transmitter: On
// USART2 Mode: Asynchronous
// USART2 Baud Rate: 115200 (Double Speed Mode)
UCSR2A=0x02;
UCSR2B=0xD8;
UCSR2C=0x06;
UBRR2H=0x00;
UBRR2L=0x07;
Обработчики:
//***********************************
// USART0 Receiver interrupt service routine
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
unsigned char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
// код
}
}
//***************************************************
// USART2 Receiver interrupt service routine
interrupt [USART2_RXC] void usart2_rx_isr(void)
{
unsigned char status,data;
status=UCSR2A;
data=UDR2;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
// код
}
}