Renesas Synergy™

FAQ 1006828 : 3レベル以上の多重割り込みを行うにはどのようにすればよいでしょうか?

78K0の割り込みには2レベルの優先度を設定できます。 また、これとは別に既に定められたディフォールト優先度があり、 この2つにより各割り込みの優先度が決まります。
同時に発生 (CPUが割り込み受け付け可能になった時点で発生) している割り込みは、 優先順位指定の高い方が受け付けられます。
優先順位指定が同じならディフォールト優先度の高い方が受け付けられます。
この優先順位指定機能を使用することにより、2レベルまでの多重割り込みは簡単に実現できます。
しかし、2レベル以上の多重割り込みを使用する場合には処理に注意が必要です。

基本的には割り込みマスク機能を使用することになります。

INTP0~INTP3 の4つの割り込み要因を使って説明します。
この4つを優先度が高い方から

INTP2INTP3INTP0INTP1

として使用する場合を考えます。このとき、PPR0, PPR1 は 1 に設定し、PPR2, PPR3 は 0 に設定します。
各割り込みで必要な処理は以下のようになります。また、処理フローを別紙に示します。

(1) INTP2 受け付け中の処理 [処理フロー(1)]
この割り込みが最優先ですので、一切の割り込みを受け付ける必要はありません。
従って、この処理中には割り込みを禁止したままにします。

(2) INTP3 受け付け中の処理 [処理フロー(2)]
この割り込みの処理中にも INTP2 は受け付ける必要があります。
また、INTP0, INTP1 は受け付けないようにする必要があります。

INTP3 は高優先順位の割り込みに指定してあるので、その実行中は PSW の中の ISP フラグが 0 になり、 低優先順位の割り込みに指定してある INTP0, INTP1 は自動的に禁止されます。

従って、単純に割り込みを許可すればよいように考えられます。 しかしながら、INTP3 割り込み処理中に INTP3 が再度入る可能性があるときには、 INTP3 も禁止する必要があります。

このためには割り込みマスク・フラグ PMK3 をセットしてから割り込みを許可する必要があります。
また、割り込みから抜ける前に、割り込みを禁止し、PMK3をクリアします。

 

(3) INTP0 受け付け中の処理 [処理フロー(3)]
この割り込み処理中には INTP2, INTP3 だけを受け付ける必要があります。 また、自分自身及び INTP1 は受け付けないようにする必要があります。

このためには、割り込みを許可する前に、PMK1の値を保存しておき、 PMK0, PMK1 をセットしておく必要があります。
また、割り込みから抜ける前に、割り込みを禁止し、PMK0をクリアします。
また、前もって保存しておいたPKM1の状態を復帰させます。

(4) INTP1 受け付け中の処理 [処理フロー(4)]
この割り込み処理中には自分自身以外 (INTP2, INTP3, INTP0) を受け付ける必要があるため、 割り込みを許可する前に PMK1 をセットする必要があります。
また、割り込みから抜ける前に、割り込みを禁止し、PMK1 をクリアします。

 

 

適用製品

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