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
  • チョコさま、ご回答ありがとうございます。
    ソースを確認しましたが、CSIを制御するレジスタを直接いじっているところはありません。(と思っています。)
    コード生成で生成されたコードは、前述の通りr_cg_serial_userの割り込み処理にフラグ処理を追加した程度で、R_CSI11_Create関数もそのまま使用しています。
    I/Oポートも、P3およびP5も定義されているようです。
    void R_CSI11_Create(void)
    {
    ST0 |= _0008_SAU_CH3_STOP_TRG_ON; /* disable CSI11 */
    CSIMK11 = 1U; /* disable INTCSI11 interrupt */
    CSIIF11 = 0U; /* clear INTCSI11 interrupt flag */
    /* Set INTCSI11 low priority */
    CSIPR111 = 1U;
    CSIPR011 = 1U;
    SIR03 = _0004_SAU_SIRMN_FECTMN | _0002_SAU_SIRMN_PECTMN | _0001_SAU_SIRMN_OVCTMN; /* clear error flag */
    SMR03 = _0020_SAU_SMRMN_INITIALVALUE | _0000_SAU_CLOCK_SELECT_CK00 | _0000_SAU_CLOCK_MODE_CKS |
    _0000_SAU_TRIGGER_SOFTWARE | _0000_SAU_MODE_CSI | _0000_SAU_TRANSFER_END;
    SCR03 = _C000_SAU_RECEPTION_TRANSMISSION | _0000_SAU_TIMING_1 | _0000_SAU_MSB | _0007_SAU_LENGTH_8;
    SDR03 = _CE00_CSI11_DIVISOR;
    SO0 |= _0800_SAU_CH3_CLOCK_OUTPUT_1; /* CSI11 clock initial level */
    SO0 &= ~_0008_SAU_CH3_DATA_OUTPUT_1; /* CSI11 SO initial level */
    SOE0 |= _0008_SAU_CH3_OUTPUT_ENABLE; /* enable CSI11 output */
    /* Set SI11 pin */
    PM5 |= 0x01U;
    /* Set SO11 pin */
    P5 |= 0x02U;
    PM5 &= 0xFDU;
    /* Set SCK11 pin */
    P3 |= 0x01U;
    PM3 &= 0xFEU;
    }

    呼び出す前のif分は、SSR11のエラーチェックをしているだけなので、レジスタはいじっていません。
    すみませんが、ほかに確認する点はございませんでしょうか。
    よろしくお願いします。
  • チョコです。
    if ((SSR11 & 0x0040 ) == 0) はTSFビットをチェックしているので,UART2かCSI21かIIC21が
    通信中でないかのチェックですが,何をチェックしているのでしょうか。
    コード生成を使ってなければ,データで使用している兼用ポートの設定がおかしいという
    ところです。兼用ポートの出力ラッチが1になっているかPMレジスタが0になっていかを
    確認してください。SO11はP51なので,まずはここの値を確認してください。
Reply
  • チョコです。
    if ((SSR11 & 0x0040 ) == 0) はTSFビットをチェックしているので,UART2かCSI21かIIC21が
    通信中でないかのチェックですが,何をチェックしているのでしょうか。
    コード生成を使ってなければ,データで使用している兼用ポートの設定がおかしいという
    ところです。兼用ポートの出力ラッチが1になっているかPMレジスタが0になっていかを
    確認してください。SO11はP51なので,まずはここの値を確認してください。
Children
No Data