2016-05-19 4 views
1

私はデバイスをI2Cマスタとして設定し、バス上の残りのデバイスはスレーブとして設定します。マスタは各スレーブにコマンドを送信し、スレーブはこのタスクを実行します(重要な時間に敏感なコードなど)。私は、スレーブがいつタスクを実行し終えたのかを知りたいと思っています。私がこれを行うために見ることができる唯一の方法は、常にマスターがスレーブをポーリングするようにすることですが、マスターがスレーブをポーリングするたびにスレーブの割り込みとi2c割り込みが発生し、短い時間。スレーブの時間依存コードを中断せずにI2Cスレーブがビジーである場合、マスターはどのようにして把握できますか?

これを解決する方法はありますか?私はすべてのデバイスをマスターとして設定することを考えていたので、各デバイスがタスクを完了すると、ポーリングの必要なしに、完了したというデータを送信できます。この問題は、バスを介して同時にデータをやり取りしようとする可能性のあるデバイスとのデータ衝突が心配です。

この問題を解決する正しい方法は何ですか?

+0

モーターが「タスクを完了しました」とはどのように分かりますか? I2Cメッセージがモーターの動作を停止させなかったと仮定しましょう。そのタスクが終了したことをどのように知っていますか?ほとんどのI2Cデバイスをマスターとして設定することはできませんが、正当な方法であるとは思われません。あなたのセットアップの詳細な説明と、これらの周辺機器のそれぞれがその機能をどのように完了しているかについて、より詳しく説明する必要があります。 – DiBosco

+0

私の頭の上から外してください:マスターが全てのスレーブを起動し、情報の更新を送ることができるタイムスロット。 – LPs

+1

あなたのシステムエンジニアリングをしてください... –

答えて

2

スレーブは、I2Cインターフェイスがタイムクリティカルなタスクを実行している間はディセーブルにし、その後は再び有効にします。次に、マスタは、必要なだけ頻繁にポーリングを行うことができます。ビジー状態のスレーブからACKを受け取らず、スレーブも割り込みを受け取りません。

関連する問題