概要
今回は、AVRでUSART受信割り込みを使ったプログラムを作成したいと思います。
要件
- AVRはPCから送信された値を受信し、受信割り込みを発生する。
- 受信割り込み時に"echo back: <val> \n"という文字列をPCに送信できる。
- <val>はPCから送信された値で置換する。
準備
ハードウェア
前回同様、以前組み立てたAVR AtMega168Pマイコンボードを使用します。
もちろんこれは必須ではなく、AVR168Pもしくはこれと互換性のあるAVRマイコンとFT232RLが実装されており、USBでパソコンと接続できればOKです。
AVRとFT232RLの取り付けの解説は割愛しますが、次のように実装します。
- AVRのTXDとFT232RLのRXDが接続されている。
- AVRのRXDとFT232RLのTXDが接続されている。
AVRとFT232RLを使ったUSB-シリアル通信の実験に解説されているとおりです。
ライブラリ
AVR
dev3/usartsample/main.cを作成しました。割り込みなしのコードとほぼ同じですが、割り込み設定をしている箇所が異なります。
/** * 受信割り込み発生時に実行される関数 * @param data 受信データ */ void rxEventListener(uint8_t data) { printf("echo back: %d \n", data); } int main(void) { // 受信割り込みありでUSARTを初期化(8MHzクロック時, 9600ボーレート) USART_init(RX_COMPLETION_INTERRUPT, 51); // 受信割り込み発生時に実行する関数を登録 USART_setRxCompletionInterruptListener(*rxEventListener); // printfで使用する関数を登録 fdevopen(*USART_sendData, NULL); // 割り込み全許可 sei(); printf("Initialized>>\n"); while (1) { } }
- UCSRnBレジスタのRXCIEn(7bit目)を1(true)にして、受信割り込み許可を行っています。(該当コード
- 割り込みベクタUSART_RX_vectで受信割り込みを駆動できます。(該当コード)
- 初期化しても、sei()を唱えないと割り込みは発生しません。
C#
前回同様にSerialSample/Program.csを使用します。