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
  • ukishimaさん
    ソースがどうなっているのかですが
    繰り返しを行う場合は自動クリアでするのが普通であると思いますが
    タイマー再設定はカウントを停止させてからしないといけないと思います
Reply
  • ukishimaさん
    ソースがどうなっているのかですが
    繰り返しを行う場合は自動クリアでするのが普通であると思いますが
    タイマー再設定はカウントを停止させてからしないといけないと思います
Children
  • IKUZOさん、ご意見ありがとうございます。
    ソースは下記の通りです。
    ご指摘のようにタイマー再設定でカウントの停止が抜けているのだと思います。
    カウントの停止を記述して確認してみます。
    他に気になることがありましたらご指摘ください。

    #define CNT_SCN 100

    init(){
    IO.PCR7 = 0x8F; //ポート7 1000 1111 5,6,7ポートを入力に設定

    //タイマVレジスタ設定
    TV.TCRV0.BYTE = 0x09; //0000 1001 タイマV設定 20MHz/4に設定
    TV.TCNTV = 0; //カウンタ0
    TV.TCSRV.BYTE = 0x06; //TMOV出力
    TV.TCORA = 100; //コンペアマッチA 設定
    TV.TCORB = 10; //コンペアマッチB 設定
    }

    void int_timerv( void )
    {
    if( TV.TCRV0.BIT.CMIEA == 1 ){
    TV.TCORA =100;

    TV.TCRV0.BIT.CMIEA = 0;
    }
    }

    void main( void )
    {
    int scn = 0;

    init();

    while( 1 ){
    if( TV.TCRV0.BIT.CMIEA == 0 ){
    scn++;

    if( scn >= CNT_SCN ){

    TV.TCRV0.BIT.CMIEA = 1;

    scn = 0;
    }
    }
    }
    }