1
私はAtmega169/AVR ButterflyのUARTを使用して別のボード、ボーレート56700、パリティなし、1ストップビット、フロー制御なしに送信しています。発振器は7,3768MHzで動作しています(チェックしてください)。私はデータを正常に送信することができます(他のボードとPC /ハイパーターミナルでチェックされていますが、データは受信されません) - デバッガを実行しているときに設定ビットはすべて正しく設定されていますが、RXCは常にfalseです。自分自身(TXDをRXDに接続して接地)しても、成功することはありません。 (ISRとポーリングを試してみた) コードの関連部分を以下に示します。PORTBはオシロスコープでテストするための出力として使用されています(1つのピンを使用することができますが、今PORTBの他には何も):AVR Butterfly UART - データを受信できません。
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;
}