RL78/G13(R6F1006E)でUARTとI2Cを使用するプログラムを作成しています。
コード生成ツールで設定を行い、次の様な関数が生成されています。
void R_IIC00_Master_Send(uint8_t adr, uint8_t * const tx_buf, uint16_t tx_num)
void R_IIC00_Master_Receive(uint8_t adr, uint8_t * const rx_buf, uint16_t rx_num)
現在、スレーブアドレス0x10に対して、レジスタアドレス0x14のデータを読むプログラムを作成していますが、
上記関数の使い方が判らず、苦戦をしております。
I2Cのスレーブ側は別のマイコンで自作をしています。
void R_IIC00_Master_Send(0x10,Tx_buf,1);
void R_IIC00_Master_Receive(0x11,Rx_buf,1);
というような関数を実行すると、2バイト分送信した後に、SCKがLowに張り付いてしまいます。
関数の使い方等をお教え下さい。
r_main.zip
チョコです。
>void R_IIC00_Master_Send(0x10,Tx_buf,1);
>void R_IIC00_Master_Receive(0x11,Rx_buf,1);
RL78の簡易IICのコード生成は基本的に、リスタートに対応出来ていません。各々1バイトの送信と受信と言うことは、送信した1バイトがレジスタアドレスで、受信した1バイトがそのデータだと思います。
また、R_IIC00_Master_SendやR_IIC00_Master_Receive関数はそれぞれ、送信または受信処理を起動するだけです。送信または受信の完了まではケアしていません。
なお、RL78の簡易IICはクロックストレッチには対応していません。ここらはどのように対応しようとしていますか。
かふぇルネが今のバージョンになるまでは、「サンプルコード等」と言うプログラム等の投稿領域があり、そこに参考になる情報があったのですが、今はなくなってしまったの参照できません。
そこにあった、RL78/G13でIIC00を使ったサンプルコードのIIC00関係のライブラリとその使い方を示した例としてmain.cをzipファイルで添付しましたので、参考にしてください。IIC00の初期設定だけはコード生成を使い通信関係はライブラリ(r_iic_lib.c)に準備してあります。
何しろ結構古いので、手元にあったのが最新版かどうかは不明ですが動作していたもののはずです。
以上