WDP 0 WDP 1
12. 割り込み
12.1. 割り込みベクタ
表12-1. リセットと割り込みのベクタ プログラム アドレス ベクタ
番号 ATmega 発生元 備考
48P/48PA
ATmega 168A/168PA/
328/328P (注2) ATmega
88A/88PA (注2)
1 $0000 $0000 (注1) $0000 (注1) リセット 電源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 タイマ/カウンタ2 COMPA タイマ/カウンタ2比較A一致
9 $0008 $0008 $0010 タイマ/カウンタ2 COMPB タイマ/カウンタ2比較B一致
10 $0009 $0009 $0012 タイマ/カウンタ2 OVF タイマ/カウンタ2溢れ
11 $000A $000A $0014 タイマ/カウンタ1 CAPT タイマ/カウンタ1捕獲発生
12 $000B $000B $0016 タイマ/カウンタ1 COMPA タイマ/カウンタ1比較A一致
13 $000C $000C $0018 タイマ/カウンタ1 COMPB タイマ/カウンタ1比較B一致
14 $000D $000D $001A タイマ/カウンタ1 OVF タイマ/カウンタ1溢れ
15 $000E $000E $001C タイマ/カウンタ0 COMPA タイマ/カウンタ0比較A一致
16 $000F $000F $001E タイマ/カウンタ0 COMPB タイマ/カウンタ0比較B一致
17 $0010 $0010 $0020 タイマ/カウンタ0 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 A/D変換器 ADC A/D変換完了
23 $0016 $0016 $002C EEPROM EE_RDY EEPROM 操作可
24 $0017 $0017 $002E アナログ比較器 ANA_COMP アナログ比較器出力遷移
25 $0018 $0018 $0030 2線直列インターフェース TWI 2線直列インターフェース状態変化
26 $0019 $0019 $0032 SPM命令 SPM_RDY SPM命令操作可
注1: BOOTRSTヒューズがプログラム(0)されると、デバイスはリセットでブート ローダ アドレスへ飛びます。171頁の「ブート ローダ(書き込み中読 み出し可能な自己プログラミング)」をご覧ください。
注2: MCU制御レジスタ(MCUCR)の割り込みベクタ選択(IVSEL)ビットが設定(1)されると、割り込みベクタはブート フラッシュ領域先頭(部)へ 移動されます。そして各割り込みベクタのアドレスは、この表のアドレスがブート フラッシュ領域の先頭アドレスに加算されます。
(訳注) 原書の表12-1.,表12-2.,表12-4.,表12-6.は表12-1.として纏めました。
表12-3.はBOOTRST(ヒューズ)とIVSEL(割り込みベク タ選択ビット)の様々な組み合わせに対するリセット ベクタと割り込みベクタの配置を示 します。プログラムが決して割り込み元を許可しないのなら、割り込みベクタは使用されず、これらの位置に通常のプログラム コー ドが置け ます。これはリセット ベクタが応用領域の一方、割り込みベクタがブート領域、またはその逆の場合でも同様です。
表12-3. リセットと割り込みベクタの配置
割り込みベクタ先頭アドレス BOOTRST IVSEL リセット ベクタ アドレス
ATmega88A/88PA ATmega168A/168PA/328/328P
$0001
$0000
0 $0002
非プログラム(1)
ブート領域先頭アドレス+$0001
$0000
1 ブート領域先頭アドレス+$0002
$0001 ブート領域先頭アドレス
0 $0002
プログラム(0)
ブート領域先頭アドレス+$0001 ブート領域先頭アドレス
1 ブート領域先頭アドレス+$0002
注: ブート領域先頭アドレスは179頁の表27-7.で示されます。
(訳注) 原書の表12-3.,表12-5.と表12-7.は表12-3.として纏めました。
本頁上記はATmega88A/88PA/168A/168PA/328/328Pにのみ適用されます。
ATmega48A/48PA/88A/88PAでの最も代表的且つ一般的なリセットと割り込みのベクタ アドレス用設定を次に示します。
アドレス ラベル 命令 注釈
$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初期化など
~
ATmega48A/48PA/88A/88PA/168A/168PA/328/328P [データシート] 36 ATmega88A/88PAで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命令操作可
ATmega88A/88PAで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初期化など
~~~
ATmega88A/88PAで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初期化など
~~
ATmega168A/168PA/328/328Pでの最も代表的且つ一般的なリセットと割り込みのベクタ アドレス用設定を次に示します。
アドレス ラベル 命令 注釈
$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初期化など
~
ATmega168A/168PA/328/328Pで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命令操作可
ATmega48A/48PA/88A/88PA/168A/168PA/328/328P [データシート] 38 ATmega168A/168PA/328/328Pで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初期化など
~~~
ATmega168A/168PA/328/328Pで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初期化など
~~