こんばんわ。うさぎと申します。
「RL78/G14 ユーザーズマニュアル ハードウェア編 Rev. 3.30 2016.08」の
P1021に「現在処理中の割り込みと同レベルか,より低い優先順位の割り込み要求が発生した場合には,多重割り込みとして受け付けられません。ただしレベル0 の割り込み中にIE フラグをセット(1)した場合には,レベル0の他の割り込みも許可されます。」とあります。
しかしP1022の「表21 - 11 割り込み処理中に多重割り込み可能な割り込み要求の関係」を見ると、
レベル0以外の場合でも、同じレベルの多重割り込みは受け付けられるように読み取れます。
たとえば、処理中の割り込みレベルがISP0=1,ISP1=0 の時、IE=1でPRが10のときに○(多重割り込み可能)となっています。
また、P1019の「図21 - 11 割り込み要求受け付け処理アルゴリズム」では、
フローチャート中の割り込み要求受付の条件式が(××PR1,××PR0)≦ (ISP1,ISP0)となっていて、同じレベルなら多重割り込みが受け付けられるように思えます。
表や式の解釈が間違っているのでしょうか…。
実機で試してみればよいのでしょうが、どなたかご存知の方がいらっしゃれば、ご教示頂きたく、よろしくお願いいたします。
usagiさん、EB68さん、こんにちは。NoMaYと申します。EB68さんのリプライをもとにマニュアルの表の画面コピーに赤入れしてみました。以下のようになっていなければならない、ということですね。RL78/G14 ユーザーズマニュアル ハードウェア編www.renesas.com/jp/ja/search/keyword-search.html#q=r01uh0186r01uh0186jj0330-rl78g14.pdf
NoMaYさん 割り込み中でもISPを書き換えてISP1=1、ISP0=1にすることもできるので、必ずしもISP1=1、ISP0=1が割り込み未受付け状態とは限りません。 ふつうはやりませんけどね^^;フラッシュセルフ中の割り込みもISPが変化しないので、割り込み中もISP1=1、ISP0=1のままだし。
PSどうUMを修正するか楽しみですね。でも大変だよ。RL78シリーズ全部のUMの修正なんて>_<
usagiさん,NoMaYさん,Kirinさん。
手元にあったTESSERAさんのRL78/G14 StickとCS+CCの環境で,INTP0~INTP4を使って確認してみました。
プロジェクトと画面キャプチャ結果をPDFにしたものを参考用に添付しておきます。
いろいろ設定するのが面倒なので,INTP0~INTP4割り込みは全てソフトで割り込み要求をセット(PIFxを1に)しています。
>割り込み中でもISPを書き換えてISP1=1、ISP0=1にすることもできるので…
それをやると,多重割り込みの仕組みそのものが崩れてしまうので,絶対にやるべきではないですね。
>どうUMを修正するか楽しみですね
いまさら,これだけでの修正はしないと思いますよ。
G14多重割り込み.zip
チョコさん おっしゃるとおりで。 ISPをいじる時はスタックの中身と色々整合をとらないといけないので、ふつうはやりませんよね。