2

dsPIC33マイクロコントローラーを使用して複数のI2Cスレーブデバイスから読み取ろうとしています。

誰かがタイマー割り込み(この場合はtimer1)を使用してI2Cデータを収集する正しい方法についてアドバイスしてくれることを望んでいました。

これまでのところ、whileループでループすることにより、I2Cスレーブデバイスからデータを正常に収集できますが、タイマー割り込みを追加しようとしたため(「できるだけ速く収集する」のではなく、独自のサンプリングレートを適用できます)、I2Cソフトウェアドライバーがスタックしています。

私は非常に低いタイマー速度(現時点では1Hz)で試しましたが、I2Cは標準の100KHz速度です。PICは80MHzで処理しています。

タイマーとI2Cモジュールを使用する正しい方法は何ですか?私はオンラインで調べましたが、timer1を使用する場合、割り込み(timer1)内に割り込み(I2C)がありますが、これまでのところ運がないため、割り込みの優先度の問題である可能性があります。

4

1 に答える 1

1

私は自分の問題をなんとか解決できたようで、かなり迅速に解決できたようです。

これは割り込み優先度の問題であることが判明しました。以前はtimer1を優先度7(最高)に設定していました。

IPC0bits.T1IP = 0b111; // Timer1 Interrupt priority level=7

これを優先度1に変更すると、問題が解決しました。

IPC0bits.T1IP = 0b001; // Timer1 Interrupt priority level=1

これがこの問題に遭遇した他の誰かに役立つことを願っています。私の推測では、さまざまな優先順位がI2C割り込みと競合していると思います。

于 2013-03-27T11:05:12.253 に答える