I2C動作

ポーリング版完成、妙なところでハマってドライバが無限ループで暴走し動作しなくなったが、それ以外のタスクは普通に動いているあたり、プリエンティブ型OSの実力が確認できた。
というわけでハマったポイントは、I2Cアドレス+R/Wフラグを作る部分で、
7ビットデバイスアドレス << 1 | 1ビットR_Wフラグ
とやるべきところで、シフトを忘れて送信→誰も返答せずNACK→エラーチェックせずに次を送っていたのでバスが破綻し割り込み待ちで無限ループ突入、というコンボでドライバが暴走し、動かなかった。
内部状態をLEDディスプレイにダンプさせながら見て、ReadでもWでも値が変わらなかったのから発覚。
"デバイスアドレス"は7ビットだが、シフトした後の値をデータシートに書くか、シフト前の値を書くかは決まってないっぽい。
ESSのデータシートはシフト後の値が書いてあって、それを見た記憶のままTIのデータシートを見る→何の疑いもなく書いてある値をコーディング→ハマる。


こんなのやらない!って思ってることほどよくやる。