いつもお世話になっております。
下記の現象についてご教授ください。
【発生現象】
スマートコンフィグレータで生成したConfig_RIIC0でマスターからの送受信をした際にかなり頻度で
送信時に★バスビジー状態となる現象が発生します。
尚、★時にICSR2のSTARTビットをみても0で、Step実行で実行する限りは発生しません。
MD_STATUS R_Config_RIIC0_Master_Send(uint16_t adr, uint8_t * const tx_buf, uint16_t tx_num){ :
if (1U == RIIC0.ICCR2.BIT.BBSY) { status = MD_ERROR1; ★
【発生環境】
・CS+
・スマートコンフィグレータ生成のConfig_RIIC0
・SCLは200kHz
・SDA/SCL波形をみる限りBBSYフラグ=1条件であるスタートコンディションおよびIICRST発生はみられません。
・割込要因はALI/STI/SPI/NAKI
※生成された割込ハンドラはr_Config_RIIC0_error_interrupt()/r_Config_RIIC0_transmit_interrupt()/r_Config_RIIC0_transmitend_interrupt()/r_Config_RIIC0_receive_interrupt()
【ご質問】
Q1:
waitで回避する事は可能ですが、どの関数にいれるべきか?(割込ハンドラにwaitなどいれたくないのが本音です)
頭を悩ませております。
Q2:
他に何をどうやって確認すればよいのか、お恥ずかしながらわかりません。
(http://japan.renesasrulz.com/cafe_rene/f/forum11/1425/r5f61644a-h8sx-iic-busy#pi4368=3
は拝見しましたがノイズがのってる訳ではないので、同じ現象ではないように思えます)
画像は現象発生時の『SCL/SDAの波形』『エラー該当コード』『RIIC0.ICSR2.STARTビット(が0であるエビデンスです)』
チョコです。
RXは使ったことないので,波形についてだけコメントさせてもらいます。
この波形は,正常な波形に見えます。最初の赤で囲んだところがスタート・コンディションです。
その後,スレーブアドレス0b0101001(7bit)に0x89を書き込んでいます。2つ目の赤で囲んだ
ところが通信方向を変更するためのリスタートで,その後スレーブアドレス0b0101001(7bit)
から読出しを行っています。
読み出したデータは0x00で,それに対してマスタがNAK応答して通信を完了しています。
最後に3つ目の赤で囲んだところがストップ・コンディションで,I2Cバスが解放されて
いることが読み取れます。
どう見ても,異常な波形には見えません。