CS+にて自動生成してくれるRL78のI2Cのドライバ関数R_IICAn_Master_Send(及び R_IICAn_Master_Receive)につきまして、第4引数に wait; スタート・コンディションのセットアップ時間 という設定項目があります。
このwait値に比例して内部処理で単純にループによるウェイトをかけているのは分かるのですが、ウェイトを変更する必要性等、基本的なところが理解できていません。何を基準に適正な設定値を決めればよいのでしょうか。ご教授頂けますよう、よろしくお願いします。
チョコです。
この引数はスタート・コンディションの発行をトリガしてから,実際にIICバスでスタート・コンディションが
発行されたことをチェックするまでの時間を指定するものです。単に,無限ループになるのをきらった
ためのものです。
普通は,IICバスの1ビット分の時間あれば,完了すると考えられるので,余裕をみて,倍の時間
分みればいいと思います。
長過ぎても,単にスタート・コンディションからスレーブ・アドレスの送信までの時間が延びるだけです。
短すぎると,実際にスタート・コンディションが発行される前にエラーと判断してしまうので,長くする方が
トラブルは少ないかと思います。
私がサンプルプログラムで作っているのは,この値は100で固定(引数にしていない)していますが,
単純な100回ループではなく,ループの中でスタート・コンディションを検出したらループを抜けるように
しています。
japan.renesasrulz.com/.../293.aspx
ご回答ありがとうございます。
そうすると、400kHzで通信する場合は2クロック分見て5μsecウェイトが必要
32MHzマイコンで動作させる場合は160cycle相当
ビルド設定にもよりますが、1wait分のループに最低5cycleかかるとすれば
32ぐらいの値を与えておけば大丈夫ということでしょうか。
>32ぐらいの値を与えておけば大丈夫ということでしょうか。
はい,ファースト・モード(SCL:400kHz)であれば,その程度でいいと思います。