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;
        }

よろしくお願いします。

Parents
  • チョコです。
    RL78のSAUのレジスタとCSIの番号の付け方が異なるのが原因ではないでしょうか。
    RL78/G13のハードウェア マニュアルの「第12章 シリアル・アレイ・ユニット」の最初に
    記載されているように,CSI11はユニット0のチャネル3になります。
    つまり,CSI11を制御するレジスタはデータに関してはSIO11と表現できますが,それ
    以外のレジスタはユニット+チャネルでSSR03のように表現する必要があります。
    ここらを確認してみてください。
    通常は,コード生成に任せておけば,転送完了の割り込み(r_csi11_interrupt関数)の
    中のr_csi11_callback_receiveend関数やr_csi11_callback_sendend関数のところに
    転送完了フラグをセットするようにして,そのフラグで制御すれば,レジスタを直接
    制御する必要はないのですが。
Reply
  • チョコです。
    RL78のSAUのレジスタとCSIの番号の付け方が異なるのが原因ではないでしょうか。
    RL78/G13のハードウェア マニュアルの「第12章 シリアル・アレイ・ユニット」の最初に
    記載されているように,CSI11はユニット0のチャネル3になります。
    つまり,CSI11を制御するレジスタはデータに関してはSIO11と表現できますが,それ
    以外のレジスタはユニット+チャネルでSSR03のように表現する必要があります。
    ここらを確認してみてください。
    通常は,コード生成に任せておけば,転送完了の割り込み(r_csi11_interrupt関数)の
    中のr_csi11_callback_receiveend関数やr_csi11_callback_sendend関数のところに
    転送完了フラグをセットするようにして,そのフラグで制御すれば,レジスタを直接
    制御する必要はないのですが。
Children
No Data