WDP 0 WDP 1
13. 外部割り込み
外部割り込みはINT0,INT1ピンまたはPCINT0~23ピンの何れかによって起動されます。許可したなら、例えINT0,1またはPCINT0~23 ピンが出力として設定されても、割り込みが起動することに注目してください。この特徴はソフトウェア割り込みを生成する方法を提供しま す。ピン変化割り込みPCI2は許可したPCINT16~23の何れかが切り替わると起動します。ピン変化割り込みPCI1は許可したPCINT8
~14の何れかが切り替わると起動します。ピン変化割り込みPCI0は許可したPCINT0~7の何れかが切り替わると起動します。ピン変化 割り込み許可レジスタ(PCMSK0,PCMSK1,PCMSK2)は、どのピンがピン変化割り込み要因となるかを制御します。PCINT0~23でのピン 変化割り込みは非同期に検知されます。これはそれらの割り込みがアイドル動作以外の休止形態からもデバイスを起動するのに使用で きることを意味します。
INT0とINT1割り込みは上昇端または下降端(含む両端)、またはLowレベルによって起動できます。これは外部割り込み制御レジスタA (EICRA)の詳述で示される設定です。INT0またはINT1割り込みがレベル起動として設定、且つ許可されると、そのピンがLowに保持さ れる限り、割り込みは(継続的に)起動します。INT0またはINT1の上昇端や下降端割り込みの認知は、17頁の「クロック系統とその配給」
で記述されるI/Oクロックの存在を必要とすることに注意してください。INT0とINT1のLowレベル割り込みは非同期に検知されます。これ はそれらの割り込みがアイドル動作以外の休止形態からもデバイスを起動するのに使用できることを意味します。I/Oクロックはアイドル動作 を除く全休止形態で停止されます。
注: レベル起動割り込みがパワーダウン動作からの起動に使用される場合、この必要としたレベルはレベル割り込みを起動する完全な起動 復帰のため、MCUに対して充分長く保持されなければならないことに注意してください。このレベルが起動時間の最後に先立って 消滅すると、MCUは今までどおり起動しますが、割り込みが生成されません。起動時間は17頁の「システム クロックとクロック選択」で示 されるようにSUTヒューズとCKSELヒューズで定義されます。
13.1. ピン変化割り込みタイミング
ピン変化割り込みの例は図13-1.で示されます。
図13-1. ピン変化割り込みタイミング PCINTn
clk
本数分合成
Q D E
Q D
~
PCMSKmの PCINTn Q
D D Q D Q PCIFm
A B C
D E
PCINTn A: ラッチ B: 遅延 C: 変化 D: 遅延 E: 遅延
clk
PCIFm
- - - - ISC11 ISC10 ISC01 ISC00
7 6 5 4 3 2 1 0
ビット
EICRA ($69)
R/W R/W
R/W R/W
R R
R R
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~4 - 予約 (Reserved)
これらのビットは予約されており、常に0として読まれます。
● ビット3,2 - ISC11,0 : 外部割り込み1条件制御 (Interrupt Sense Control 1 bit1 and 0) 外部割り込み1はステータス レジスタ(SREG)の全割り込み許可(I)ビットと外部割り
込み許可レジスタ(EIMSK)の外部割り込み1許可(INT1)ビットが設定(1)される場 合のINT1外部ピンによって活性(有効)にされます。割り込みを活性にする外 部INT1ピンのエッジとレベルは表13-1.で定義されます。INT1ピンの値はエッジ検 出に先立って採取されています。エッジまたは論理変化割り込みが選択され る場合、1クロック周期よりも長く留まるパルスは割り込みを生成します。より短い パルスは割り込みの発生が保証されません。Lowレベル割り込みが選択される 場合、そのLowレベルは割り込みを生成するために現在実行している命令の 完了まで保たれなければなりません。
13.2. 外部割り込み用レジスタ
13.2.1. EICRA - 外部割り込み制御レジスタA (External Interrupt Control Register A) 外部割り込み制御レジスタAは割り込み条件制御ビットを含みます。
表13-1. 外部割り込み1(INT1)割り込み条件
ISC11 割り込み発生条件
0 INT1ピンがLowレベルで発生。
INT1ピンの論理変化(両端)。
1 INT1ピンの下降端で発生。
INT1ピンの上昇端で発生。
ISC10
0 1
0 1 0 1
● ビット1,0 - ISC01,0 : 外部割り込み0条件制御 (Interrupt Sense Control 0 bit1 and 0) 外部割り込み0はステータス レジスタ(SREG)の全割り込み許可(I)ビットと外部割り
込み許可レジスタ(EIMSK)の外部割り込み0許可(INT0)ビットが設定(1)される場 合のINT0外部ピンによって活性(有効)にされます。割り込みを活性にする外 部INT0ピンのエッジとレベルは表13-2.で定義されます。INT0ピンの値はエッジ検 出に先立って採取されています。エッジまたは論理変化割り込みが選択され る場合、1クロック周期よりも長く留まるパルスは割り込みを生成します。より短い パルスは割り込みの発生が保証されません。Lowレベル割り込みが選択される 場合、そのLowレベルは割り込みを生成するために現在実行している命令の 完了まで保たれなければなりません。
表13-2. 外部割り込み0(INT0)割り込み条件
ISC01 割り込み発生条件
0 INT0ピンがLowレベルで発生。
INT0ピンの論理変化(両端)。
1 INT0ピンの下降端で発生。
INT0ピンの上昇端で発生。
ISC00
0 1
0 1 0 1
13.2.2. EIMSK - 外部割り込み許可レジスタ (External Interrupt Mask Register)
- - - INT1 INT0
7 6 5 4 3 2 1 0
ビット
EIMSK
$1D ($3D)
R/W R/W
R R
R R
R R
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~2 - 予約 (Reserved)
これらのビットは予約されており、常に0として読まれます。
● ビット1 - INT1 : 外部割り込み1 許可 (External Interrupt Request 1 Enable)
ステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)され、INT1ビットが設定(1)されると、INT1外部ピン割り込みが許可されます。
外部割り込み制御レジスタA(EICRA)の割り込み条件制御1のビット1と0(ISC11,ISC10)は、この外部割り込みがINT1ピンの上昇端、下降 端、両端、またはLowレベルのどれで活性(有効)にされるかを定義します。例えINT1ピンが出力として設定されても、このピンの動きは割 り込み要求を引き起こします。外部割り込み要求1に対応する割り込みはINT1割り込みベクタから実行されます。
● ビット0 - INT0 : 外部割り込み0 許可 (External Interrupt Request 0 Enable)
ステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)され、INT0ビットが設定(1)されると、INT0外部ピン割り込みが許可されます。
外部割り込み制御レジスタA(EICRA)の割り込み条件制御0のビット1と0(ISC01,ISC00)は、この外部割り込みがINT0ピンの上昇端、下降 端、両端、またはLowレベルのどれで活性(有効)にされるかを定義します。例えINT0ピンが出力として設定されても、このピンの動きは割 り込み要求を引き起こします。外部割り込み要求0に対応する割り込みはINT0割り込みベクタから実行されます。
13.2.3. EIFR - 外部割り込み要求フラグ レジスタ (External Interrupt Flag Register)
- - - INTF1 INTF0
7 6 5 4 3 2 1 0
ビット
EIFR
$1C ($3C)
R/W R/W
R R
R R
R R
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~2 - 予約 (Reserved)
これらのビットは予約されており、常に0として読まれます。
● ビット1 - INTF1 : 外部割り込み1要求フラグ (External Interrupt Flag 1)
INT1ピン上のエッジまたは論理変化が割り込み要求を起動すると、INTF1が設定(1)になります。ステータス レジスタ(SREG)の全割り込み許 可(I)ビットと外部割り込み許可レジスタ(EIMSK)の外部割り込み1許可(INT1)ビットが設定(1)なら、MCUは対応する割り込みベクタへ飛び ます。このフラグは割り込みルーチンが実行されると解除(0)されます。代わりにこのフラグは論理1を書くことによっても解除(0)できます。
INT1がレベル割り込みとして設定されると、このフラグは常に解除(0)されます。
● ビット0 - INTF0 : 外部割り込み0要求フラグ (External Interrupt Flag 0)
INT0ピン上のエッジまたは論理変化が割り込み要求を起動すると、INTF0が設定(1)になります。ステータス レジスタ(SREG)の全割り込み許 可(I)ビットと外部割り込み許可レジスタ(EIMSK)の外部割り込み0許可(INT0)ビットが設定(1)なら、MCUは対応する割り込みベクタへ飛び ます。このフラグは割り込みルーチンが実行されると解除(0)されます。代わりにこのフラグは論理1を書くことによっても解除(0)できます。
INT0がレベル割り込みとして設定されると、このフラグは常に解除(0)されます。
ATmega48A/48PA/88A/88PA/168A/168PA/328/328P [データシート] 42 13.2.4. PCICR - ピン変化割り込み制御レジスタ (Pin Change Interrupt Control Register)
- - - PCIE2 PCIE1 PCIE0
7 6 5 4 3 2 1 0
ビット
PCICR ($68)
R/W R/W
R/W R
R R
R R
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~3 - 予約 (Reserved)
これらのビットは予約されており、常に0として読まれます。
● ビット2 - PCIE2 : ピン変化割り込み2 許可 (Pin Change Interrupt Enable 2)
ステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)され、PCIE2ビットが設定(1)されると、ピン変化割り込み2が許可されます。許 可したPCINT16~23ピンの何れかの変化が割り込みを起こします。このピン変化割り込み要求に対応する割り込みはPCI2割り込みベク タから実行されます。PCINT16~23ピンはピン変化割り込み許可2 レジスタ(PCMSK2)によって個別に許可されます。
● ビット1 - PCIE1 : ピン変化割り込み1 許可 (Pin Change Interrupt Enable 1)
ステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)され、PCIE1ビットが設定(1)されると、ピン変化割り込み1が許可されます。許 可したPCINT8~14ピンの何れかの変化が割り込みを起こします。このピン変化割り込み要求に対応する割り込みはPCI1割り込みベク タから実行されます。PCINT8~14ピンはピン変化割り込み許可1 レジスタ(PCMSK1)によって個別に許可されます。
● ビット0 - PCIE0 : ピン変化割り込み0 許可 (Pin Change Interrupt Enable 0)
ステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)され、PCIE0ビットが設定(1)されると、ピン変化割り込み0が許可されます。許 可したPCINT0~7ピンの何れかの変化が割り込みを起こします。このピン変化割り込み要求に対応する割り込みはPCI0割り込みベクタ から実行されます。PCINT0~7ピンはピン変化割り込み許可0 レジスタ(PCMSK0)によって個別に許可されます。
13.2.5. PCIFR - ピン変化割り込み要求フラグ レジスタ (Pin Change Interrupt Flag Register)
- - - PCIF2 PCIF1 PCIF0
7 6 5 4 3 2 1 0
ビット
PCIFR
$1B ($3B)
R/W R/W
R/W R
R R
R R
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~3 - 予約 (Reserved)
これらのビットは予約されており、常に0として読まれます。
● ビット2 - PCIF2 : ピン変化割り込み2要求フラグ (Pin Change Interrupt Flag 2)
PCINT16~23ピンの何れかの論理変化が割り込み要求を起動すると、PCIF2が設定(1)になります。ステータス レジスタ(SREG)の全割り込 み許可(I)ビットとピン変化割り込み制御レジスタ(PCICR)のピン変化割り込み2許可(PCIE2)ビットが設定(1)なら、MCUは対応する割り込み ベクタへ飛びます。このフラグは割り込み処理ルーチンが開始されると解除(0)されます。代わりにこのフラグは論理1を書くことによっても解 除(0)できます。
● ビット1 - PCIF1 : ピン変化割り込み1要求フラグ (Pin Change Interrupt Flag 1)
PCINT8~14ピンの何れかの論理変化が割り込み要求を起動すると、PCIF1が設定(1)になります。ステータス レジスタ(SREG)の全割り込 み許可(I)ビットとピン変化割り込み制御レジスタ(PCICR)のピン変化割り込み1許可(PCIE1)ビットが設定(1)なら、MCUは対応する割り込み ベクタへ飛びます。このフラグは割り込み処理ルーチンが開始されると解除(0)されます。代わりにこのフラグは論理1を書くことによっても解 除(0)できます。
● ビット0 - PCIF0 : ピン変化割り込み0要求フラグ (Pin Change Interrupt Flag 0)
PCINT0~7ピンの何れかの論理変化が割り込み要求を起動すると、PCIF0が設定(1)になります。ステータス レジスタ(SREG)の全割り込み 許可(I)ビットとピン変化割り込み制御レジスタ(PCICR)のピン変化割り込み0許可(PCIE0)ビットが設定(1)なら、MCUは対応する割り込みベク タへ飛びます。このフラグは割り込み処理ルーチンが開始されると解除(0)されます。代わりにこのフラグは論理1を書くことによっても解除(0) できます。
13.2.6. PCMSK2 - ピン変化割り込み許可2 レジスタ (Pin Change Enable Mask 16~23)
PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16
7 6 5 4 3 2 1 0
ビット
PCMSK2 ($6D)
R/W R/W
R/W R/W
R/W R/W
R/W R/W
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~0 - PCINT23~PCINT16 : ピン変化割り込み23~16許可 (Pin Change Enable Mask 23~16)
各PCINT16~23ビットは対応するI/Oピンでピン変化割り込みが許可されるかどうかを選びます。PCINT16~23とピン変化割り込み制御 レジスタ(PCICR)のPCIE2が設定(1)なら、対応するI/Oピンのピン変化割り込みが許可されます。PCINT16~23が解除(0)されると、対応 するI/Oピンのピン変化割り込みは禁止されます。
13.2.7. PCMSK1 - ピン変化割り込み許可1 レジスタ (Pin Change Enable Mask 8~14)
- PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8
7 6 5 4 3 2 1 0
ビット
PCMSK1 ($6C)
R/W R/W
R/W R/W
R/W R/W
R/W R
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7 - 予約 (Reserved)
このビットは予約されており、常に0として読まれます。
● ビット6~0 - PCINT14~PCINT8 : ピン変化割り込み14~8許可 (Pin Change Enable Mask 14~8)
各PCINT8~14ビットは対応するI/Oピンでピン変化割り込みが許可されるかどうかを選びます。PCINT8~14とピン変化割り込み制御レジ スタ(PCICR)のPCIE1が設定(1)なら、対応するI/Oピンのピン変化割り込みが許可されます。PCINT8~14が解除(0)されると、対応する I/Oピンのピン変化割り込みは禁止されます。
13.2.8. PCMSK0 - ピン変化割り込み許可0 レジスタ (Pin Change Enable Mask 0~7)
PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0
7 6 5 4 3 2 1 0
ビット
PCMSK0 ($6B)
R/W R/W
R/W R/W
R/W R/W
R/W R/W
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7~0 - PCINT7~PCINT0 : ピン変化割り込み7~0許可 (Pin Change Enable Mask 7~0)
各PCINT0~7ビットは対応するI/Oピンでピン変化割り込みが許可されるかどうかを選びます。PCINT0~7とピン変化割り込み制御レジス タ(PCICR)のPCIE0が設定(1)なら、対応するI/Oピンのピン変化割り込みが許可されます。PCINT0~7が解除(0)されると、対応するI/O ピンのピン変化割り込みは禁止されます。
ATmega48A/48PA/88A/88PA/168A/168PA/328/328P [データシート] 44