第 3 章 割り込み制御回路
3.4 割り込み処理
03H D2H
0FH 06H ベクタテーブルアドレス エントリーアドレス
D203H D204H FFF2H
FFF3H
図 3-2 ベクタテーブルアドレスとエントリーアドレス
割り込みサービス中に、その割り込み要因よりレベルの高いマスカブル割り込みが発生しても、割 り込みマスタ許可フラグが “1” にセットされるまで受け付けられません。従って、多重割り込みを行 う場合は、割り込みサービスプログラムの中で、割り込みマスタ許可フラグを “1” にセットします。
その際、割り込み個別許可フラグにより、受け付けてよい割り込み要因を選択的に許可します。過重 なネスティングを防ぐため、現在受け付けている割り込みの割り込み個別許可フラグは、割り込みマ スタ許可フラグを
“1”
にセットする前にクリアしてください。また、ノンマスカブル割り込みは、割 り込み要求の間隔より割り込み処理時間が短くなるようにしてください。3.4.2 汎用レジスタ退避/復帰処理
割り込み受け付け処理で、プログラムカウンタとプログラムステータスワードは自動的にスタック に退避されますが、アキュムレータやそのほかのレジスタは自動的には退避されません。これらのレ ジスタ類の退避処理が必要な場合は、プログラムで行います。また、多重割り込みを行う場合、退避 用のデータメモリ領域が重ならないようにする必要があります。
汎用レジスタの退避には、次の
2
つの方法があります。3.4.2.1
プッシュ/ポップ命令による汎用レジスタの退避/復帰特定のレジスタのみ退避する場合や同一の割り込み要因の多重化の場合には、プッシュ/ポップ 命令により汎用レジスタの退避
/
復帰を行います。(プログラム例)プッシュ/ポップによるレジスタの退避/復帰
PINTxx PUSH WA ; WAレジスタペアをスタックに退避
割り込み処理
POP WA ; WAレジスタペアをスタックから復帰
RETI ;リターン
SP
割り込み受け付け後
SP
WAレジスタペア のプッシュ後
SP SP
アドレス (例) b-5 b-4 b-3 b-2 b-1 b WAレジスタペア
のポップ後 リターン後
PCL PCH PSW
PCL PCH PSW
PCL PCH PSW W
A
図 3-3 プッシュ/ポップ命令による汎用レジスタの退避/復帰処理
3.4.2.2
転送命令による汎用レジスタの退避/復帰多重割り込みを行わない割り込み処理において、特定のレジスタのみ退避する場合は、データ メモリとの転送命令により汎用レジスタの退避
/
復帰を行います。(プログラム例)データメモリとの転送命令によるレジスタの退避/復帰
PINTxx: LD (GSAVA), A ; Aレジスタの退避
割り込み処理
LD A, (GSAVA) ; Aレジスタの復帰
RETI ;リターン
ഀࠅㄟߺࠨࡆࠬ࠲ࠬࠢ
ഀࠅㄟߺฃߌઃߌ
ഀࠅㄟߺ࠲ࡦ ࡔࠗࡦ࠲ࠬࠢ
ࡊ࠶ࠪࡘࡐ࠶ࡊォㅍߦࠃࠆ᳢↪ࠫࠬ࠲ߩㅌㆱᓳᏫ
ࠫࠬ࠲ㅌㆱಣℂ
ࠫࠬ࠲ᓳᏫಣℂ
図 3-4 割り込み処理における汎用レジスタの退避/復帰処理
3.4.3 割り込みリターン
割り込みリターン命令は、次の動作を行います。
TMP86FH47BUG
第3
章 割り込み制御回路3.4
割り込み処理Page 40
[RETI] / [RETN] 割り込みリターン
① プログラムカウンタ、プログラムステータスワードおよびIMFの内容を スタックからそれぞれリストアします。
② スタックポインタを3回インクリメントします。
ただし、アドレストラップ割り込みからのリターンは、割り込み受け付け処理直後にスタックされ
る
PCL、PCH
の値を、割り込みサービスプログラムの先頭で、プログラム実行を再開するアドレスに書き替える必要があります。
注) これらを書き替えないままリターン命令 [RETN] を実行した場合、アドレストラップ領域に復帰し、再度 アドレストラップ割り込みが発生します。
割り込みリターン後の
PCL, PCH
となる値は、割り込み受け付け処理後はそれぞれ (SP + 1), (SP + 2) のア ドレスに格納されています。(プログラム例
1)アドレストラップ割り込みサービスプログラムからのリターン
PINTxx POP WA ;スタックポインタを2つ戻す
LD WA, RetrunAddress ; WAレジスタに再開アドレスを代入する
PUSH WA ;スタックにプッシュダウンする
割り込み処理
RETN ;ノンマスカブル割り込みリターン命令
(プログラム例
2)リターンしない場合 (割り込み受け付け前の PSW
およびIMF
の値を破棄する場合)PINTxx INC SP ;スタックポインタを3つ戻す
INC SP
INC SP
割り込み処理
LD EIRL, data ; IMFを “1” にセット、または “0” にクリア
JP RestartAddress ; 復帰アドレスへジャンプ
割り込み要求は、実行中の命令の最終サイクルでサンプリングされます。従って、割り込みリター ン命令の実行直後から次の割り込み処理を行うことができます。
注
1)
アドレストラップ割り込みが発生し、割り込みサービスプログラムでリターン命令 [RETN] を使用しない場 合 (例2
のような場合)、割り込みサービスプログラムで、スタックポインタの値を、アドレストラップ発生 時の値にインクリメントすることを推奨します (3回インクリメントする)。注