ポーリングで受信するのがアホくさいので割り込みを使って実装しなおした。
UCSR0BのRXCIE0を1にセットする。
usart.cpp
... void Usart::USART_init(unsigned int ubrr){ UBRR0H = (ubrr>>8); UBRR0L = ubrr; UCSR0B = _BV(RXEN0)|_BV(TXEN0)|_BV(RXCIE0); //RX受信完了割り込み許可 UCSR0C = (3<<UCSZ00); } ...
main.cpp
#include "usart.h" #include <avr/interrupt.h> ISR(USART_RX_vect){//RX受信完了割り込みハンドラ char data = Usart::USART_recv(); Usart::USART_Transmit(data); } int main(void){ int ubrr = Usart::getUBRR(9600); Usart::USART_init(ubrr); Usart::putString("Hello!\n"); sei();//グローバル割り込みイネーブル while(1){ } return 0; }