WDP 0 WDP 1
16. INT - 割り込み (Interrupts)
16.1. 割り込みベクタ
表16-1. リセットと割り込みのベクタ プログラム アドレス ベクタ
番号 発生元 備考
ATmega48/V ATmega168/V (注2) ATmega88/V
(注2)
1 $0000 $0000 (注1) $0000 (注1) RESET 電源ON, WDT, BOD等の各種リセット
2 $0001 $0001 $0002 INT0 外部割り込み要求0
3 $0002 $0002 $0004 INT1 外部割り込み要求1
4 $0003 $0003 $0006 PCINT0 (PCI0) ピン変化0群割り込み要求
5 $0004 $0004 $0008 PCINT1 (PCI1) ピン変化1群割り込み要求
6 $0005 $0005 $000A PCINT2 (PCI2) ピン変化2群割り込み要求
7 $0006 $0006 $000C WDT ウォッチドッグ計時完了
8 $0007 $0007 $000E TIMER2_COMPA タイマ/カウンタ2比較A一致
9 $0008 $0008 $0010 TIMER2_COMPB タイマ/カウンタ2比較B一致
10 $0009 $0009 $0012 TIMER2_OVF タイマ/カウンタ2溢れ
11 $000A $000A $0014 TIMER1_CAPT タイマ/カウンタ1捕獲発生
12 $000B $000B $0016 TIMER1_COMPA タイマ/カウンタ1比較A一致
13 $000C $000C $0018 TIMER1_COMPB タイマ/カウンタ1比較B一致
14 $000D $000D $001A TIMER1_OVF タイマ/カウンタ1溢れ
15 $000E $000E $001C TIMER0_COMPA タイマ/カウンタ0比較A一致
16 $000F $000F $001E TIMER0_COMPB タイマ/カウンタ0比較B一致
17 $0010 $0010 $0020 TIMER0_OVF タイマ/カウンタ0溢れ
18 $0011 $0011 $0022 SPI_STC SPI 転送完了
19 $0012 $0012 $0024 USART_RX USART 受信完了
20 $0013 $0013 $0026 USART_UDRE USART 送信緩衝部空き
21 $0014 $0014 $0028 USART_TX USART 送信完了
22 $0015 $0015 $002A ADC A/D変換完了
23 $0016 $0016 $002C EE_RDY EEPROM 操作可
24 $0017 $0017 $002E ANALOG_COMP アナログ比較器出力遷移
25 $0018 $0018 $0030 TWI 2線直列インターフェース状態変化
26 $0019 $0019 $0032 SPM_READY SPM命令操作可
注1: BOOTRSTヒューズがプログラム(0)されると、デバイスはリセットでブート ローダ アドレスへ飛びます。「BTLDR - ブート ローダ支援 (書き込 み中読み出し可能な自己プログラミング)」をご覧ください。
注2: MCU制御レジスタ(MCUCR)の割り込みベクタ選択(IVSEL)ビットがセット(1)されると、割り込みベクタはブート フラッシュ領域先頭(部)へ 移動されます。そして各割り込みベクタのアドレスは、この表のアドレスがブート フラッシュ領域の先頭アドレスに加算されます。
(訳注) 原書の表16-1.,表16-2.,表16-4.は表16-1.として纏めました。
下表ははBOOTRST(ヒューズ)とMCUCR.IVSEL(割り込みベクタ選択ビット)の様々な組み合わせに対するリセットと割り込みベクタの配置を 示します。プログラムが決して割り込み元を許可しないなら、割り込みベクタは使用されず、これらの位置に通常のプログラム コードが置けま す。これはリセット ベクタが応用領域の一方、割り込みベクタがブート領域、またはその逆の場合でも同様です。
表16-3. リセットと割り込みベクタの配置
割り込みベクタ先頭アドレス BOOTRST IVSEL リセット ベクタ アドレス
ATmega88/V ATmega168/V
$0001
$0000
0 $0002
非プログラム(1)
ブート領域先頭アドレス+$0001
$0000
1 ブート領域先頭アドレス+$0002
$0001 ブート領域先頭アドレス
0 $0002
プログラム(0)
ブート領域先頭アドレス+$0001 ブート領域先頭アドレス
1 ブート領域先頭アドレス+$0002
注: ブート領域先頭アドレスは表31-7.で示されます。
(訳注) 原書の表16-3.と表16-5.は表16-3.として纏めました。
本頁上記はATmega88/VとATmega168/Vにだけ適用されます。
ATmega48/V/88/Vでの最も代表的且つ一般的なリセットと割り込みのベクタ アドレス用設定を次に示します。
アドレス ラベル 命令 注釈
$0000 RJMP RESET ;各種リセット
$0001 RJMP EXT_INT0 ;外部割り込み要求0
$0002 RJMP EXT_INT1 ;外部割り込み要求1
$0003 RJMP PCINT0 ;ピン変化0群割り込み要求
$0004 RJMP PCINT1 ;ピン変化1群割り込み要求
$0005 RJMP PCINT2 ;ピン変化2群割り込み要求
$0006 RJMP WDT_OVF ;ウォッチドッグ計時完了
$0007 RJMP TIM2_COMPA ;タイマ/カウンタ2比較A一致
$0008 RJMP TIM2_COMPB ;タイマ/カウンタ2比較B一致
$0009 RJMP TIM2_OVF ;タイマ/カウンタ2溢れ
$000A RJMP TIM1_CAPT ;タイマ/カウンタ1捕獲発生
$000B RJMP TIM1_COMPA ;タイマ/カウンタ1比較A一致
$000C RJMP TIM1_COMPB ;タイマ/カウンタ1比較B一致
$000D RJMP TIM1_OVF ;タイマ/カウンタ1溢れ
$000E RJMP TIM0_COMPA ;タイマ/カウンタ0比較A一致
$000F RJMP TIM0_COMPB ;タイマ/カウンタ0比較B一致
$0010 RJMP TIM0_OVF ;タイマ/カウンタ0溢れ
$0011 RJMP SPI_STC ;SPI転送完了
$0012 RJMP USART_RXC ;USART 受信完了
$0013 RJMP USART_UDRE ;USART 送信緩衝部空
$0014 RJMP USART_TXC ;USART 送信完了
$0015 RJMP ADC ;ADC変換完了
$0016 RJMP EE_RDY ;EEPROM操作可
$0017 RJMP ANA_COMP ;アナログ比較器出力遷移
$0018 RJMP TWI ;2線直列インターフェース状態変化
$0019 RJMP SPM_RDY ;SPM命令操作可
;
$001A RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得
$001B OUT SPH,R16 ;スタック ポインタ上位を初期化
$001C LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$001D OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
~
ATmega88/VでBOOTRSTヒューズが非プログラム(1)、ブート領域容量が2Kバイトに設定され、どの割り込みが許可されるのにも先立って MCU制御レジスタ(MCUCR)の割り込みベクタ選択(IVSEL)ビットが設定(1)される時の最も代表的且つ一般的なリセットと割り込みのベクタ ア ドレス用設定を次に示します。
アドレス ラベル 命令 注釈
;各種リセット (BOOTRSTヒューズ=1)
$0000 RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 (応用プログラム開始)
$0001 OUT SPH,R16 ;スタック ポインタ上位を初期化
$0002 LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$0003 OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
.ORG $0C01 ;ブート プログラム領域が2Kバイトの場合
$0C01 RJMP EXT_INT0 ;外部割り込み要求0
$0C02 RJMP EXT_INT1 ;外部割り込み要求1
$0C19 RJMP ~~ SPM_RDY ;SPM命令操作可
ATmega88/VでBOOTRSTヒューズがプログラム(0)、ブート領域容量が2Kバイトに設定される時の最も代表的且つ一般的なリセットと割り込み のベクタ アドレス用設定を次に示します。
アドレス ラベル 命令 注釈
.ORG $0001 ;割り込みベクタ先頭
$0001 RJMP EXT_INT0 ;外部割り込み要求0
$0002 RJMP EXT_INT1 ;外部割り込み要求1
$0019 RJMP SPM_RDY ;SPM命令操作可
;以下、プログラムなど
.ORG $0C00 ;ブート プログラム領域が2Kバイトの場合
;各種リセット (BOOTRSTヒューズ=0)
$0C00 RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 (プログラム開始)
$0C01 OUT SPH,R16 ;スタック ポインタ上位を初期化
$0C02 LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$0C03 OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
~~~
ATmega88/VでBOOTRSTヒューズがプログラム(0)、ブート領域容量が2Kバイトに設定され、どの割り込みが許可されるのにも先立って MCU制御レジスタ(MCUCR)の割り込みベクタ選択(IVSEL)ビットが設定(1)される時の最も代表的且つ一般的なリセットと割り込みのベクタ ア ドレス用設定を次に示します。
アドレス ラベル 命令 注釈
.ORG $0C00 ;ブート プログラム領域が2Kバイトの場合
$0C00 RJMP RESET ;各種リセット (BOOTRSTヒューズ=0)
$0C01 RJMP EXT_INT0 ;外部割り込み要求0
$0C02 RJMP EXT_INT1 ;外部割り込み要求1
$0C19 RJMP SPM_RDY ;SPM命令操作可
;
$0C1A RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 (プログラム開始)
$0C1B OUT SPH,R16 ;スタック ポインタ上位を初期化
$0C1C LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$0C1D OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
~~
ATmega168/Vでの最も代表的且つ一般的なリセットと割り込みのベクタ アドレス用設定を次に示します。
アドレス ラベル 命令 注釈
$0000 JMP RESET ;各種リセット
$0002 JMP EXT_INT0 ;外部割り込み要求0
$0004 JMP EXT_INT1 ;外部割り込み要求1
$0006 JMP PCINT0 ;ピン変化0群割り込み要求
$0008 JMP PCINT1 ;ピン変化1群割り込み要求
$000A JMP PCINT2 ;ピン変化2群割り込み要求
$000C JMP WDT_OVF ;ウォッチドッグ計時完了
$000E JMP TIM2_COMPA ;タイマ/カウンタ2比較A一致
$0010 JMP TIM2_COMPB ;タイマ/カウンタ2比較B一致
$0012 JMP TIM2_OVF ;タイマ/カウンタ2溢れ
$0014 JMP TIM1_CAPT ;タイマ/カウンタ1捕獲発生
$0016 JMP TIM1_COMPA ;タイマ/カウンタ1比較A一致
$0018 JMP TIM1_COMPB ;タイマ/カウンタ1比較B一致
$001A JMP TIM1_OVF ;タイマ/カウンタ1溢れ
$001C JMP TIM0_COMPA ;タイマ/カウンタ0比較A一致
$001E JMP TIM0_COMPB ;タイマ/カウンタ0比較B一致
$0020 JMP TIM0_OVF ;タイマ/カウンタ0溢れ
$0022 JMP SPI_STC ;SPI転送完了
$0024 JMP USART_RXC ;USART 受信完了
$0026 JMP USART_UDRE ;USART 送信緩衝部空
$0028 JMP USART_TXC ;USART 送信完了
$002A JMP ADC ;ADC変換完了
$002C JMP EE_RDY ;EEPROM操作可
$002E JMP ANA_COMP ;アナログ比較器出力遷移
$0030 JMP TWI ;2線直列インターフェース状態変化
$0032 JMP SPM_RDY ;SPM命令操作可
;
$0034 RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得
$0035 OUT SPH,R16 ;スタック ポインタ上位を初期化
$0036 LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$0037 OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
~
ATmega168/VでBOOTRSTヒューズが非プログラム(1)、ブート領域容量が2Kバイトに設定され、どの割り込みが許可されるのにも先立って MCU制御レジスタ(MCUCR)の割り込みベクタ選択(IVSEL)ビットが設定(1)される時の最も代表的且つ一般的なリセットと割り込みのベクタ ア ドレス用設定を次に示します。
アドレス ラベル 命令 注釈
;各種リセット (BOOTRSTヒューズ=1)
$0000 RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 (応用プログラム開始)
$0001 OUT SPH,R16 ;スタック ポインタ上位を初期化
$0002 LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$0003 OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
.ORG $1C02/$3C02 ;ブート プログラム領域が2Kバイトの場合
$1C02/$3C02 JMP EXT_INT0 ;外部割り込み要求0
$1C04/$3C04 JMP EXT_INT1 ;外部割り込み要求1
$1C32/$3C32 JMP ~~ SPM_RDY ;SPM命令操作可
ATmega168/VでBOOTRSTヒューズがプログラム(0)、ブート領域容量が2Kバイトに設定される時の最も代表的且つ一般的なリセットと割り込 みのベクタ アドレス用設定を次に示します。
アドレス ラベル 命令 注釈
.ORG $0002 ;割り込みベクタ先頭
$0002 JMP EXT_INT0 ;外部割り込み要求0
$0004 JMP EXT_INT1 ;外部割り込み要求1
$0032 JMP SPM_RDY ;SPM命令操作可
;以下、プログラムなど
.ORG $1C00/$3C00 ;ブート プログラム領域が2Kバイトの場合
;各種リセット (BOOTRSTヒューズ=0)
$1C00/$3C00 RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 (プログラム開始)
$1C01/$3C01 OUT SPH,R16 ;スタック ポインタ上位を初期化
$1C02/$3C02 LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$1C03/$3C03 OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
~~~
ATmega168/VでBOOTRSTヒューズがプログラム(0)、ブート領域容量が2Kバイトに設定され、どの割り込みが許可されるのにも先立って MCU制御レジスタ(MCUCR)の割り込みベクタ選択(IVSEL)ビットが設定(1)される時の最も代表的且つ一般的なリセットと割り込みのベクタ ア ドレス用設定を次に示します。
アドレス ラベル 命令 注釈
.ORG $1C00/$3C00 ;ブート プログラム領域が2Kバイトの場合
$1C00/$3C00 JMP RESET ;各種リセット (BOOTRSTヒューズ=0)
$1C02/$3C02 JMP EXT_INT0 ;外部割り込み要求0
$1C04/$3C04 JMP EXT_INT1 ;外部割り込み要求1
$1C32/$3C32 JMP SPM_RDY ;SPM命令操作可
;
$1C34/$3C34 RESET: LDI R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 (プログラム開始)
$1C35/$3C35 OUT SPH,R16 ;スタック ポインタ上位を初期化
$1C36/$3C36 LDI R16,LOW(RAMEND) ;RAM最終アドレス下位を取得
$1C37/$3C37 OUT SPL,R16 ;スタック ポインタ下位を初期化
;以下、I/O初期化など
~~