RL78G13にてCS+上で割込みが発生しない

EI();                                         // 割込み許可
R_TAU0_Channel0_Start();    // タイマアレイユニット0開始 (インターバルタイマ)

上記コードを書いているのですが、一切タイマ割込みが行われず、原因が全く分かりません。

PSWのIEも1になっており、

PER0レジスタのTAU0ENビットも1になっています。

タイマアレイユニットの設定はcs+の自動生成機能を使用しており

同じコードを今まで散々書いてきて、このような問題は起こったことが無かったので困っております。

使用しているマイコン:R5F101JC (RL78G13, 52pin, 32KB)

どなたか原因が分かる方がいらっしゃればご助力いただきたいです。

何卒よろしくお願いいたします。

  • チョコです。

    PSWの値から、判断して、CPUは割り込みを受け付けるはずです。

    INTTM00割り込みの要求フラグ(TMIF00)は1になっていますでしょうか。また、TMMK00フラグはクリアされていますでしょうか。

    TE0レジスタのビット0は1(動作中)になっていますでしょうか。

    また、INTTM00の割り込み処理ルーチンはどのようになっていますでしょうか。

    これらに問題がなければ、使っているハードウェアはちゃんと動作していますか。

    こういったところを確認してみてください。

    以上

  • チョコ様

    割込みレジスタのガード機能設定が"使用する" → "使用しない"に変更することで

    無事に割込みがかかるようになりました。

    ↑の関数を実行しても「TMIF00」「TMMK00」の値が変化していませんでした。

    そこで、自動生成の設定を1から見直したところ、

    割込みレジスタのガード機能設定が"使用する"になっており、

    これを"使用しない"に変更したところ、無事に割込みがかかるようになりました。

    先の質問文で「同じコードを今まで散々書いてきて、このような問題は起こったことがない

    と書きましたが、過去に作ったソフトは全て割込みレジスタのガード機能設定が"使用しない"になっていました(汗)

    この度はアドバイスいただき誠にありがとうございます。

    早急に解決できてよかったです。

  • チョコです。

    無事に解決してよかったですね。

    コード生成で「安全機能」の「ガード機能」を有効にすると、初期設定の段階で「ガード機能」が有効になってしまい、今回のようなmain関数でR_TAU0_Channel0_Startを実行しても、割り込み関係のレジスタがガードされてしまい、割り込みを許可できなかったという動きになったようです。

    ある意味、コード生成の仕様のバグと言えるかもしれませんね。

    以上