- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:H8/SX で I2C通信)
H8/SX で I2C通信
このQ&Aのポイント
- H8/SX 1655 を使ってI2C通信を試みています。送信レジスタ(ICDRT)にデータを書き込むとシフトレジスタ(ICDRS)に転送され、クロックパルスが出力されるはずですが、実際には出力されません。
- 初心者のため、何が問題かわかりません。動作モードはモード6とモード7で試しましたが、同じ結果になりました。
- H8/SX でI2C通信を行う方法に詳しい方からのアドバイスをお待ちしています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >マニュアルには、送信レジスタ(ICDRT)にデータを書き込めば >自動的にシフトレジスタ(ICDRS)に転送されて、SCL SDA 端子から >クロックパルスが出力されると書かれています。 マニュアルって、どのマニュアルですか? 公式のハードウェアマニュアルを見ると、その記述のすぐ上に、設定の手順が懇切丁寧に書かれているように見えますが・・・。
お礼
解決しました。正解は下記です。 MSTP.CRB.BIT._IIC0 = 0; /* 寝ているI2C0を叩き起こす */ IIC20.ICCRA.BYTE = 0xB4; /* マスタ、送信モード、59.5Hz */ IIC20.ICCRB.BYTE = 0xBD; /* 開始条件発行 */ IIC20.ICDRT = 0x90; /* [Start byte] Slave Address + Write */ 間の2行が必要なのですが、これをByteでライトしなければ ならないというのがポイントでした。 いままでbit個別に値を指定していたためダメということでした。 本当にありがとうございました。
補足
ご回答ありがとうございます。 マニュアルは公式のハードウェアマニュアルです。 p21-1からIIC2バスインタフェースの説明になっていて p21-16の21.4.2に「マスタ送信動作」として具体的に記述されていますね。 で、この通りにやってみたのですが、どうも動いている様子がないので オシロでSCLを当たってみたらクロックが確認されなかったのです。 色々と初期設定が必要のようですが、ほとんどReset後の初期値と 一致しているので(一致しているようなので)、 とにかくSCLのパルスをオシロでモニタするだけなら 上記の2行だけで済むのではないかと思ったのですが どうやらそうではないようですね。