アプリ版:「スタンプのみでお礼する」機能のリリースについて

H8/SX 1655 を使ってI2C通信を試みています。

マニュアルには、送信レジスタ(ICDRT)にデータを書き込めば
自動的にシフトレジスタ(ICDRS)に転送されて、SCL SDA 端子から
クロックパルスが出力されると書かれています。

とすると、パルスの出力だけなら Reset 後

MSTP.CRB.BIT._IIC0 = 0; /* 寝ているI2C0を叩き起こす */

IIC20.ICDRT = 0x90; /* [Start byte] Slave Address + Write */

この2行で事足りると思うのですが、実際にはクロックパルスは
出力されません。きっと必要な何かが不足しているのだと
思うのですが、当方、初心者にて皆目見当がつきません。

どなたかご教示いただけないでしょうか。
因みに動作モードは、モード6とモード7で試してみました。

よろしくお願いいたします。

A 回答 (1件)

こんにちは。



>マニュアルには、送信レジスタ(ICDRT)にデータを書き込めば
>自動的にシフトレジスタ(ICDRS)に転送されて、SCL SDA 端子から
>クロックパルスが出力されると書かれています。

マニュアルって、どのマニュアルですか?
公式のハードウェアマニュアルを見ると、その記述のすぐ上に、設定の手順が懇切丁寧に書かれているように見えますが・・・。

この回答への補足

ご回答ありがとうございます。

マニュアルは公式のハードウェアマニュアルです。

p21-1からIIC2バスインタフェースの説明になっていて
p21-16の21.4.2に「マスタ送信動作」として具体的に記述されていますね。

で、この通りにやってみたのですが、どうも動いている様子がないので
オシロでSCLを当たってみたらクロックが確認されなかったのです。

色々と初期設定が必要のようですが、ほとんどReset後の初期値と
一致しているので(一致しているようなので)、
とにかくSCLのパルスをオシロでモニタするだけなら

上記の2行だけで済むのではないかと思ったのですが
どうやらそうではないようですね。

補足日時:2011/11/09 16:01
    • good
    • 0
この回答へのお礼

解決しました。正解は下記です。

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個別に値を指定していたためダメということでした。

本当にありがとうございました。

お礼日時:2011/11/10 21:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!