プラットフォーム - ARM9I2C ISRおよび割り込み
I2Cを介してARM9に接続されているサードパーティデバイスがあります。私の問題は、I2Cの読み込み/書き込みがひねっていることです。 IRQラインはアサートされているように見えますが、読み取るデータがあるときは決してアサートされません。サードパーティ製デバイスがアドレスパケットをNACKすると、読み込みに失敗します。したがって、それ以降の書き込みは失敗します。
私の割り込み処理がokかどうかは疑問です。 IRQを処理するISRでは、割り込みを無効にし、割り込みハンドラの登録を解除し、タスクに信号を送り、I2Cバスから読み出します。最後に、割り込みを再び有効にします。
タスクが上記の信号を処理すると、I2Cバスからデータを読み込もうとしますが、これは失敗します。最後に、私はISRをいつも読んでから再登録します。リード信号の処理中に発生する割込みの禁止/許可はありません。
私の質問はI2Cバスを読み書きするときに割り込みを無効にする必要がありますか?
プログラミング言語は、適切なRTOSを使用して選択します。
IRQが決してアサートされない場合、デバイスから十分なデータおよび/または正しいデータが読み込まれていることを確認して、デバイスがIRQをディアサートするようにしていますか? – bstpierre
デバイスのドキュメントでは、Xデータを常にバスに書き込むように指定しています。そのため、Xバイトだけを読み込もうとしています。 さらに、I2Cを使用してファームウェアをデバイスokにアップデートしています。デバイスが突然IRQラインのデアサートを停止するのは特定のポイントだけです – dubnde
デバイスとプロセッサの間でデータ交換のバーストが発生するまで、これが動作するので競合状態になるかもしれないと考え始めていますが走っています。この時点以前は、コマンドを送信して問題なく応答を得ることができます。 – dubnde