Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

多重割り込み時に優先順位が同じ場合のとき

こんばんわ。うさぎと申します。

「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さん。
    これは,ISPとPRの関係で考えれば理解できるかと思います。ISPが初期状態の11の場合には,PRが11を含めてすべての割り込みが受け付けられる必要があります。つまり,ISPとPRが同じ場合には受け付ける必要があるということです。
    同様にISPが10の場合(PRが11の割り込み処理中)にはPRが10以上の優先度のみが受け付け可能です。ISPが01の場合(PRが10の割り込み処理中)にはPRが01以上の優先度,ISPが00の場合(PRが01の割り込み処理中)にはPRが00のみ受け付け可能になります。つまり,処理中の割り込みのPRの値とISPの値がずれていることがキーです。
    「現在処理中の割り込みと同レベル」はISPの値を意味していません。単に,同じレベルというだけです。
    この結果,PRが00の割り込みはISPでは禁止できません。単にIEビットで制御すればいいだけです。
    ざっと,言うとこんな感じです。
  • In reply to EB68:

    usagiさん。
    RL78/G14のマニュアルをダウンロードしたので,まとめ直します。
    P1022の「表21 - 11 割り込み処理中に多重割り込み可能な割り込み要求の関係」で左側がISPの値しか書いてないのが混乱のもとです。
    一番下のISPが11は,割り込みを実行中ではなく,割り込み全く受け付けていない状態です。ここがマニュアルのおかしい部分です。おそらく,何も考えずに左側を「処理中の割り込み」としてしまったものと想像できます。
    その上のISPが10は,優先順位レベル3(PR=11)の割り込み処理中です。
    さらにその上が,優先順位レベル2(PR=10)の割り込み処理中です。
    一番上は,優先順位レベル1(PR=01)の割り込み処理中です。
  • In reply to EB68:

    usagiさん、EB68さん、こんにちは。NoMaYと申します。

    EB68さんのリプライをもとにマニュアルの表の画面コピーに赤入れしてみました。以下のようになっていなければならない、ということですね。

    RL78/G14 ユーザーズマニュアル ハードウェア編
    www.renesas.com/jp/ja/search/keyword-search.html#q=r01uh0186
    r01uh0186jj0330-rl78g14.pdf

  • うさぎさん

    RL78の元になった78K0マイコンのUMからコピペした感じですね。

    78K0の場合、同じ優先順位の割り込みなら、受け付ける仕様でした。(ISP=PRレジスタの値)
    そのため同じ優先順位の割り込みなら後から発生した方が優先されてしまうという不条理な仕様だったので
    78K0R(≒RL78)で修正されたようです。

    このあたりの表現は78K0RとRL78で同じなので、当時78K0RのUMを作った人があまり気にしていなかったのかなと思います。

    ↓ 78K0はレベルが高と低の2つしかなかったので、こーゆー仕様です。

     

    RL78/G14のUMの表現にも揺らぎ(誤記)があって、混乱の元ですね。

    「21. 4 割り込み処理動作」の章では
    受け付けた割り込みの優先順位指定フラグの内容をISP1, ISP0フラグへ転送します。

    「21.3.5 プログラム・ステータス・ワード(PSW)」の章では
    受け付けた割り込みの優先順位指定フラグ・レジスタの内容が00 以外は,“-1” された値がISP0,ISP1 フラグに転送されます。

     PS
    「-1された」という表現も初めて見た人には良くわからないと思いますけども、
    ((ISP1×2+ISP0)-1)%2=ISP0
    ((ISP1×2+ISP0)-1)/2=ISP1
    という事のようです。(余計に混乱しちゃうかも^^;)

  • In reply to NoMaY:

    NoMaYさん
    割り込み中でもISPを書き換えてISP1=1、ISP0=1にすることもできるので、必ずしもISP1=1、ISP0=1が割り込み未受付け状態とは限りません。
    ふつうはやりませんけどね^^;
    フラッシュセルフ中の割り込みもISPが変化しないので、割り込み中もISP1=1、ISP0=1のままだし。


    PS
    どうUMを修正するか楽しみですね。
    でも大変だよ。RL78シリーズ全部のUMの修正なんて>_<

  • In reply to Kirin:

    usagiさん,NoMaYさん,Kirinさん。

    手元にあったTESSERAさんのRL78/G14 StickとCS+CCの環境で,INTP0~INTP4を使って確認してみました。

    プロジェクトと画面キャプチャ結果をPDFにしたものを参考用に添付しておきます。

    いろいろ設定するのが面倒なので,INTP0~INTP4割り込みは全てソフトで割り込み要求をセット(PIFxを1に)しています。

     

    >割り込み中でもISPを書き換えてISP1=1、ISP0=1にすることもできるので…

    それをやると,多重割り込みの仕組みそのものが崩れてしまうので,絶対にやるべきではないですね。

    >どうUMを修正するか楽しみですね

    いまさら,これだけでの修正はしないと思いますよ。

    G14多重割り込み.zip

  • In reply to Kirin:

    チョコです。

    >割り込み中でもISPを書き換えてISP1=1、ISP0=1にすることもできるので、必ずしもISP1=1、ISP0=1が割り込み未受付け状態とは限りません。

    Kirinさん,「ISP1=1、ISP0=1」はRL78の状態としては,「割り込み未受付状態」です。「割り込み中でもISPを書き換えてISP1=1、ISP0=1に・・・」は,「「割り込み未受付状態」にした」だけのことです。RL78の状態やその後の動作でみると同じことです。その後プログラムが思った通りに動作するかどうかはわかりませんが。。。
  • In reply to EB68:

    EB68さん
    ISPとPRレジスタの関係が分かる結果ですね。

    >いまさら,これだけでの修正はしないと思いますよ。
    なるほど、それでもう78K0Rが登場してから10年以上もUMが直っていないんですねorz
    次の製品のUMでどう記載されるか楽しみです!(あえて現状維持か、チョイ変してくるか)

    >>割り込み中でもISPを書き換えてISP1=1、ISP0=1にすることもできるので…
    >それをやると,多重割り込みの仕組みそのものが崩れてしまうので,
    >絶対にやるべきではないですね。
    アセンブラだとアーキテクチャを骨の髄までいじれちゃうのがいいんですけどねー。

    その昔、大先輩がEB-69というエミュレータで開発してましたけれども
    「コンソールから入力したニーモニックがマシン語になるんだよ」と熱く語っていました。
    当時はアセンブラやコンパイラが高価だったので、エミュレータ上で開発したコードをそのまま製品に書き込んでいたようです。
  • In reply to チョコ:

    チョコさん
    おっしゃるとおりで。
    ISPをいじる時はスタックの中身と色々整合をとらないといけないので、ふつうはやりませんよね。

  • In reply to Kirin:

    チョコです。

    >ISPをいじる時はスタックの中身と色々整合をとらないといけないので、ふつうはやりませんよね。
    78K0で,NMI(WDT割り込み)が入ったときに割り込み機能を初期化する必要があり,割り込みの制御フラグがリード・オンリーだったので,スタックをダミーデータのアドレスに設定して,RETI命令を繰り返したことを思い出しました(これをやらないと,割り込みを受け付けられなくなりました)。
    RL78はISPが書けるので,このような異常時の処理は簡単に実現できるようになったと言えます。それよりは,リセット掛けた方が簡単かもしれませんが。
  • うさぎさん
    だいぶ脱線してしまいましたけれども
    RL78に詳しい人がいっぱいいるので、分からないことがあったらどんどん聞いてくださいね。

  • usagiさん、こんにちは。NoMaYです。

    本件、マニュアルが紛らわしかったけれども、今は納得が行くようになった、ということで宜しいですか?

  • In reply to NoMaY:

    チョコです。
    実は,参照している表の下に備考3として説明されています。
    (これを,表に反映すれば済むことなのでしょうが。。。)

    それよりも,表の一番下の「ソフトウェア割り込み」のところに問題があります。
    (「ソフトウェア割り込み」を使うことはないので,実害はないでしょうが。)
  • 皆様、反応が遅れまして大変申し訳ありません!!
    私の質問、読み返すととてもわかりにくくてすみません。。
    そして、こんなに丁寧に解説いただき感動しております。

    お一人お一人Replayが正しいのか、まとめてがいいのか迷いましたが、
    とりあえずまとめてお礼申し上げます。

    てっきりRXマイコンと同じ動きなんだろう…と思い込んでました。
    なので、EB68さんの回答がよくわからず、それこそ目を皿にしてなんども読み返していました。
    なんで優先順位がずれてるのだろうか??

    そして、Kirinさんの解説で、気が付きました。
    なんと「“-1” された値がISP0,ISP1 フラグに転送」されるとは…

    そうなんです、
    「受け付けた割り込みの優先順位指定フラグの内容をISP1, ISP0フラグへ転送します。」を
    そのまま信じ込んでおりました。(涙)

    NoMaYさん、とてもわかりやすいPDFとプロジェクトを本当にありがとうございました!
    私もRL78/G14 Stick 愛用してます!
    ブレッドボードに差し込めるし、使いやすいですよね。
    動作確認してさらに理解が深まりました。
    確認方法も、とても参考になりました。

    そうなると、あらためてEB68さんの解説がよくわかりました。
    EB68さん、とても丁寧な解説をありがとうございます。

    チョコさんの、リードオンリーのレジスタを、スタック経由で設定の話、
    なんだか昔そんなコード(アセンブリ言語)みたことあるなぁと懐かしかったです。

    新人の頃、紙のデータシートをぼろぼろになるまで読み返して、
    「ここまで読み込んで、もう目を通してないページはないかも」と誇らしく思ったりしてましたが、
    初心忘れるべからずですかね。

    でもでも、Kirinさんのおっしゃるところの、表現のゆらぎ(?)はですね、
    もしUM訂正される機会がありましたら、"-1されて転送される"と揃えていただきたいような。

    それにしても、同じレベルの割り込みが多重割り込みしてしまうのを、
    割り込みコントローラの優先順位判定回路の修正ではなく、
    PRを-1して転送することで解決してたんですね。。

    とても面白いお話が聞けてうれしいです。

    ここで質問してみて、助かりました。
    本当にみなさま、ありがとうございました。
  • usagiさん、こんにちは。NoMaYです。

    > NoMaYさん、とてもわかりやすいPDFとプロジェクトを本当にありがとうございました

    PDFとプロジェクトはEB68さんですよ。私はEB68さんのリプライをもとにマニュアルの表の画面コピーにちょっと赤入れしただけですね、、、(^_^;)

    チョコさん、こんにちは。

    > 表の一番下の「ソフトウェア割り込み」のところに問題があります。

    暫く考えていて気付きました。ソフトウェア割り込み(BRK命令の実行)は、ISP1,ISP0の各組み合わせ毎にあり得る話なので、1行のみで書き表すのは不正確であり4行で書かないといけないものですね。(表の一番下のものは、ISP1,ISP0=1,1の時にBRK命令が実行された状況下での場合に対応するものですね。)

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page