前回まででタイマー割り込みの使い方について紹介してきました。今回は割り込みの種類とそれぞれに使うISR関数の引数(マクロ)を紹介したいと思います。

 Atmega系のマイコンのISR関数の引数はC:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\ATmega_DFP\1.2.150\include\avrのフォルダ内のiom****.h」(****にはマイコンの型番の数字が入る)のヘッダーファイルの下部に書かれています。それぞれ、「*****_vect(*****は割り込みごとに異なる)の形で表します。(それ以外の形で書かれているのは別物です)Atmega328Pの場合は「C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\ATmega_DFP\1.2.150\include\avr\iom328p.h」になります。(Atmega以外のマイコンの場合、上記のパスの「atmel」フォルダに戻り、それぞれのマイコンの種類を選択して同じように進んでください。(attiny2313の場合「C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\ATtiny_DFP\1.3.147\include\avr\ iotn2313.h」です。))今回は例として「atmega328P」の割り込みの種類とマクロ名を紹介します。

 

タイマー割り込み

割り込みの種類

マクロ名

タイマー0溢れ割り込み

TIMER0_OVF_vect

タイマー0比較A割り込み

TIMER0_COMPA_vect

タイマー0比較B割り込み

TIMER0_COMPB_vect

タイマー1溢れ割り込み

TIMER1_OVF_vect

タイマー1比較A割り込み

TIMER1_COMPA_vect

タイマー1比較B割り込み

TIMER1_COMPB_vect

タイマー1捕獲割り込み

TIMER1_CAPT_vect

タイマー2溢れ割り込み

TIMER2_OVF_vect

タイマー2比較A割り込み

TIMER2_COMPA_vect

タイマー2比較B割り込み

TIMER2_COMPB_vect

 

外部割込み

割り込みの種類

マクロ名

外部割込み1

INT0_vect

外部割込み2

INT1_vect

ピン変化割り込み0

PCINT0_vect

ピン変化割り込み1

PCINT1_vect

ピン変化割り込み2

PCINT2_vect

以上の2種類(タイマー、外部)の割り込みがマイコンの割り込みの代名詞ともいえるよく使われる割り込みとなっています。外部割込みの設定はatmega328Pの場合データシート(https://avr.jp/user/DS/PDF/mega328P.pdf )P50~53にかけて書かれています。軽くまとめておくと以下のようになります。

外部割込み

EICRAレジスタ:割り込みの条件(ピンの状態がどのように変化した時に割り込みを行うか)の設定

EIMSKレジスタ:外部割込みを許可するレジスタ

外部割込みは以上の2つのレジスタを設定して使います。EIFRレジスタは通常使いません。

ピン変化割り込み

PCICRレジスタ:ピン変化割り込みを許可するレジスタ

PCMSK0レジスタ:ピン変化割り込み0群のうち、変化を読み取るピンを選択するレジスタ

PCMSK1レジスタ:ピン変化割り込み1群のうち、変化を読み取るピンを選択するレジスタ

PCMSK2レジスタ:ピン変化割り込み2群のうち、変化を読み取るピンを選択するレジスタ

ピン変化割り込みは以上の4つのレジスタを設定して使います。PCIFRレジスタは通常使いません。

続いて、通信系の割り込みを紹介します。

通信系割り込み

割り込みの種類

マクロ名

シリアル通信受信完了割り込み

USART_RX_vect

シリアル通信送信完了割り込み

USART_TX_vect

シリアル通信データレジスタ空割り込み

USART_UDRE_vect

SPI通信転送完了割り込み

SPI_STC_vect

TWI(I2C)動作完了割り込み

TWI_vect

以上が通信系の割り込みとなります。「データレジスタ空割り込み」を除いて、通信の動作が完了し次のデータを送受信できる状態になった時がトリガーとなります。この割り込みを使うことでデータを受信したら、そのデータを読み込むといった動作が可能になります。なお、次回の記事でシリアル通信の使い方について紹介します。

 

その他割り込み

割り込みの種類

マクロ名

A/D変換完了割り込み

ADC_vect

アナログ比較器出力遷移

ANALOG_COMP_vect

ウォッチドッグ計時完了割り込み

WDT_vect

EEPROM操作可

EE_READY_vect

SPM命令操作可

SPM_READY_vect

最後のその他の割り込みは使う機会はあまりないと思います。使うとしてもA/D変換完了割り込みぐらいだと思います。

 

以上がatmega328Pにおける割り込みの種類とそれに対応するマクロです。マイコンの種類が変わっても、同様に考えれば割り込み処理は使えると思います。次回はatmega328Pにおけるシリアル通信の使い方を紹介します。