タイマー割込みができない

コード生成ツールを使用して

チャネル0と3でPWM生成

チャネル1で100usec

チャネル2で1msec

チャネル5で250msec

の割込みをするように設定しています。

R_TAU0_Channel0_Start()を実行するとPWM出力が確認できるのですが、

R_TAU0_Channel1_Start()

R_TAU0_Channel2_Start()

R_TAU0_Channel5_Start()

を実行してもどのチャネルも割込みが発生しません。

実行した状態でレジスタの値を確認すると

TAU0ENは1が立っています。

TE0は指定ビットに1が立っています。

TMIF01,TMIF02,TMIF05も1が立っていますが

TMMK01,TMMK02,TMMK05も1が立っています。

R_TAU0_Channel1_Start()でTMMK01を0にしていますが

1のままです。

これが原因でしょうか?

なぜ、R_TAU0_Channel1_Start()を実行してもTMMK01が0にならないのでしょうか?

ご教示下さい。

Parents
  • チョコです。

    >TMMK01,TMMK02,TMMK05も1が立っています

    >これが原因でしょうか?

    これが原因だと思われます。TMMK0nビットは割り込みのマスクフラグです。このフラグがセットされていたら,割り込みが発生していても割り込みは受け付けられません。

    >なぜ、R_TAU0_Channel1_Start()を実行してもTMMK01が0にならないのでしょうか?

    コード生成で,問題のチャネルで下の図のように,チェックを外していませんか?

    そうするとR_TAU0_Channel1_Start()関数は以下のようになります。

    これが原因だと思われます。使われているR_TAU0_Channel1_Start()関数の処理内容とコード生成での設定内容を確認してください。

  • チョコさん

    返信ありがとうございます。
    チェックの部分はチェックされており、生成されたコードは下記のようになっています。
    void R_TAU0_Channel1_Start(void)
    {
    TMIF01 = 0U; /* clear INTTM01 interrupt flag */
    TMMK01 = 0U; /* enable INTTM01 interrupt */
    TS0 |= _0002_TAU_CH1_START_TRG_ON;
    }
    ステップ実行してTMMK01の行を通っても1のままの状態です。
Reply
  • チョコさん

    返信ありがとうございます。
    チェックの部分はチェックされており、生成されたコードは下記のようになっています。
    void R_TAU0_Channel1_Start(void)
    {
    TMIF01 = 0U; /* clear INTTM01 interrupt flag */
    TMMK01 = 0U; /* enable INTTM01 interrupt */
    TS0 |= _0002_TAU_CH1_START_TRG_ON;
    }
    ステップ実行してTMMK01の行を通っても1のままの状態です。
Children
No Data