RX210でタイマオーバーフロー割り込み周期がずれる

お世話になってます。

RX210で、8bitのtmr0を5ms周期、tmr1を500us周期でオーバーフロー割り込み
として使っているのですが、SCIの送信割り込みを使ってデータ送信
を行うようにするとtmrの周期がずれてしまいます。
SCIの送信割り込みは500msに1回5バイト程度のデータをテスト的に
送信しています。
送信タイミングに同期して周期が遅れているようで、SCIの送信を止めるときっちり

5ms、500us周期で割り込みがかかります。

割り込みはレベルはtmr0、1、SCIともにOVIに4を設定しています。
tmr0、1を5などSCIよりも高レベルに設定しても改善しませんでした。

他に見るべきところは有りますでしょうか?

  • OVIに4ではなくIPRに4の記入ミスです。
  • こんにちは
    多重割り込みの場合は、割り込み処理の中でPSWのIビットを0に設定する必要があります。
    設定してますか?
    RXシリーズの多重割り込みはアプリケーションノートがあります。
    www.renesas.com/.../r01an1954jj0100_rx_family.pdf
    よろしければ見てみてください。
  • コンペアマッチじゃなくてオーバフローで割り込みさせてるんですか?
    割り込み周期に応じた TCNTカウンタの再初期化を割り込み処理で行う実装であれば、割り込み処理が他の割り込み処理等で遅れるとその分定周期動作からは外れることになると思いますが、そういうことではないんですか?
  • こんにちは
    説明が不足していました。

    SCIの送信割り込みでタイマ割り込みが阻害されていると推測しました。

    SCIの送信割り込み中でもタイマ割り込みを発生させるには多重割り込みを許可する必要があります。
    SCIの送信割り込みの中でPSWのIビットを0にすると、
    タイマ割り込みの優先順位がSCIの送信割り込みより高い場合、
    タイマ割り込みが入ります。

  • わわいです
    状況がよーわからんですが、
    はやいはなしが、SCI送信割り込み中にタイマの割り込みがかかっていないってことですか?
  • SAさん

    該当のSCIの送信処理vect.h内に
    #pragma interrupt (Excep_SCI7_TXI7(enable, vect=208))
    として多重割り込みを許可するようにしたら問題なくなることが確認できました。

    今までR8CやH8S等を使ってきましたが、特に多重割り込みを許可、不許可を意識
    したことはなく同じソフトで問題なく動いていたのですが、
    多重割り込みを許可しないといけないのはRX特有なんですかね。

    fujita nozomu さん

    原因とは直接関係なかったようですが、
    TCNTカウンタの再初期化を割り込み処理で行う実装だったので、あんまりきれいでもないので
    コンペアマッチを使うやり方に変更しました。
  • わわいさん

    多重割り込み許可するようにしたら問題は解決しましたが、
    問題としてはSAさんの言うようにSCIの送信割り込みでタイマ割り込み
    が阻害されているということだったみたいです。
  • わわいです
    えー、そこら辺CPUにより違いますが、割り込み処理中は割り込みディセーブル状態になるってやつのほうが多かったような気がします。
    まあとにかく、初めてのCPUでは、ハードウエアマニュアルを見ておこう、ってことで。
  • もんたさん
    こんにちはSAです。
    構成に多少の違いはありますが、H8SもR8Cも割り込みがはいった後、
    割り込み許可フラグによって割り込み禁止になります。
    割り込み処理内で割り込み許可を設定しないと多重割り込みが入りません。
    RX特有ではないと思います。

    ご参考のFAQです。

    https://support.renesas.com/hc/ja/articles/217534058

  • デフォルトで禁止になっているというこは多重割り込みをまったく使わずにうまく作れるもの
    なんでしょうか?

    例えばディスプレイの表示更新周期に一定サイクルの処理が必須で、それにさらにシリアル
    で通信したいとなった場合、多重割り込みは必ず必要になってくるような気がしますが。

    >構成に多少の違いはありますが、H8SもR8Cも割り込みがった後、
    >割り込み許可フラグによって割り込み禁止になります。
    今ソースコードを見直してみましたが、割り込み処理中に許可フラグの設定とか
    してない感じですが、H8SもR8Cもその辺意識しなくてもタイマ周期がずれるということは
    有りませんでした。
    まぁどこか見落としてるんでしょうね。