前回まででタイマー割り込みの使い方について紹介してきました。今回は割り込みの種類とそれぞれに使う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におけるシリアル通信の使い方を紹介します。