概要
今回は、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を使用します。
