• 検索結果がありません。

割り込み処理

ドキュメント内 TMP86FH47BUG (ページ 56-60)

第 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回インクリメントする)。

2)

割り込み処理時間が、割り込み要求の間隔よりも長いと、割り込みサービスタスクの実行のみ行われ、メイ ンタスクの実行が行われなくなります。

ドキュメント内 TMP86FH47BUG (ページ 56-60)