2012/08/04

[fm3]I2Cがうまくいかん

Interface誌のFM3基板を使っているが、I2Cがうまくいかん。

一から書く気力がないので、Interface誌2012年7月号のドライバiic.c/hをそのままTOPPERS/ASPに載せ替え(というほどでもないか)をした。

割込が入らないとか何とかいう以前に、TDRレジスタに値を書き込んでMSS=1にしても、スタートコンディションになるだけでSDA/SCLが動かないのだ。

通信マクロの説明に従ってるのだが・・・

  • TDR書き込み
  • MSS=1
  • BB=1になった
  • ACT=1になった
  • TRX=1になった
  • FBT=1になった
  • TDRE=0になった(すぐ1になるけど)
  • SDA=Lになった
  • ちょっとしてSCL=Lになった

ここまでいくのに、SDA/SCLともにLになりっぱなしなのだ・・・。


今回使っているのは、SOT1_2とSCL1_2。
FM3基板でいえば、CN2の31ピンと32ピン。
ch1は、FIFOなし。
プルアップ抵抗は、47kΩ。
動作クロックは変更していないので、144MHzでAPB1, APB2は72MHz。
APB1が40MHzを超えるならばノイズフィルタを設定した方がいいらしいが、出力だけなら気にしなくてもいいかと思い、設定してない。
DMAも使っていない。

情報はこれくらいか。

TDRに書き込む前は、TDRE=1なので、送信データレジスタへ書き込める条件は整っている。
MSS=1にする際は、同時にINTEとINTも1にしている。読み取ると、INTは0だけど、これは割込条件が整っていないから0なだけだろう(INTへの1書き込みは、意味がないのだな)。
割込が入らないのは、データを送信できていないから。


TDR書き込み直後のMFS関連のレジスタ値

  • SMR : 0x8C
  • IBCR : 0x00
  • IBSR : 0x00
  • SSR : 0x01
  • BGR0 : 0xB3
  • BGR1 : 0x00
  • ISBA : 0x00
  • ISMK : 0xFF

MSS=1書き込み直後

  • SMR : 0x8C(MD=100/RIE=1/TIE=1)
  • IBCR : 0xC4(MSS=1/ACT=1/INTE=1)
  • IBSR : 0x91(FBT=1/TRX=1/BB=1)
  • SSR : 0x03(TDRE=1/TBI=1)
  • BGR0 : 0xB3
  • BGR1 : 0x00
  • ISBA : 0x00
  • ISMK : 0xFF

このまま放置しても、レジスタ値に変化なしだ。
うーむ。
FBT=1のままってことは、まだ送信できていないと思っているのだろう。
TRX=1だから、送信ってことはわかってるし。
BB=1なので、送受信しようとはしているようだ。
TDREも0から1になっているので、シフトレジスタへ載ってるんだと思う。

 

ちなみにオリジナルは、RIEとTIEは0だ。
まあ、まだ割込が発生する以前の問題だから、あとで考えよう。

PZRレジスタでHiZにしてやらんといかんのか?とやってみたが、変わりなし。
なんか全然わからんぞ-。

 

メモ代わりに、MSS=1後のレジスタを載せておこう。。。

image

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。