Есть AT90CAN128, у которого используется USART1. При написании программы в CV AVR всё отлично пашет. Контроллер посылает данные в порт, гипертерминал их получает и выводит на экран. Т.е. железо в порядке. Но когда я попытался написать аналогичную программу в IAR, ком-порт работать перестал. При этом остальное не пострадало. Ниже приведены функции настройки и передачи данных.
Код
// Инициализация USART
void USART_Init( void )
{
// Включить приемник и передатчик
UCSR1B = ( 1 << RXEN1 ) | ( 1 << TXEN1 );
// 8 data, no parity, 1 stop
UCSR1C = ( 1 << UCSZ11 ) | ( 1 << UCSZ10 );
// 9600 bps при 16 MHz
UBRR1 = 103;
}
// Передача данных по USART
void USART1_Transmit( unsigned char data )
{
// Запись в буфер
UDR1 = data;
// Ожидание завершения передачи
while ( ! ( UCSR1A & ( 1 << TXC1 ) ) );
}
На ATmega8 данные функции работают после незначительной переделки ( только один USART, против двух у at90can128 ). В чем же дело?