RL78 CSI について

RL78/G13を使用しています。

CSIで別のデバイスと通信したいのですが、シミュレータで出力波形を見るとクロックは出力されるのにデータが出力されません。

CSIを使用する上でアドバイスを頂けないでしょうか。

CSIは、SAU0のCSI11を使用し、シングル転送モード、連続転送モード、どちらでも同じです。

また、関係あるかどうかわからないのですが、SAU0のUART0も有効にしてコード生成しています。

コード生成されたデータは、r_cg_serial_userの割り込み処理の最後にF_SPI_comフラグのクリアを追加しています。

サブルーチンコールは以下のように行っています。

   if ((SSR11 & 0x0040 ) == 0) {
        P14_bit.no0 = 0;
        g_tx_data[0] = 0x31;
        g_tx_data[1] = 0x00;
        data_length = 1;
        F_SPI_com = 1;
        result = R_CSI11_Send_Receive(&g_tx_data[0], data_length, &g_rx_data[0]);
        
        while (1U)
        {
            if ( F_SPI_com == 0 )
                break;
        }

よろしくお願いします。

  • チョコです。
    >残った疑問は、途中で端子機能を変えるとCSI信号が出ないということですが。
    以前にも書きましたように,SO11端子の兼用ポートは出力ラッチ1で出力に設定
    しておかないといけません。
    入力状態PMxx=1の状態で他のビットの操作をやってはいないでしょうか。
    ここらはハードウェア マニュアルの「4. 6 ポート機能使用時の注意事項」を参照
    してください。
  • KDX200です。
    うーん、プログラム中では、このSI11とSO11端子(を含むポート)はr_cg_port.cの中で、
    PM5 = _01_PMn0_NOT_USE | _02_PMn1_NOT_USE | _04_PMn2_MODE_INPUT | _08_PMn3_MODE_INPUT | _10_PMn4_MODE_INPUT |
    _20_PMn5_MODE_INPUT | _C0_PM5_DEFAULT;
    と、r_cg_aerial.cの中で、
    P5 |= 0x02U;
    これらは、コード生成で出力されらものです。
    それ以外のルーチンでは、
    key_inside = (P5 & 0xF8);
    inkey = (P5 & 0xF8);
    といった入力だけなんですけどねえ。
    この& 0xF8というビットマスクして取り込むことが問題なのでしょうかねえ。
  • チョコです。
    初期設定では,その後にr_cg_serial.cの中のR_CSI11_Createの設定の最後で
    /* Set SO11 pin */
    P5 |= 0x02U;
    PM5 &= 0xFDU;
    とやっているので,P51は1出力に設定されるのですが。
    レジスタの内容を確認してください。
  • チョコです。
    >この& 0xF8というビットマスクして取り込むことが問題なのでしょうかねえ。
    それは考えられません。シミュレータで展開されたコードを眺めても,AND A,P5となっているようなので,
    P5は読み出ししかしていません。
  • KDX200です。
    レジスタを確認しましたが、P5は0x02で、PM5は0xfdです。
    通信の途中でブレイクして値を確認しましたが、途中で変化しませんでした。
    プロジェクトの作成方法で、入力ポートにしていた端子をCSI用に変更したからなのでしょうかねえ。
    CSIを最初から定義した新しいプロジェクトでは問題ありません。(実機上でSPIデバイスとも通信できました。)
  • チョコです。
    >P5は0x02で、PM5は0xfdです。
    その値はSO11としては問題ないですね。
    そうなると,シリル出力許可レジスタ(SOE0レジスタ)のSOE03ビットが1になっていますか。
    どちらにしても,関係するレジスタの値を全て確認する必要があります。最終的な設定が
    正しければ,どんな順番で設定してもSO11からは何か出せるはずです。
  • KDX200です。
    >そうなると,シリル出力許可レジスタ(SOE0レジスタ)のSOE03ビットが1になっていますか。
    適当なところで停止させたときの値ですが、SOE03は1でした。
    それ以外の関連するSFRレジスタは、以下の通りです。
    PER0 0x25
    SPS0 0x0004
    SMR0 0x0020
    SCR0 0x0087
    SDR0 0x0000
    SIR0 0x0000
    SSR0 0x0000
    SS0 0x0000
    ST0 0x0000
    SE0 0x0008
    SOE0 0x0008
    SOL0 0x0000
    SO0 0x0f07
    SSC0 0x0000
    ISC 0x00
    PIM5 0x00
    POM5 0x00
    PMC0 0xff
    PM5 0xfd
    P5 0x02
    特に問題はないと思います。
    今更ですが、CS+はV4.01.00[05 Sep 2016]を使用しています。最新だと思います。
  • チョコです。
    SMR0,SCR0,SDR0,SSR0はSMR03,SCR03,SDR03,SSR03の間違いですね。
    気になるのは,SCR03の値が0x0087とあることです。ここは0xC087でないと,
    送信も受信もできません。
    送信したいときに,SCR03のTXE03(ビット15)が1(送信可能状態)になって
    いるかを確認してください。
  • KDX200です。
    >SMR0,SCR0,SDR0,SSR0はSMR03,SCR03,SDR03,SSR03の間違いですね。
    すみません。間違いです。

    SCR03を確認してみました。
    結果、0xc007でした。
    これであれば問題ないはずですが、うまくいきません。
    SMR03,SIR03,SSR03も前回と同じ値です。
    SDR03だけが0xce00となっていますが、これは送信するクロック分周比とデータでしょうから
    問題ないと思います。
    新しく作成したプロジェクトではうまくいってますが、もう少し追ってみます。
    よろしくお願いします。
  • KDX200です。

    いままで新規にプロジェクトを起こして作業していましたが、気になったことがありupします。

    CS+の初期の端子割り当てが添付のようにないっていました。

    注意書きで、最初に設定したらできないと表示されていますが、あまり気にせずにいました。

    添付画面のように、SCIで使用するポート、P30,P50,P51の端子割り当てがありません。

    もしかして、これが原因でしょうか。

    だとしたら、お騒がせして申し訳ございませんでした。

    でも、なぜ変更できないのでしょうか?