チョコさんが以前に指摘されていたRL78コード生成機能によるCSI連続送信の終了の割り込みコードの問題を調べています

チョコさん、こんにちは。NoMaYです。

すみません、掲題の件、下記のスレッドでの話題ですが、コード生成されたソースの以下のコードのことでしょうか?

r_cg_serial_user.c

static void __near r_csi00_interrupt(void)
{
    if (g_csi00_tx_count > 0U)
    {
        SIO00 = *gp_csi00_tx_address;
        gp_csi00_tx_address++;
        g_csi00_tx_count--;
    }
    else
    {
        if ((SSR00 & _0040_SAU_UNDER_EXECUTE) == 0U)
        {
            r_csi00_callback_sendend();    /* complete send */
        }
        else
        {
            SMR00 &= ~_0001_SAU_BUFFER_EMPTY;
        }
    }
}

RL78/G14のEEPROMのI2C通信について
japan.renesasrulz.com/cafe_rene/f/002-2095199602/5962/rl78-g14-eeprom-i2c/33068#33068

チョコです。
鈴木さん,MAX7219をCSIで制御してLED表示を行っていて,問題を見つけました。
CSIの連続送信で最後のデータを書き込んだ後で,割り込みタイミングを書き換えてますが,転送速度とプログラムの実行速度の関係で,最後の割り込みが発生しない可能性があります。


RL78/G13 CSIのマスタ連続送受信でオーバーランエラーが発生する
japan.renesasrulz.com/cafe_rene/f/002-2095199602/5972/rl78-g13-csi/33137#33137

チョコです。
この現象については,「RL78/G14のEEPROMのI2C通信について」で少し触れていますが,次のような動作になっていると考えられます。
①最後のデータを書き込むための割り込みが発生します。
②CSIは最後のデータを送信します。
③CPUは割り込みを受け付けると,最後のデータの送信中かチェックして,最後のデータなら割り込みタイミングを転送完了に書き換えます。
ところが,③で割り込みタイミングを書き換える前に送信が完了してしまっていると,書き換えた時点では,送信完了割り込みの発生タイミングを終了しているので,期待した最後の割り込みが発生しません。
そのため,通信処理を終えることができなくなってしまいます。


なお、以下のCS+ V8.03の画面コピーは先程のソースを生成させた時のコード生成機能の設定内容です。



 

Parents
  • こんにちは。NoMaYです。

    SAU CSI連続受信モードですが、まず、そもそもの私の認識不足としてスレーブモードにシングル転送モードと連続転送モードの区別があるとは思っていなかった(マスタモードにしかないと思っていた)ので、マスタモードかスレーブモードかを明記していなかったという拙い点があった、と思います。

    そこで、デバイス(RL78/G13とRL78/G14)のユーザーズマニュアルを確認すると、スレーブモードでは、CSI連続送信モードとCSI連続送受信モードはあれど、CSI連続受信モードは無いのですね、、、

    そこで、スレーブモードでコード生成させようとしたところ、コード生成機能のGUI上では無いはずのCSI連続受信モードが設定出来てしまうのですね、、、

    以下、これを表にしたものです。

      マスタモード スレーブモード
    CSI送信モード 連続転送モード 有 連続転送モード 有
    CSI受信モード 連続転送モード 有 連続転送モード 無(しかしコード生成機能では設定出来てしまう)
    CSI送受信モード 連続転送モード 有 連続転送モード 有

    以下、RL78/G14のユーザーズマニュアルの画面コピーとCS+ V8.03のコード生成機能の画面コピーです。

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

    CSIマスタモードシングル受信モード


    CSIマスタモード連続受信モード



    CSIスレーブモードシングル受信モード (なお、CSIスレーブモード連続受信モードはありませんでした)



    コード生成機能ではCSI受信のスレーブモードでも連続転送モードが設定出来てしまいました



    [余談]

    なお、以下のスレッドでのことですが、CSIのマスタ連続送受信の開始時にも何かがあるようです。

    RL78/G13 CSIのマスタ連続送受信でオーバーランエラーが発生する
    japan.renesasrulz.com/cafe_rene/f/002-2095199602/5972/rl78-g13-csi/33275#33275
     

Reply
  • こんにちは。NoMaYです。

    SAU CSI連続受信モードですが、まず、そもそもの私の認識不足としてスレーブモードにシングル転送モードと連続転送モードの区別があるとは思っていなかった(マスタモードにしかないと思っていた)ので、マスタモードかスレーブモードかを明記していなかったという拙い点があった、と思います。

    そこで、デバイス(RL78/G13とRL78/G14)のユーザーズマニュアルを確認すると、スレーブモードでは、CSI連続送信モードとCSI連続送受信モードはあれど、CSI連続受信モードは無いのですね、、、

    そこで、スレーブモードでコード生成させようとしたところ、コード生成機能のGUI上では無いはずのCSI連続受信モードが設定出来てしまうのですね、、、

    以下、これを表にしたものです。

      マスタモード スレーブモード
    CSI送信モード 連続転送モード 有 連続転送モード 有
    CSI受信モード 連続転送モード 有 連続転送モード 無(しかしコード生成機能では設定出来てしまう)
    CSI送受信モード 連続転送モード 有 連続転送モード 有

    以下、RL78/G14のユーザーズマニュアルの画面コピーとCS+ V8.03のコード生成機能の画面コピーです。

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

    CSIマスタモードシングル受信モード


    CSIマスタモード連続受信モード



    CSIスレーブモードシングル受信モード (なお、CSIスレーブモード連続受信モードはありませんでした)



    コード生成機能ではCSI受信のスレーブモードでも連続転送モードが設定出来てしまいました



    [余談]

    なお、以下のスレッドでのことですが、CSIのマスタ連続送受信の開始時にも何かがあるようです。

    RL78/G13 CSIのマスタ連続送受信でオーバーランエラーが発生する
    japan.renesasrulz.com/cafe_rene/f/002-2095199602/5972/rl78-g13-csi/33275#33275
     

Children
  • チョコです。

    マスタには,連続受信が存在していたんですね。これは,割り込みは通信起動用のダミーデータの書込みのタイミング用ですね。(決して受信用のタイミングじゃないです。受信に関してはタイミング的に半クロック分遅れるので余裕がなくなるはずですが,マスタなので,関係はないですが。)

    私はスレーブ受信を眺めていました。

    それにしてもスレーブで連続受信はあり得ません。単に,全部の組み合わせをやっただけ?

    基本的にスレーブはマスターからのクロックに対して動作するだけですから,常にマスタのタイミングに従うだけです。

  • チョコさん、こんにちは。NoMaYです。

    > それにしてもスレーブで連続受信はあり得ません。単に,全部の組み合わせをやっただけ?

    推測ですが、意図してやった、というのではなくて、その場合だけ無いことに気付かなくてグレーにする処理がコード生成機能のGUIに入っていない(CSI受信で外部クロック選択時は連続転送モードをグレーにして選択出来ないようにする処理を入れ忘れた)のだろうと思うのです。(スレーブモードにシングル転送モードと連続転送モードの区別があるとは思っていなかった私がそう言うのも気まずいところがありますが、、、)