RX231のコード生成を用いた簡易IIC通信について

電流・電圧測定デバイスであるINA233を用いて電圧値を測定し,測定値を簡易IIC通信でRX231に送るプログラムを作成しておりますが上手くいきません.

RX231シリーズ R5F52316ADFM 

ROM:256Kbyte RAM 32Kbyte  外部発振20MHzを使用しています.

コード生成はSCI12を簡易IICバスに設定し,生成しました.

void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
   {
    uint8_t     adr         =0      ;//7bit address
 uint8_t     dir         =0      ;//0:Write 1:Read
 
 uint8_t  tx_buf[255] = {0};//send data
     uint8_t  rx_buf[255] = {0};//receive data
 
 while(1){
  adr = 0x41;
  dir = 0x00;
  adr = (adr<<1) | (dir & 0x00);
  tx_buf[0] = 0x88; //READ_VIN PMBusコード ina233
  tx_buf[1] = 0x89; //READ_IN PMBusコード ina233
    
  //PMBusコマンド ina233に送信
  R_SCI12_Create();
  R_SCI12_Start();
  R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);
  R_SCI12_Stop();
 
  adr = 0x41;
  dir = 0x01;
  adr = (adr<<1) | (dir & 0x00);
 
  //ina233からデータ取得
  R_SCI12_Start();
  R_SCI12_IIC_Master_Receive(adr,rx_buf,3);
  R_SCI12_Stop();
 }
   }
  
    /* End user code. Do not edit comment generated here */
}

CS+の設定等もよく分からないのでその辺りも教えていただけるとありがたいです.

初歩的な質問ですいませんが,よろしくお願いいたします.

//INA233のデータシート

www.ti.com/.../ina233.pdf

Parents
  • fiReさん、こんにちは。NoMaYです。

    少し脱線しますが、確認したいことがあります。今現在、RX231のソフトウェア開発で使われるツールはRXスマートコンフィグレータというものになるのですが、fiReさんが提示されているソースコードはコード生成機能とよばれる機能で生成されたソースになっています。頂いている文面から察するに、CS+を使うのは初めて?(RX231というより)RXマイコンを使うのも初めて?のように思われるのですが、どういう経緯で、RXスマートコンフィグレータを使わずにコード生成機能を使われているのですか?私がとっさに思い浮かべたのは、以下の理由かな?と思ったのですが、、、

    (1) スタータキット(Renesas Starter Kit for RX231)に同梱されていた(?)かなり古い(?)CS+を使用していてコード生成機能しか無かったので?

    製品ページURL
    www.renesas.com/jp/ja/products/software-tools/boards-and-kits/starter-kits/renesas-starter-kit-for-rx231.html

    ちなみにRenesas Starter Kit for RX231(B版: Trusted Secure IP搭載)もDVD内のCS+はかなり古いのだろうか、、、(独り言です、、、)
    www.renesas.com/jp/ja/products/software-tools/boards-and-kits/starter-kits/renesas-starter-kit-for-rx231b.html

    [訂正] すみません、そういえば、Renesas公式サンプルコードはe2 studio版しかありませんでした。
    (2) ターゲットボード(Target Board for RX231)向けRenesas公式サンプルコード(この機種だけコード生成機能を使用)をベースにしたので?

    サンプルコードダウンロードURL
    www.renesas.com/jp/ja/software/D6002186.html

    ちなみに、コード生成機能で生成されたものかRXスマートコンフィグレータで生成されたものかは、以下のようにAPI関数が若干異なりますので、区別が出来ます。

    コード生成機能で生成
    例) R_SCI12_IIC_Master_Send()

    RXスマートコンフィグレータで生成
    例) R_Config_SCI12_IIC_Master_Send()

  • 皆さん、返信ありがとうございます。
    送信完了、受信完了を受ける必要があるとのことでしたので
    以下のようにプログラムを書き換えました。
    しかしrx_buf[0] = 255,rx_buf[1] = 255という結果となり期待した数値は得られませんでした
    割り込みの書き方が違うのでしょうか?

    //PMBusコマンド ina233に送信
    R_SCI12_Start();
       //TDRレジスタがデータなしになるまで
    while(SCI12.SSR.BIT.TDRE == 0){
    R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);
    }
    R_SCI12_Stop();

    adr = 0x41;
    dir = 0x01;
    adr = (adr<<1) | (dir & 0x00);

    //ina233からデータ取得
    R_SCI12_Start();
       //RDRレジスタに有効なデータが書き込まれるまで
    while(SCI12.SSR.BIT.RDRF == 0){
    R_SCI12_IIC_Master_Receive(adr,rx_buf,3);
    }
    R_SCI12_Stop();

    NoMaY様、今回用いているrx231は大学の研究で使用しているものでスイッチやLED、電流電圧センサーが組み込まれた評価ボードとなっています。RENESASのHPから統合環境をインストールしてCS+を使っている状態です。RXスマートコンフィグレータの存在は知りませんでした、、
    あとお察しの通りrxマイコンもCS+も今回初めて使っています。
    こんな感じでよろしいでしょうか、、
  • チョコです。

    >while(SCI12.SSR.BIT.TDRE == 0){

    >R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);

    >}

    この処理は間違いです。最初に送信を一度起動して,送信完了を待ちます。

    R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);

    while(...){

    }

    同様に受信についても,最初にR_SCI12_IIC_Master_Receive(adr,rx_buf,3);

    で受信を起動してから,受信完了を待ちます。おそらくSSR.RDRFでは,1バイトでも受信したら抜けてしまうので,鈴木さんが提示した資料を参照してください。(送信についても同様。)

    細かなことですが,adr = (adr<<1) | (dir & 0x00);の右側の項は常に0なので,無意味です。というか,これ自体が不要では。

     

    以上

     

Reply
  • チョコです。

    >while(SCI12.SSR.BIT.TDRE == 0){

    >R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);

    >}

    この処理は間違いです。最初に送信を一度起動して,送信完了を待ちます。

    R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);

    while(...){

    }

    同様に受信についても,最初にR_SCI12_IIC_Master_Receive(adr,rx_buf,3);

    で受信を起動してから,受信完了を待ちます。おそらくSSR.RDRFでは,1バイトでも受信したら抜けてしまうので,鈴木さんが提示した資料を参照してください。(送信についても同様。)

    細かなことですが,adr = (adr<<1) | (dir & 0x00);の右側の項は常に0なので,無意味です。というか,これ自体が不要では。

     

    以上

     

Children
  • チョコ様、ご指摘ありがとうございます。APIマニュアルについては、修正したいと思います。
    NoMaY様、すみません、簡易I2CのAPIアドレスの指定が他と異なっていることはわかっていたのですが、初期の仕様で間違ってきめていたようです。APIを途中で変更することも出来ず、現在に至っています。この点も含めてAPIマニュアルに記載したいと思います。
    スマートコンフィグレータのダウンロードについては下記URLからお願いします。
    www.renesas.com/smart-configurator
    CS+の無償ダウンロードページにも記載したいと思います。