マイコンクロックカウント取得方法

RL78G12シリーズのマイコンを仕様しており、両エッジ外部割込みINTP0で割り込み状態を取得しています。割り込みから割り込みまでのクロックカウントを取得したいのですが、マイコンクロックカウントを取得する方法というものはありますでしょうか。教えてください。

  • チョコです。
    INTP0ではなく,タイマのパルス間隔測定の使用を考えてみてください。
  • わわいです
    RL78はつかったことないですが、
    内蔵タイマ・カウンタのクロック入力にマイコンクロックを選択するってことはできるんでしょうか。
    それができるなら、タイマ入力にINTP0の信号を入力することにより、それで信号間隔のクロック数をカウントできそうです
  • INTP0から入力される信号の立ち上がりエッジから立下りエッジまでの間隔を測定したく、立ち上がりから立下りの間隔はおおよそ1msです。正確な時間を測定したため、どのように測定した方がよいのかわかりません。タイマーユニットアレイのインタバールタイマーを使用してできるものなのでしょうか。
  • チョコです。
    INTP0のエッジ検出割り込みとインターバル・タイマの組み合わせでは,割り込み応答時間のバラつき(実行中の命令の実行時間の差)による誤差が数クロック分発生します。また,INTP0割り込み発生時に他の割り込みを処理していて割り込み禁止になっている場合には,その分の時間も誤差に加わることになります。どの程度の精度が必要かで,決めてください。
    なお,立ち上がりエッジから立下りエッジのハイレベル幅であれば,タイマのハイ/ロウレベル幅測定を使えば,簡単に測定できます。これは,ハードウェアでの実現なので,割り込み処理等による影響は受けません。
  • わわいです
    おおよその時間間隔がわかるなら、TPU(かMTU)のインプットキャプチャの機能を使えばなんとかなりそうですねー
    #割り込み処理の間隔じゃなくて、入力信号のエッジの間隔の計測になりますが
  • チョコです。
    わわいさん,RL78にはTPU(かMTU)なんてありません,
    RL78(G12)ではTAU(タイマ・アレイ・ユニット)で,機能がかなり違うと思いますよ。

    マニュアルの「6. 8. 5 入力信号のハイ/ロウ・レベル幅測定としての動作」に詳細が記述されています。
  • チョコです。
    追加でコメントします。
    どうしても,インターバルタイマとINTP0割り込みを使いたい場合には,測定時に
    ・他の割り込みは使用しない。
    ・測定以外の処理は行わない。
    の条件を付けると,INTP0割り込みをHALT状態で待つようにすれば,INTP0割り込み応答時間の変動は1クロックになります。
    使用方法にかなり制限は付きますが,この方法が使えれば,INTP0でインターバル・タイマのカウント値を読むタイミングの変動が1クロックなので,誤差は1クロックに抑え込むことができるかもしれませんよ。
    (これより,タイマのタイマのハイ/ロウレベル幅測定がお勧めですが。)
  • 以下のことはできないでしょうか。
    INTP0の割り込みを両エッジに設定。
    タイマーユニットアレイのクロックを選択し、TS01 のカウント許可ビットをセットする。
    INTP0の割り込み発生でTDR0(タイマーデータレジスタ)をリードして、
    次のINTP0の割り込み発生で再度TDR0(タイマーデータレジスタ)をリードして、カウントの差を
    確認したいのですが、TDR0はリードできますが、TDR0を故意に0リセットするができません。
    教えてください。
    TDR0をリード⇒カウント0リセット実施⇒再度カウントを0からカウント開始
  • チョコです。
    タイマをインターバル・タイマで使っているなら,TDRの値は変化しません。TCRを読み出すべきです。
    また,INTP0でタイマのカウント値を読み出すならば,単にインターバルを計算しやすい値にしておくだけで十分です(TDRに0xFFFFを設定しておけば0xFFFF->0xFFFE->・・・・・->0x0001->0x0000->0xFFFFとカウントします)。別にクリアする必要はないかと思います。
    1回目の読み出し値から2回目の読み出し値を引けば(インターバル・タイマはダウンカウントなので,)その間のカウント数が分かります。
  • クリアしたいのは、 1回目と2回目の間でカウントがオーバーフローした場合の対処方法としてどのように行うのか検討しています。、1回目(0x0010)から2回目(0xFFFF)にカウントのオーバーフラグしたときに、1回目から2回目を引いた値がくるうからです、 unsigned short型で引く計算を実施した場合、0x8000→0x7FFFになったとき数値が大きくなるからです。また、signed short型の場合 0x0000→0xFFFFになったとき、数値が 0- 65565になるからです。
     従って1回目は常に0xFFFFにして計算したいと思っています。