PIC32MX220F032BのI2Cモジュールを使うときにハマったこと
・Harmony Library使用条件
・I2CはI2C1
リスト1
DRV_I2C0_MasterStart();
DRV_I2C0_WaitForStartComplete();
だけで,スタートコンディションが生成されると思っていたが,この後,
リスト2
DRV_I2C0_ByteWrite(0b01000000);
DRV_I2C0_WaitForByteWriteToComplete();
を実行すると,I2CSTATのIWCOL<7>が"1"となり,衝突する.
デバッガで調べるとリスト1の実行後,I2CCONのSEN<0>が"1"となっている.
スタート信号が送られたら,自動的に"0"になるとデータシートに書かれているのに・・・
結論,
DRV_I2C0_WaitForByteWriteToComplete();
で,スタート信号を送り終わるまで待つかと思ったが,
送り終わるまで待っているが,バスがアイドルになるまでは待っていない事が判明.
よって,この後に
while(!DRV_I2C0_MasterBusIdle());
を突っ込んで,バスアイドルを待てば,そのうちI2CCONのSEN<0>が"0"に戻り,データ送信が可能となる.
コメント