電流・電圧測定デバイスである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
fiReさん、こんにちは。NoMaYです。ごめんなさい。ソースを生成させて確認したところ、(RX版の)コード生成機能の簡易I2CのAPI関数に渡すスレーブのアドレスは8ビットのようでした。ですので、(少なくとも)簡易I2Cでは以下の処理が必要そうですね。(ただ、アンドする値は0x00ではなくて0x01の間違いですね。)Send時
adr = 0x41;dir = 0x00;adr = (adr<<1) | (dir & 0x01);
Receive時
adr = 0x41;dir = 0x01;adr = (adr<<1) | (dir & 0x01);
以下、確認した時のSendに関する資料です。(自分自身への備忘録としてでもあります。)RX230グループ、RX231グループ ユーザーズマニュアル ハードウェア編の画面コピーwww.renesas.com/jp/ja/search/keyword-search.html#genre=document&q=r01uh0496r01uh0496jj0120-rx231.pdfr_cg_sci.c
void R_SCI12_IIC_Master_Send(uint8_t adr, uint8_t * const tx_buf, uint16_t tx_num){ if (1U > tx_num) { return; } gp_sci12_tx_address = tx_buf; g_sci12_tx_count = tx_num; g_sci12_slave_address = adr; g_sci12_iic_transmit_receive_flag = _80_SCI_IIC_TRANSMISSION; g_sci12_iic_cycle_flag = _80_SCI_IIC_START_CYCLE; /* Disable RXI and ERI interrupt requests */ SCI12.SCR.BIT.RIE = 0U; /* Generate start condition */ R_SCI12_IIC_StartCondition();}
r_cg_sci_user.c
static void r_sci12_transmitend_interrupt(void){ if (_80_SCI_IIC_START_CYCLE == g_sci12_iic_cycle_flag) { SCI12.SIMR3.BIT.IICSTIF = 0U; SCI12.SIMR3.BIT.IICSCLS = 0U; SCI12.SIMR3.BIT.IICSDAS = 0U; SCI12.TDR = g_sci12_slave_address; } else if (_00_SCI_IIC_STOP_CYCLE == g_sci12_iic_cycle_flag) { SCI12.SIMR3.BIT.IICSTIF = 0U; SCI12.SIMR3.BYTE |= _30_SCI_SSDA_HIGH_IMPEDANCE | _C0_SCI_SSCL_HIGH_IMPEDANCE; if (_80_SCI_IIC_TRANSMISSION == g_sci12_iic_transmit_receive_flag) { r_sci12_callback_transmitend(); } if (_00_SCI_IIC_RECEPTION == g_sci12_iic_transmit_receive_flag) { r_sci12_callback_receiveend(); } }}