RL78G12 A/D変換 ADIF

初歩的な質問です。

 

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になるのを待ってから

    値を取得することにしました!