H8/3694のタイマVでTMOVの出力がOFFになるタイミングがある

H8/3694のタイマVを使用しています。

内部クロックΦ/4、TCORA=100(約20us)、TCORB=10(約2us)の設定でAとBのコンペアマッチでTMOVからパルス出力をします。

TCORAとTCORBの割り込みタイミングに割り込み処理から同じ値を書き込みすると、不定期ですがTMOVの出力で50usOFFすることがあります。

TMOVの出力がOFFする原因をご存じの方はいないでしょうか?

Parents
  • こんにちは。Steinenです。
    最近、かふぇルネを訪問するようになり、タイマVという名称が気になって、拝見したところ、解決したかが分からなかったので、数年前の投稿ですが、念のため、投稿します。


    「TMOVの出力がOFFになる」を、期待するパルス出力がなく、出力が固定されている状態であると考えると、H8/3694のハードウェアマニュアル「11.6使用上の注意事項」No.2に該当している可能性があります。
    この注意事項には、TCORへのライトサイクルのT3ステートでコンペアマッチが発生した場合、コンペアマッチ信号は禁止されます、とあり、ご使用の状態に当てはめると、期待しているコンペアマッチAが発生せず、1出力が行われない(TMOV出力の0が続く)状況になると思います。


    プログラムを拝見すると、タイマの動作開始後、ある時点で(タイマのカウント状態と関係なく)、割り込みイネーブルビットCMIEAを1にセットしているようです。その時点では、過去のコンペアマッチによって、割り込み要因フラグCMFAはセットされている可能性があります。この場合は、直ちに、割り込み処理プログラムint_timervが実行され、そのときのTCNTの値によっては(TCORAの手前の値になっていると)、ある確率で、上記の注意事項に該当することがと考えられます。


    対策としては、int_timervでのTCORAへのライトを削除できそうな気もしますが、それが望ましくないのであれば、CMIEAを1にセットする前に、CMFAを0にクリアすることが考えられます。この場合、次のコンペアマッチまで待ってから、int_timervが実行されるようになり、
    このときは、TCNTは(クリア後の)TCORAより十分小さい値なので、上記の注意事項に該当しなくなると期待できます。


    なお、上記の注意事項について、RXの8ビットタイマでも同様になっているようです。

Reply
  • こんにちは。Steinenです。
    最近、かふぇルネを訪問するようになり、タイマVという名称が気になって、拝見したところ、解決したかが分からなかったので、数年前の投稿ですが、念のため、投稿します。


    「TMOVの出力がOFFになる」を、期待するパルス出力がなく、出力が固定されている状態であると考えると、H8/3694のハードウェアマニュアル「11.6使用上の注意事項」No.2に該当している可能性があります。
    この注意事項には、TCORへのライトサイクルのT3ステートでコンペアマッチが発生した場合、コンペアマッチ信号は禁止されます、とあり、ご使用の状態に当てはめると、期待しているコンペアマッチAが発生せず、1出力が行われない(TMOV出力の0が続く)状況になると思います。


    プログラムを拝見すると、タイマの動作開始後、ある時点で(タイマのカウント状態と関係なく)、割り込みイネーブルビットCMIEAを1にセットしているようです。その時点では、過去のコンペアマッチによって、割り込み要因フラグCMFAはセットされている可能性があります。この場合は、直ちに、割り込み処理プログラムint_timervが実行され、そのときのTCNTの値によっては(TCORAの手前の値になっていると)、ある確率で、上記の注意事項に該当することがと考えられます。


    対策としては、int_timervでのTCORAへのライトを削除できそうな気もしますが、それが望ましくないのであれば、CMIEAを1にセットする前に、CMFAを0にクリアすることが考えられます。この場合、次のコンペアマッチまで待ってから、int_timervが実行されるようになり、
    このときは、TCNTは(クリア後の)TCORAより十分小さい値なので、上記の注意事項に該当しなくなると期待できます。


    なお、上記の注意事項について、RXの8ビットタイマでも同様になっているようです。

Children
No Data