マイコンRL78G14 R5F104MGコンパイラCC-RL 1.09.00CS+ for CC V8.03.00EEPROM(24C256)に接続しようと考えています。このEEPROMのメモリアドレスは2バイト長です。コード生成で生成された関数をしようしたいと思っています。例えば、EEPROMのアドレス0x0123に0xEEを書き込むとします。ControlByteは 0b10100010 とします。(bit0は書込み命令)【1】コードは、tx_buf[0] = 0x01 /*アドレス上位*/tx_buf[1] = 0x23 /*アドレス下位*/tx_buf[2] = 0xEE /*書き込みたい値*/iic_status = IICA0_Master_Send(CONTROLBYTE, tx_buf, 3, 100);と書けば良いのでしょうか?【2】r_cg_serial_user.cファイルのiica0_master_handler()関数がよく分からないです。88行~120行間ででアドレス上位下位までを送信して、122行~123行間で書込みたいデータを送信すると思っていました。しかし、92行目に g_iica0_master_status_flag |= _80_IICA_ADDRESS_COMPLETE;と書かれており、 g_iica0_master_status_flagのbit7に1が立ち、0x80という値になります、そなると、次の割込みが来たとき、88行目のif ((g_iica0_master_status_flag & _80_IICA_ADDRESS_COMPLETE) == 0U)ではじかれてアドレス下位は122行~123行間で送信されることになります。なんかおかしいような気がするのですが・・・・?
https://japan.renesasrulz.com/cafe_rene/f/forum18/1492/cubesuite-i2cこのWEBページを参考に見ています。
チョコです。
【1】はその理解で問題ありません。
【2】については少し誤解がありそうです。
>88行~120行間ででアドレス上位下位までを送信して、
これは誤解です。IICA割り込みの処理はデータ転送が完了したときの処理です。ここは、最初の送信データであるスレーブアドレス(ControlByte)の送信が完了したところの処理なのでこのようになっています。そのため、EEPROMの上位アドレスの送信を始めるだけです。EEPROMの下位アドレスは次の割り込みで送信するので、134行目で送信を開始することになります。(IICA0から見ると、EEPROMのアドレスは単なる転送データでしかありません。)