Atmega169 / AVRバタフライのUARTを別のボードへの送信に使用しています。ボーレート56700、パリティなし、1ストップビット、フロー制御なし。発振器は7,3768Mhzで動作しています(チェック済み)。データを正常に送信できますが(他のボードとPC /ハイパーターミナルで確認)、データを受信できません-デバッガーを実行すると、構成ビットはすべて正しく設定されますが、RXCは常にfalseです-データを送信できるかどうかも確認しました私自身(TXDをRXDに接続し、接地)しましたが、成功しませんでした。(ISRとポーリングで試してみました)以下はコードの関連部分です、あなたがそれを処理できることを願っています-PORTBはオシロスコープでテストするための出力として使用されます(私は1つのピンを使用できることを知っていますが、何もありませんそれ以外の場合は、現在PORTBにあります):
int main(void){
OSCCAL_Calibrate(); // calibrate the internal oscillator
int UBRR_VAL = ((F_CPU)/(BAUD*16)-1);
UART_Init(UBRR_VAL);
DDRB |= 0xFF;
PORTB = 0;
testCharSend();
while(1);
return 0;
}
void testCharSend()
{
char i = 'x';
while(1){
Uart_Tx(i);
}
}
void UART_Init(unsigned int baudrate)
{
// Set baud rate
UBRRH = (unsigned char)(baudrate>>8);
UBRRL = (unsigned char)baudrate;
UCSRA = 0;
// Enable receiver and transmitter
UCSRB = (1<<RXEN)|(1<<TXEN);
// Async. mode, 8bit, No parity, 1 stop bit (like CC2540)
UCSRC = (0<<UMSEL)|(0<<UPM0)|(0<<USBS)|(3<<UCSZ0)|(0<<UCPOL);
// enable receive interrupt
UCSRB |= (1<<RXCIE);
// flush UART
UART_Flush();
}
void UART_Flush( void )
{
unsigned char dummy;
while ( UCSRA & (1<<RXC) ) dummy = UDR;
}
void Uart_Tx(char data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}
ISR (USART0_RX_vect)
{
PORTB ^= 0xFF;
char c = UDR;
}