AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page FAQ Library Reference Additional Documentation Example Projects

<avr/interrupt.h>: Interrupts


Detailed Description

Note:
このinterrupts と signals に関するディスカッションは Rich Neswoldさんのドキュメントからいただきました。 Acknowledgments(謝辞)もご覧ください。

Introduction to avr-libc's interrupt handling

割り込みコードの扱い方について、皆が納得できるコンパイラを捜すことは不可能に近いです。C言語は機種依存性からの脱却を目指してきたので、各々のコンパイラの制作者は彼らのサポート方法を(標準化のため)強制しようとしてきました。
AVR-GCC 環境では、ベクターテーブルは予め決められた名称の割り込みルーチンを指すように予め定義されています。割り込みルーチンに意図した割り込みに応じた適切な名前を使うことによって、あなたが書いたルーチンは対応する割り込みが発生したときに呼ばれることになります。デバイス依存ライブラリにはデフォルトの割り込みルーチンセットが提供されており、あなたが自分で定義しない場合はそれが使われます。(リセットが割り当てられている)
ベクタテーブルへのパッチは問題の1つにすぎません??。コンパイラは便宜的にコンパイラが生成したコードを実行中は、コンパイラ生成コード中でいくつかのレジスタセットを使用します。これらのレジスタやステータスレジスタを退避復帰することは重要なことです。これを行うための追加コードは割り込み関数に __attribute__((interrupt)) のタグを付けることで付加されます。
これらの仕様は割り込みルーチンをいくらか汚いものにしますが、これは割り込みAPIによって扱われます。割り込みルーチンはマクロ ISR() で実現されます。このマクロは対象ルーチンを各割り込み機能に対する割り込みハンドラとして登録します。
以下はADC割り込みの定義の一例です。
#include <avr/interrupt.h>

ISR(ADC_vect)
{
    // user code here
}
アセンブラだけで書いたプログラムの割り込みルーチンについては、 assembler programming の章を参照ください。

"全てを引き受ける" 割り込みベクタ (Catch-all interrupt vector)

意図しない割り込みが起こった場合のデフォルトの動作は、リセットベクタにジャンプすることでデバイスをリセットしてしまうように定義されています。割り込みハンドラなしに割り込みが有効になるのは、通常はプログラムにバグがあることを意味するからです。この動作を他の処理に置き換えるには、ISR() マクロを用いて__vector_default という名で割り込み関数を作ることで実現します。
#include <avr/interrupt.h>

ISR(__vector_default)
{
    // user code here
}

多重割り込み

AVRハードウェアは、割り込みベクタに飛ぶ前に、SREGレジスタ内のグローバル割り込みフラグをクリアしてそれ以上の割り込みを禁止します。こうして、通常は割り込みハンドラの内部では割り込みハンドラがRETI命令で終了する時まで割り込みが禁止されます。コンパイラは割り込みハンドラ終了処理に自動的にRETI命令を加えます。この理由により、割り込みハンドラは通常はネストできません。(※割り込みルーチンに対し別の割り込みがかからない)。大部分の割り込みハンドラでは、これは望ましい振る舞いです。無限に回帰割り込みかかってしまうことを防いでくれます。これはUART割り込みやレベルトリガ外部割り込みなどで起こりえます。
まれに、割り込み処理が終わるまで他の割り込みがかかるのが遅らされることを嫌って、あえて割り込みハンドラの先頭で割り込みを再許可したい場合があります。これは割り込みハンドラの先頭に sei() を置くことでも実現します。しかし、これは実際の割り込み開始から数コマンド後にしか実行されません(※レジスタ退避などの命令が先頭にはいるため)。
コンパイラは割り込みハンドラのちょうど先頭にSEIコマンドを置くことができます。以下のようにしてください。
void XXX_vect(void) __attribute__((interrupt));
void XXX_vect(void) {
  ...
}
XXX_vect はMCU毎に決まっている割り込みベクタの名前です。後述します。

ベクタの選択 : 割り込みベクタ名

割り込みは以下のテーブルにあるシンボルによって選択できます。
ベクタの名称には2つの異なるスタイルがあります。
一つはSIG_ で始まり、割り込みベクタを説明するちょっと冗長で気まぐれな名称??で続くものです。これはavr-libc version 1.2.xまでのもので利用可能です。
avr-libc version 1.4.0以降、2番目の割り込みベクタ名スタイルが加えられました。これは短いベクタの説明部分に続いて _vect が続くものです。この短い名称はデータシート(およびATMELのXMLファイル)内のベクター名称に一致するように定義されており、スペースはアンダースコア "_"に置き換え、その他の非英数字文字は削除した者です。接尾辞 "_vect" は似たようなネーミングを行う他のCコンパイラとの移植性のために設けられています。
SIG_で始まる伝統的なスタイルは将来のリリースでは推奨されなくなります。新しいプロジェクトにこれを使うのはお勧めできません。
Note:
ISR() マクロは引数をスペルチェックせずに渡します。そのため、ISR()でベクタ名のスペルミスをした場合、この関数マクロはそれでも割り込みハンドラとして有効ですが実際には割り込みベクタテーブルと結びつけられることがありません。コンパイラは疑わしい割り込み名をISR()内にみつけた場合はwarningを発します。たとえば、マクロ置換後の名前が"__vector_"で始まらない、 etc.。
Vector name Old vector name Description Applicable for device
ADC_vect SIG_ADC ADC Conversion Complete AT90S2333, AT90S4433, AT90S4434, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny13, ATtiny15, ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861
ANALOG_COMP_0_vect SIG_COMPARATOR0 Analog Comparator 0 AT90PWM3, AT90PWM2
ANALOG_COMP_1_vect SIG_COMPARATOR1 Analog Comparator 1 AT90PWM3, AT90PWM2
ANALOG_COMP_2_vect SIG_COMPARATOR2 Analog Comparator 2 AT90PWM3, AT90PWM2
ANALOG_COMP_vect SIG_COMPARATOR Analog Comparator AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
ANA_COMP_vect SIG_COMPARATOR Analog Comparator AT90S1200, AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny2313, ATtiny26, ATtiny28, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861
CANIT_vect SIG_CAN_INTERRUPT1 CAN Transfer Complete or Error AT90CAN128, AT90CAN32, AT90CAN64
EEPROM_READY_vect SIG_EEPROM_READY, SIG_EE_READY ATtiny2313
EE_RDY_vect SIG_EEPROM_READY EEPROM Ready AT90S2333, AT90S4433, AT90S4434, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny12, ATtiny13, ATtiny15, ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861
EE_READY_vect SIG_EEPROM_READY EEPROM Ready AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
INT0_vect SIG_INTERRUPT0 External Interrupt 0 AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny26, ATtiny28, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861
INT1_vect SIG_INTERRUPT1 External Interrupt Request 1 AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega64, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861
INT2_vect SIG_INTERRUPT2 External Interrupt Request 2 AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega32, ATmega323, ATmega64, ATmega8515, ATmega8535, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
INT3_vect SIG_INTERRUPT3 External Interrupt Request 3 AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
INT4_vect SIG_INTERRUPT4 External Interrupt Request 4 AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
INT5_vect SIG_INTERRUPT5 External Interrupt Request 5 AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
INT6_vect SIG_INTERRUPT6 External Interrupt Request 6 AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
INT7_vect SIG_INTERRUPT7 External Interrupt Request 7 AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
IO_PINS_vect SIG_PIN, SIG_PIN_CHANGE External Interrupt Request 0 ATtiny11, ATtiny12, ATtiny15, ATtiny26
LCD_vect SIG_LCD LCD Start of Frame ATmega169, ATmega329, ATmega3290, ATmega649, ATmega6490
LOWLEVEL_IO_PINS_vect SIG_PIN Low-level Input on Port B ATtiny28
OVRIT_vect SIG_CAN_OVERFLOW1 CAN Timer Overrun AT90CAN128, AT90CAN32, AT90CAN64
PCINT0_vect SIG_PIN_CHANGE0 Pin Change Interrupt Request 0 ATmega162, ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
PCINT1_vect SIG_PIN_CHANGE1 Pin Change Interrupt Request 1 ATmega162, ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny24, ATtiny44, ATtiny84
PCINT2_vect SIG_PIN_CHANGE2 Pin Change Interrupt Request 2 ATmega3250, ATmega3290, ATmega6450, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
PCINT3_vect SIG_PIN_CHANGE3 Pin Change Interrupt Request 3 ATmega3250, ATmega3290, ATmega6450, ATmega6490, ATmega324, ATmega164, ATmega644
PCINT_vect SIG_PIN_CHANGE, SIG_PCINT ATtiny2313, ATtiny261, ATtiny461, ATtiny861
PSC0_CAPT_vect SIG_PSC0_CAPTURE PSC0 Capture Event AT90PWM3, AT90PWM2
PSC0_EC_vect SIG_PSC0_END_CYCLE PSC0 End Cycle AT90PWM3, AT90PWM2
PSC1_CAPT_vect SIG_PSC1_CAPTURE PSC1 Capture Event AT90PWM3, AT90PWM2
PSC1_EC_vect SIG_PSC1_END_CYCLE PSC1 End Cycle AT90PWM3, AT90PWM2
PSC2_CAPT_vect SIG_PSC2_CAPTURE PSC2 Capture Event AT90PWM3, AT90PWM2
PSC2_EC_vect SIG_PSC2_END_CYCLE PSC2 End Cycle AT90PWM3, AT90PWM2
SPI_STC_vect SIG_SPI Serial Transfer Complete AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
SPM_RDY_vect SIG_SPM_READY Store Program Memory Ready ATmega16, ATmega162, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535
SPM_READY_vect SIG_SPM_READY Store Program Memory Read AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
TIM0_COMPA_vect SIG_OUTPUT_COMPARE0A Timer/Counter Compare Match A ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
TIM0_COMPB_vect SIG_OUTPUT_COMPARE0B Timer/Counter Compare Match B ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
TIM0_OVF_vect SIG_OVERFLOW0 Timer/Counter0 Overflow ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
TIM1_COMPA_vect SIG_OUTPUT_COMPARE1A Timer/Counter1 Compare Match A ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
TIM1_COMPB_vect SIG_OUTPUT_COMPARE1B Timer/Counter1 Compare Match B ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
TIM1_OVF_vect SIG_OVERFLOW1 Timer/Counter1 Overflow ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85
TIMER0_CAPT_vect SIG_INPUT_CAPTURE0 ADC Conversion Complete ATtiny261, ATtiny461, ATtiny861
TIMER0_COMPA_vect SIG_OUTPUT_COMPARE0A TimerCounter0 Compare Match A ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861
TIMER0_COMPB_vect SIG_OUTPUT_COMPARE0B, SIG_OUTPUT_COMPARE0_B Timer Counter 0 Compare Match B AT90PWM3, AT90PWM2, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861
TIMER0_COMP_A_vect SIG_OUTPUT_COMPARE0A, SIG_OUTPUT_COMPARE0_A Timer/Counter0 Compare Match A AT90PWM3, AT90PWM2
TIMER0_COMP_vect SIG_OUTPUT_COMPARE0 Timer/Counter0 Compare Match AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8515, ATmega8535
TIMER0_OVF0_vect SIG_OVERFLOW0 Timer/Counter0 Overflow AT90S2313, AT90S2323, AT90S2343, ATtiny22, ATtiny26
TIMER0_OVF_vect SIG_OVERFLOW0 Timer/Counter0 Overflow AT90S1200, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny11, ATtiny12, ATtiny15, ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861
TIMER1_CAPT1_vect SIG_INPUT_CAPTURE1 Timer/Counter1 Capture Event AT90S2313
TIMER1_CAPT_vect SIG_INPUT_CAPTURE1 Timer/Counter Capture Event AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny2313, ATtiny24, ATtiny44, ATtiny84
TIMER1_CMPA_vect SIG_OUTPUT_COMPARE1A Timer/Counter1 Compare Match 1A ATtiny26
TIMER1_CMPB_vect SIG_OUTPUT_COMPARE1B Timer/Counter1 Compare Match 1B ATtiny26
TIMER1_COMP1_vect SIG_OUTPUT_COMPARE1A Timer/Counter1 Compare Match AT90S2313
TIMER1_COMPA_vect SIG_OUTPUT_COMPARE1A Timer/Counter1 Compare Match A AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861
TIMER1_COMPB_vect SIG_OUTPUT_COMPARE1B Timer/Counter1 Compare MatchB AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861
TIMER1_COMPC_vect SIG_OUTPUT_COMPARE1C Timer/Counter1 Compare Match C AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
TIMER1_COMPD_vect SIG_OUTPUT_COMPARE0D Timer/Counter1 Compare Match D ATtiny261, ATtiny461, ATtiny861
TIMER1_COMP_vect SIG_OUTPUT_COMPARE1A Timer/Counter1 Compare Match AT90S2333, AT90S4433, ATtiny15
TIMER1_OVF1_vect SIG_OVERFLOW1 Timer/Counter1 Overflow AT90S2313, ATtiny26
TIMER1_OVF_vect SIG_OVERFLOW1 Timer/Counter1 Overflow AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny15, ATtiny2313, ATtiny261, ATtiny461, ATtiny861
TIMER2_COMPA_vect SIG_OUTPUT_COMPARE2A Timer/Counter2 Compare Match A ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
TIMER2_COMPB_vect SIG_OUTPUT_COMPARE2B Timer/Counter2 Compare Match A ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
TIMER2_COMP_vect SIG_OUTPUT_COMPARE2 Timer/Counter2 Compare Match AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535
TIMER2_OVF_vect SIG_OVERFLOW2 Timer/Counter2 Overflow AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega169, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
TIMER3_CAPT_vect SIG_INPUT_CAPTURE3 Timer/Counter3 Capture Event AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281
TIMER3_COMPA_vect SIG_OUTPUT_COMPARE3A Timer/Counter3 Compare Match A AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281
TIMER3_COMPB_vect SIG_OUTPUT_COMPARE3B Timer/Counter3 Compare Match B AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281
TIMER3_COMPC_vect SIG_OUTPUT_COMPARE3C Timer/Counter3 Compare Match C AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281
TIMER3_OVF_vect SIG_OVERFLOW3 Timer/Counter3 Overflow AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281
TIMER4_CAPT_vect SIG_INPUT_CAPTURE4 Timer/Counter4 Capture Event ATmega640, ATmega1280, ATmega1281
TIMER4_COMPA_vect SIG_OUTPUT_COMPARE4A Timer/Counter4 Compare Match A ATmega640, ATmega1280, ATmega1281
TIMER4_COMPB_vect SIG_OUTPUT_COMPARE4B Timer/Counter4 Compare Match B ATmega640, ATmega1280, ATmega1281
TIMER4_COMPC_vect SIG_OUTPUT_COMPARE4C Timer/Counter4 Compare Match C ATmega640, ATmega1280, ATmega1281
TIMER4_OVF_vect SIG_OVERFLOW4 Timer/Counter4 Overflow ATmega640, ATmega1280, ATmega1281
TIMER5_CAPT_vect SIG_INPUT_CAPTURE5 Timer/Counter5 Capture Event ATmega640, ATmega1280, ATmega1281
TIMER5_COMPA_vect SIG_OUTPUT_COMPARE5A Timer/Counter5 Compare Match A ATmega640, ATmega1280, ATmega1281
TIMER5_COMPB_vect SIG_OUTPUT_COMPARE5B Timer/Counter5 Compare Match B ATmega640, ATmega1280, ATmega1281
TIMER5_COMPC_vect SIG_OUTPUT_COMPARE5C Timer/Counter5 Compare Match C ATmega640, ATmega1280, ATmega1281
TIMER5_OVF_vect SIG_OVERFLOW5 Timer/Counter5 Overflow ATmega640, ATmega1280, ATmega1281
TWI_vect SIG_2WIRE_SERIAL 2-wire Serial Interface AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega16, ATmega163, ATmega32, ATmega323, ATmega64, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
TXDONE_vect SIG_TXDONE Transmission Done, Bit Timer Flag 2 Interrupt AT86RF401
TXEMPTY_vect SIG_TXBE Transmit Buffer Empty, Bit Itmer Flag 0 Interrupt AT86RF401
UART0_RX_vect SIG_UART0_RECV UART0, Rx Complete ATmega161
UART0_TX_vect SIG_UART0_TRANS UART0, Tx Complete ATmega161
UART0_UDRE_vect SIG_UART0_DATA UART0 Data Register Empty ATmega161
UART1_RX_vect SIG_UART1_RECV UART1, Rx Complete ATmega161
UART1_TX_vect SIG_UART1_TRANS UART1, Tx Complete ATmega161
UART1_UDRE_vect SIG_UART1_DATA UART1 Data Register Empty ATmega161
UART_RX_vect SIG_UART_RECV UART, Rx Complete AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515
UART_TX_vect SIG_UART_TRANS UART, Tx Complete AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515
UART_UDRE_vect SIG_UART_DATA UART Data Register Empty AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515
USART0_RXC_vect SIG_USART0_RECV USART0, Rx Complete ATmega162
USART0_RX_vect SIG_UART0_RECV USART0, Rx Complete AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega169, ATmega325, ATmega329, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
USART0_TXC_vect SIG_USART0_TRANS USART0, Tx Complete ATmega162
USART0_TX_vect SIG_UART0_TRANS USART0, Tx Complete AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
USART0_UDRE_vect SIG_UART0_DATA USART0 Data Register Empty AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega165, ATmega169, ATmega325, ATmega329, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
USART1_RXC_vect SIG_USART1_RECV USART1, Rx Complete ATmega162
USART1_RX_vect SIG_UART1_RECV USART1, Rx Complete AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
USART1_TXC_vect SIG_USART1_TRANS USART1, Tx Complete ATmega162
USART1_TX_vect SIG_UART1_TRANS USART1, Tx Complete AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
USART1_UDRE_vect SIG_UART1_DATA USART1, Data Register Empty AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644
USART2_RX_vect SIG_USART2_RECV USART2, Rx Complete ATmega640, ATmega1280, ATmega1281
USART2_TX_vect SIG_USART2_TRANS USART2, Tx Complete ATmega640, ATmega1280, ATmega1281
USART2_UDRE_vect SIG_USART2_DATA USART2 Data register Empty ATmega640, ATmega1280, ATmega1281
USART3_RX_vect SIG_USART3_RECV USART3, Rx Complete ATmega640, ATmega1280, ATmega1281
USART3_TX_vect SIG_USART3_TRANS USART3, Tx Complete ATmega640, ATmega1280, ATmega1281
USART3_UDRE_vect SIG_USART3_DATA USART3 Data register Empty ATmega640, ATmega1280, ATmega1281
USART_RXC_vect SIG_USART_RECV, SIG_UART_RECV USART, Rx Complete ATmega16, ATmega32, ATmega323, ATmega8
USART_RX_vect SIG_USART_RECV, SIG_UART_RECV USART, Rx Complete AT90PWM3, AT90PWM2, ATmega3250, ATmega3290, ATmega6450, ATmega6490, ATmega8535, ATmega168, ATmega48, ATmega88, ATtiny2313
USART_TXC_vect SIG_USART_TRANS, SIG_UART_TRANS USART, Tx Complete ATmega16, ATmega32, ATmega323, ATmega8
USART_TX_vect SIG_USART_TRANS, SIG_UART_TRANS USART, Tx Complete AT90PWM3, AT90PWM2, ATmega8535, ATmega168, ATmega48, ATmega88, ATtiny2313
USART_UDRE_vect SIG_USART_DATA, SIG_UART_DATA USART Data Register Empty AT90PWM3, AT90PWM2, ATmega16, ATmega32, ATmega323, ATmega3250, ATmega3290, ATmega6450, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATtiny2313
USI_OVERFLOW_vect SIG_USI_OVERFLOW USI Overflow ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega645, ATmega6450, ATmega649, ATmega6490, ATtiny2313
USI_OVF_vect SIG_USI_OVERFLOW USI Overflow ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861
USI_START_vect SIG_USI_START USI Start Condition ATmega165, ATmega169, ATmega325, ATmega3250, ATmega329, ATmega3290, ATmega645, ATmega6450, ATmega649, ATmega6490, ATtiny2313, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861
USI_STRT_vect SIG_USI_START USI Start ATtiny26
WDT_OVERFLOW_vect SIG_WATCHDOG_TIMEOUT, SIG_WDT_OVERFLOW Watchdog Timer Overflow ATtiny2313
WDT_vect SIG_WDT, SIG_WATCHDOG_TIMEOUT Watchdog Timeout Interrupt AT90PWM3, AT90PWM2, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega324, ATmega164, ATmega644, ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861

割り込みハンドラ関数記載のためのマクロ

#define ISR(vector)
#define SIGNAL(signame)
#define EMPTY_INTERRUPT(vector)

Define Documentation

#define EMPTY_INTERRUPT vector   ) 
 

Value:

void vector (void) __attribute__ ((naked));    \
void vector (void) { __asm__ __volatile__ ("reti" ::); }
#include <avr/interrupt.h>

空の割り込みハンドラを生成します。これはレジスタ退避復帰のための前処理、後処理を入れず、ただreturn(reti命令)コードだけとなります。関数本体を定義しないで下さい。

 EMPTY_INTERRUPT(ADC_vect);
#define ISR vector   ) 
 

Value:

void vector (void) __attribute__ ((signal));            \
void vector (void)
#include <avr/interrupt.h>

割り込みハンドラ関数(割り込みサービスルーチン)を生成する。グローバル割り込みは先頭で禁止される。
(割り込み終了時割り込み許可される)

vector は個々のMCUタイプに応じた、割り込みベクタ名のうちの1つでなければなりません。

#define SIGNAL signame   ) 
 

Value:

void signame (void) __attribute__ ((signal));           \
void signame (void)
#include <avr/interrupt.h>

割り込みハンドラ関数(割り込みサービスルーチン)を生成する。グローバル割り込みは先頭で禁止される。
(割り込み終了時割り込み許可される)

ISR()マクロと同じです。

Note:
新しく書くコードには使わないでください。これは将来は推奨されなくなります。

Automatically generated by Doxygen 1.4.1 on 23 Jan 2006.