USARTライブラリの改良

ポーリングで受信するのがアホくさいので割り込みを使って実装しなおした。
UCSR0BのRXCIE0を1にセットする。
をインクルードして、sei();でグローバル割り込みを許可する。

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;
}