0

attiny2313 の uart でバイトを送信しようとしていますが、UDR が使用可能になるまで待機するループで送信がハングします。

内部クロックは8MHzを使用しています。9600baud 8bit 1stopbit に設定された UART

私の初期化コードは次のとおりです。

#define F_CPU 8000000UL 
#define USART_BAUDRATE 9600UL
#define USART_UBBR_VALUE ((F_CPU / (USART_BAUDRATE << 4)) - 1) 

UBRRL = (uint8_t)USART_UBBR_VALUE;
UBRRH = (uint8_t)(USART_UBBR_VALUE >> 8); 
UCSRB = ((1 << TXEN) | (1<<RXEN));
UCSRC = ((1 << UCSZ1) | (1 << UCSZ0));

init の後、sei() を使用してグローバル割り込みを有効にします。

移行:

while (!(UCSRA & (1<<UDRE)));
UDR = 'B';

while ループでハングアップし、デバイスの電源を切ると、最後に while ループが中断され、B が送信されます。

初期化後に 200ms の遅延を追加しようとしましたが、うまくいきませんでした。

私は atmega88 に同様のコードを使用していますが、これは正常に動作しています。while ループにとどまる理由を知っている人はいますか?

4

0 に答える 0