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

割り込み処理

ドキュメント内 TOSHIBA CORPORATION 2009 All Rights Reserved (ページ 83-87)

第 3 章 割り込み制御回路

3.5 割り込み処理

割り込み要求は、割り込みが受け付けられるか、リセット動作または命令によって、割り込みラッチ

“0”

にクリアされるまで保持されます。割り込み受け付け処理は、実行中の命令が終了したあと、

8

シンサイクルを要して実行されます。割り込みサービスタスクは、割り込みリターン命令

[RETI] (

マスカ ブル割り込みの場合)/[RETN] (ノンマスカブル割り込みの場合)を実行して終了します。

3.5.1 初期設定

割り込みを利用するには、事前に

SP (スタックポインタ)の設定が必要です。SP

は、スタックの先 頭番地を指す

16

ビットのレジスタです。

SP

は、サブルーチンコール、プッシュ命令実行時、および 割り込み受け付け時にポストデクリメントされ、リターン、ポップ命令実行時にプリインクリメント されます。従って、スタックはアドレスの若い方に向かって深くなりますので、SPの設定値に対し 適切なサイズのスタック領域を確保してください。

リセット後、SPは

0x00FF

に初期化されます。SPを変更する場合は、リセット直後か、割り込み マスタ許可フラグ(IMF)が"0"のときに行ってください。

(プログラム例)SPの設定

LD SP, 0x023F ; SP = 0x023F

LD SP, SP+0x04 ; SP = SP + 0x04

ADD SP, 0x0010 ; SP = SP + 0x0010

3.5.2 割り込み受け付け処理

割り込み受け付け処理は、次の動作を自動的に行います。

1.

割り込みマスタ許可フラグ(IMF) を “0” にクリアし、そのあとのマスカブル割り込みの受け 付けを一時的に禁止します。

2.

受け付けた割り込み要因の割り込みラッチを

“0”

にクリアします。

3.

プログラムカウンタ(PC) プログラム ステータス ワード(PSW) および割り込み受け付け前の

IMF

の内容をスタックに退避します

(PSW + IMF, PCH, PCL

の順にプッシュダウンされま す

)

。スタックポインタ

(SP)

3

回デクリメントされます。

4.

割り込み要因に応じたベクタテーブルアドレスから割り込みサービスルーチンのエントリー アドレス

(

割り込みベクタ

)

を読み出し、プログラムカウンタにセットします。

5.

割り込みサービスルーチンのエントリーアドレスに格納されている命令の実行に移ります。

注)

PSW

の内容がスタックに退避される際、同時にレジスタバンクおよび

IMF

の状態も退避されます。

例: INTTBTの受け付け処理におけるベクタテーブルアドレスと割り込みサービスルーチンのエン トリーアドレスの対応

0x03 0xFFF4

0xFFF5

ࡌࠢ࠲࠹࡯ࡉ࡞ࠕ࠼࡟ࠬ

0xD2

0x0F 0xD203

0xD204

ࡌࠢ࠲࠹࡯ࡉ࡞ࠕ࠼࡟ࠬ

0x06

図 3-2 ベクタテーブルアドレスとエントリーアドレス

割り込みサービス中にマスカブル割り込みが発生しても、割り込みマスタ許可フラグが “1” にセッ トされるまで受け付けられません。従って、多重割り込みを行う場合は、割り込みサービスルーチン の中で、割り込みマスタ許可フラグを “1” にセットします。その際、割り込み個別許可フラグによ り、受け付けてよい割り込み要因を選択的に許可します。過重なネスティングを防ぐため、現在受け 付けている割り込みの割り込み個別許可フラグは、割り込みマスタ許可フラグを

“1”

にセットする前 にクリアしてください。また、ノンマスカブル割り込みは、割り込み要求の間隔より割り込み処理時 間が短くなるようにしてください。

3.5.3 汎用レジスタ退避/復帰処理

割り込み受け付け処理で、プログラムカウンタとプログラムステータスワードは自動的にスタック に退避されますが、汎用レジスタは自動的には退避されません。これらのレジスタ類の退避処理が必 要な場合は、プログラムで行います。また、多重割り込みを行う場合、退避用のデータメモリ領域が 重ならないようにする必要があります。

汎用レジスタの退避には、次の

3

つの方法があります。

3.5.3.1

プッシュ/ポップ命令による汎用レジスタの退避/復帰

特定のレジスタのみ退避する場合や同一の割り込み要因の多重化の場合には、プッシュ/ポップ 命令により汎用レジスタの退避

/

復帰を行います。

(プログラム例)プッシュ/ポップによるレジスタの退避/復帰

PINTxx PUSH WA ; WAレジスタペアをスタックに退避

割り込み処理

POP WA ; WAレジスタペアをスタックから復帰

RETI ;リターン

ഀࠅㄟߺฃߌઃߌᓟ PSW SP

PCL PCH

ࠕ࠼࡟ࠬ

b-4 b-3 b-2 b-1 b PSW

SP

PCL PCH

WA࡟ࠫࠬ࠲ࡍࠕߩ PUSHᓟ

WA࡟ࠫࠬ࠲ࡍࠕߩ POPᓟ

SP

࡝࠲࡯ࡦᓟ PSW

W A SP

PCL PCH

図 3-3 プッシュ/ポップ命令による汎用レジスタの退避/復帰処理

3.5.3.2

転送命令による汎用レジスタの退避/復帰

多重割り込みを行わない割り込み処理において、特定のレジスタのみ退避する場合は、データ メモリとの転送命令により汎用レジスタの退避/復帰を行います。

(プログラム例)データメモリとの転送命令によるレジスタの退避/復帰

PINTxx: LD (GSAVA), A ; Aレジスタの退避

割り込み処理

LD A, (GSAVA) ; Aレジスタの復帰

RETI ;リターン

ࡔࠗࡦࠬ࠲࠶ࠢ

ഀࠅㄟߺฃߌઃߌ ഀࠅㄟߺࠨ࡯ࡆࠬ

࡞࡯࠴ࡦ

࡟ࠫࠬ࠲

ᓙㆱಣℂ

࡟ࠫࠬ࠲

ഀࠅㄟߺ࡝࠲࡯ࡦ ᓳᏫಣℂ

図 3-4 割り込み処理における汎用レジスタの退避/復帰処理

3.5.3.3

レジスタバンクによる汎用レジスタの退避/復帰

多重割り込みを行わない割り込み処理において、汎用レジスタを一括して待避/復帰する場合 は、レジスタバンク機能を使用します。レジスタバンク機能によって汎用レジスタを待避

(

切り替 え)するには、割り込みサービスタスクの先頭でレジスタバンクの操作命令(LD RBS,1など)を実行 します。レジスタバンクは、RETI命令が実行されると

PSW

の内容に従ってメインタスクで使用 していたレジスタバンクに自動的に復帰しますので、割り込みサービスタスクの最後でレジスタ バンクの操作命令を再度実行する必要はありません。

注) レジスタバンクは、2 BANK (BANK0

1)内蔵しています。1

つの

BANK

には、8ビット汎用レジスタ

W, A, B, C, D, E, H, L、16 ビット汎用レジスタ IX, IY

が含まれています。

(プログラム例)データメモリとの転送命令によるレジスタの退避/復帰 (メインタスクでレジスタバンクの

BANK0

を使用している場合

)

PINTxx: LD RBS, 1 ; レジスタバンクをBANK1に切り替え

割り込み処理

RETI ;リターン

(PSWのリストアによって自動的にメインタ スクで使用していたBANK0に戻る)

ࡔࠗࡦࠬ࠲࠶ࠢ

ഀࠅㄟߺฃߌઃߌ ഀࠅㄟߺࠨ࡯ࡆࠬ

࡞࡯࠴ࡦ

࡟ࠫࠬ࠲ࡃࡦࠢࠍ

BANK1ߦಾࠅᦧ߃

࡟ࠫࠬ࠲ࡃࡦࠢߪ⥄േ⊛ߦ BANK0ߦᚯࠆ

LD (RBS),1

࡟ࠫࠬ࠲ࡃࡦࠢߩ BANK0ࠍ૶↪

ഀࠅㄟߺ࡝࠲࡯ࡦ

図 3-5 レジスタバンクによる汎用レジスタの待避/復帰

3.5.4 割り込みリターン

割り込みリターン命令は、次の動作を行います。

[RETI] / [RETN] 割り込みリターン

① プログラムカウンタ、プログラムステータスワード(レジスタバンク)お よびIMFの内容をスタックからそれぞれリストアします。

② スタックポインタを3回インクリメントします。

ドキュメント内 TOSHIBA CORPORATION 2009 All Rights Reserved (ページ 83-87)