初歩的な質問です。
A/D変換のANI0とANI1をセレクトモード、連続変換モードで使っています。
ADMKでINTADの割り込み許可しています。
取得動作としては、
ADSでチャンネル指定して、ADIFが1になるのを待ってADCRを読んでいます。
これを2回繰り返してANI0とANI1を取得しているのですが、今のところ
問題なく取得できているようです。
質問は
ADIFを1になるのを待って、・・その後、ADIFをクリアしないでADCRを読んでいるのですが、
それでいいのでしょうか?
ADIFは自動的にクリアされるものだと思っているのですが、どうでしょうか?
チョコです。
>ADIFを1になるのを待って、・・その後、ADIFをクリアしないでADCRを読んでいるのですが、
この処理自体は問題ありません。
>ADIFは自動的にクリアされるものだと思っているのですが、どうでしょうか?
ADIFは,ベクター割り込みがCPUに受け付けられ,割り込みベクタで示された割り込み処理
プログラムが起するとハードウェアが自動的にクリアします。
そうでなければ,そのまま保持されます。
”ADMKでINTADの割り込み許可しています。”と"ADIFが1になるのを待って"とあるので,
CPUはベクター割り込みを禁止した(DI)状態で,ソフトウェアでADIFが1になるのを待っている
(場合によっては,HALT状態でADIFによるHALT解除を行っている)のであれば,ADIFは
自動的にはクリアされません。ソフトウェアでADCRを読み出した後にでもクリアする必要があり
ます。
また,"セレクトモード、連続変換モード"とのことなので,変換対象を切り替えるためにADSで
変換チャンネルを指定した後にADIFをクリアしてください。(ソフトウェアの処理時間と変換時間
にも依存しますが,ソフトウェアの処理が遅れた場合に,ADIFをクリアしてからADSを切り替えると
ADS切り替え前に前回の変換完了のADIFがセットされてしまうかもしれません。これを避けるには,
ADS書き換え後にADIFをクリアします。)
チョコ様
ご返信ありがとうございます。
ADSでチャンネル指定した後、ADIFをクリアしてADIFが1になるのを待ってから
値を取得することにしました!