Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
USART_RX_vect

USART_RX_vect

概要

USART_RX_vectは、シリアル通信でデータを受信したときに起動される割り込みハンドラです。ATMega328Pのシリアル通信受信バッファから、Arduinoのシリアル通信受信バッファにデータをコピーします。

ソースコード

USART_RX_vectは、hardware/arduino/cores/arduino/HardwareSerial.cpp に定義されています。以下に全ソースコードを示します。

  ISR(USART_RX_vect)
  {
    if (bit_is_clear(UCSR0A, UPE0)) {
      unsigned char c = UDR0;
      store_char(c, &rx_buffer);
    } else {
      unsigned char c = UDR0;
    };
  }

ISR()は、割り込みハンドラを定義する際に利用するマクロです。関数の属性を指定して、割り込みハンドラでの利用を示します。

bit_is_clear()は、第1引数の第2引数ビット目が0かどうかを調べるマクロです。

UCSR0AレジスタのUPE0ビットが0のとき、シリアルデータが格納されるUDR0をcにコピーした後、store_char()を呼び出し、データを受信バッファに格納します。そうでないときは、UDR0をcにコピーするだけで、バッファには書き込まれません。

UPE0は、パリティエラーが発生したときに1に設定されます。

バージョン

Arduino 1.0.5



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2012 garretlab all rights reserved.
inserted by FC2 system