Renesas Synergy™

FAQ 1008807 : 割り込み(Interrupt)

(1)基本動作
割り込みというのは、外部からの要求信号などによって、CPUがプログラム処理を中断して、他のプログラム処理をすることです。つまり、プログラム処理とは非同期に、別の処理を行う手法です。
このとき、プログラム処理を中断して他のプログラムに分岐するアドレスは、割り込み要因ごとに定義されています。

78K系のマイコンでは、割り込み処理ルーチンの先頭アドレスをベクタと呼び、割り込み要因ごとのベクタをまとめてROM上でテーブルにしています。割り込みが受け付けられると、ベクタ・テーブルから要因に対応する情報を参照し、それをアドレスとして分岐します。割り込みベクタ・テーブルには、ユーザが要因ごとに用意している割り込み処理ルーチンの、先頭アドレスを書き込んでください。
V850系のマイコンでは、割り込みの分岐先の領域(16バイト)を割り込みハンドラと呼びます。
割り込みが受け付けられると、要因に対応するハンドラの開始アドレスに分岐します。割り込み処理ルーチンがハンドラ領域に収まらない場合、処理ルーチンは別の領域におき、ハンドラにはその先頭アドレスへの分岐命令をおきます。



割り込み処理が終了すると、元の処理に戻ります。
78K系のマイコンでは分岐するときに、中断したプログラムの実行情報(アドレス(プログラム・カウンタ(PC)の値)と状態フラグ(PSW:Program Status Word)の値)が、RAM上のスタック領域に自動的に退避させられます。割り込み処理ルーチンの最後でRETI(Return from Interrupt)命令を実行すると、退避させたプログラムの実行情報がPCとPSWに復帰するので、元の処理へ戻ることができます。
その他の汎用レジスタの内容は、割り込み時に自動的にはスタックなどに保存されません。必要に応じて、プログラムで退避(PUSH命令)や復帰(POP命令)の処理をしてください。ただし、78K系のマイコン(78K0Sを除く)では、汎用レジスタがレジスタ・バンク形式(複数組)なので、割り込み処理の先頭でレジスタ・バンクの指定命令を実行すれば、PUSH/POPは不要です。
なお、V850系のマイコンの割り込みでは、退避用のレジスタに実行情報を自動的に退避させるだけです。そのため、多重割り込みをさせるには、退避用レジスタの内容を上書きで消失させないように、スタック領域に退避させる必要があります。

リセット直後は割り込み禁止(DI)状態なので、割り込みを許可するにはEI(Enable Interrupt)命令を実行する必要があります。DI状態のとき、78KはIEフラグ(PSW)=0、V850はIDフラグ(PSW)=1となっています。



なお、具体的なマイコン製品での割り込み機能については、78KシリーズV850シリーズのFAQもご参照ください。

(2)優先順位
割り込み要因が複数ある場合、通常は優先順位(プライオリティ)があり、割り込みコントローラが処理すべき要因を決定します。低優先順位の割り込み要求は保留されます。
優先順位の最も高い要因に対する処理が終わると、次の優先順位(その時点では最高優先順位)の要因に対する処理をします。

(3)割り込みのマスク
割り込みには、マスカブル割り込みとノンマスカブル割り込みがあり、マスカブル割り込みは割り込みを禁止することができます。割り込みの禁止にはDI (Disable Interrupt)命令、許可にはEI (Enable Interrupt)命令を使用します。また、レジスタ設定で割り込み要求をマスクして、割り込み要求を発生させないマイコンもあります。
ノンマスカブル割り込みは禁止できず、最高優先順位となっています。

(4)多重割り込み
割り込み処理中に、より高優先順位の割り込み要求が発生した場合、その割り込み処理をしたい場合があります。このときは、さらに分岐して多重割り込みとなります。これをネスティング(「巣ごもり」の意味)と呼びます。
ただし一般に、割り込み要求を受け付けるとDI(Disable Interrupt)状態となるため、ネスティングを許可するにはEI(Enable Interrupt)命令を実行する必要があります。なお、EI命令を実行したのち、ネスティングを許可するタイミングが経過すると、DI命令を実行してネスティングを禁止させます。
また、RETI命令で割り込み処理を完了すると、自動的にEI状態に戻り、次の割り込み要求を受け付けられるようになります。

他にご質問がございましたら、リクエストを送信してください