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

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

「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)となっていて、同じレベルなら多重割り込みが受け付けられるように思えます。

表や式の解釈が間違っているのでしょうか…。

実機で試してみればよいのでしょうが、どなたかご存知の方がいらっしゃれば、ご教示頂きたく、よろしくお願いいたします。

Parents
  • うさぎさん

    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
    という事のようです。(余計に混乱しちゃうかも^^;)

Reply
  • うさぎさん

    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
    という事のようです。(余計に混乱しちゃうかも^^;)

Children
No Data