第 2 章 動作説明
3.4 割り込み処理
第 3章 割り込み制御回路
3.1 割り込みラッチ (IL15 ~ IL2) TMP86CK74AFG
図 3-2 ベクタテーブルアドレスとエントリーアドレス
割り込みサービス中に、その割り込み要因よりレベルの高いマスカブル割り込みが発生しても、割 り込みマスタ許可フラグが “1” にセットされるまで受け付けられません。従って、多重割り込みを 行う場合は、割り込みサービスプログラムの中で、割り込みマスタ許可フラグを “1” にセットしま す。その際、割り込み個別許可フラグにより、受け付けてよい割り込み要因を選択的に許可します。
過重なネスティングを防ぐため、現在受け付けている割り込みの割り込み個別許可フラグは、割り 込みマスタ許可フラグを “1” にセットする前にクリアしてください。また、ノンマスカブル割り込 みは、割り込み要求の間隔より割り込み処理時間が短くなるようにしてください。
3.4.2 汎用レジスタ退避 / 復帰処理
割り込み受け付け処理で、プログラムカウンタとプログラムステータスワードは自動的にスタッ クに退避されますが、アキュムレータやそのほかのレジスタは自動的には退避されません。これら のレジスタ類の退避処理が必要な場合は、プログラムで行います。また、多重割り込みを行う場合、
退避用のデータメモリ領域が重ならないようにする必要があります。
汎用レジスタの退避には、次の2つの方法があります。
3.4.2.1
プッシュ
/ポップ命令による汎用レジスタの退避
/復帰
特定のレジスタのみ退避する場合や同一の割り込み要因の多重化の場合には、プッシュ/ポッ プ命令により汎用レジスタの退避/復帰を行います。
( プログラム例 )プッシュ/ポップによるレジスタの退避/復帰
PINTxx PUSH WA ; WAレジスタペアをスタックに退避
割り込み処理
POP WA ; WAレジスタペアをスタックから復帰
RETI ;リターン
03H D2H
0FH 06H ベクタテーブルアドレス エントリーアドレス
D203H D204H FFF0H
FFF1H
SP
SP
SP SP
アドレス (例)
b-5 b-4 b-3 b-2 b-1 b PCL
PCH PSW
PCL PCH PSW
PCL PCH PSW W
A
3.4.2.2
転送命令による汎用レジスタの退避
/復帰
多重割り込みを行わない割り込み処理において、特定のレジスタのみ退避する場合は、デー タメモリとの転送命令により汎用レジスタの退避/復帰を行います。
図 3-4 割り込み処理における汎用レジスタの退避 / 復帰処理
3.4.3 割り込みリターン
割り込みリターン命令は、次の動作を行います。
ただし、アドレストラップ割り込みからのリターンは、割り込み受け付け処理直後にスタックさ
れるPCL、PCHの値を、割り込みサービスプログラムの先頭で、プログラム実行を再開するアドレ
スに書き替える必要があります。
注) これらを書き替えないままリターン命令 [RETN] を実行した場合、アドレストラップ領域に復帰し、再度ア ドレストラップ割り込みが発生します。
割り込みリターン後のPCL, PCHとなる値は、割り込み受け付け処理後はそれぞれ (SP + 1), (SP + 2) のア ドレスに格納されています。
( プログラム例 )データメモリとの転送命令によるレジスタの退避/復帰
PINTxx: LD (GSAVA), A ; Aレジスタの退避
割り込み処理
LD A, (GSAVA) ; Aレジスタの復帰
RETI ;リターン
[RETI] / [RETN] 割り込みリターン
①プログラムカウンタ、プログラムステータスワードおよびIMFの内容を スタックからそれぞれリストアします。
②スタックポインタを3回インクリメントします。
メインスタック
プッシュ/ポップ/転送命令による汎用レジスタの退避/復帰
第 3章 割り込み制御回路
3.1 割り込みラッチ (IL15 ~ IL2) TMP86CK74AFG
割り込み要求は、実行中の命令の最終サイクルでサンプリングされます。従って、割り込みリター ン命令の実行直後から次の割り込み処理を行うことができます。
注 1) アドレストラップ割り込みが発生し、割り込みサービスプログラムでリターン命令 [RETN] を使用しない 場合 (例2のような場合)、割り込みサービスプログラムで、スタックポインタの値を、アドレストラップ 発生時の値にインクリメントすることを推奨します (3回インクリメントする)。
注 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 ; 復帰アドレスへジャンプ