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