- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I write in Japanese.
<FRT>
カウントアップモード
ゼロ検出割込み(ピーク割込みは未使用)
ピーク値:0xFFFF
<ICU>
立ち上がりエッジでキャプチャ
入力周期(ICU入力) = 65536×ゼロ検出割込みの回数+今回のICUキャプチャ値-前回のキャプチャ値
上記の様にパルス周期を測定しようとしています(添付)。
FRTのカウンタ値がピーク値からゼロへ切り替わる付近で ICU入力が立ち上がると、FRTのゼロ検出割込みが発生した後にICUのキャプチャ割込みが発生します。この時、ICUのキャプチャ値が0x0000ではなく0xFFFFとなっており、入力周期を正しく測定できません。
正しい入力周期の測定方法を教えてください。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ICUで計測する入力周期の最大値より長い周期になるようにFRTのカウントクロック周期を制御するのが最も簡単な解決方法です。
しかし、より詳細に入力信号の周期を計測されたいようなので、以下のような方法はいかがでしょうか?
二つの別々の周期(FRTと入力信号)の物を利用していますので、一方がもう一方をケアする必要があります。
更に、ケアする側がケアされる側より高優先で動作するようにします。
- 割込み優先度について
NVICの機能を使用して、FRTのゼロ検出割込みとICUのキャプチャ割込みに優先度の差をつけてください。
FRTのゼロ検出割込み:優先度高
ICUのキャプチャ割込み:優先度低
- それぞれの割り込み処理について
FRTのゼロ検出割込み:(ICU側のケアを行う)
・ICUがキャプチャ済かどうか確認する。
ICU制御レジスタAのIPC0(IPC1)フィールドを参照(0クリアはしないでください)
・IPC0(IPC1)フィールドが0の場合:ゼロ検出割込みの回数をカウントアップする。
・IPC0(IPC1)フィールドが1の場合:ICUのキャプチャ値を参照して、ゼロをまたいでいれば、ゼロ検出割込みの回数をカウントアップする。ゼロをまたいでいなければ、カウントアップしない。
ICUのキャプチャ割込み:
・キャプチャ値から、入力周期を計算する。
以上、宜しくお願い致します。
Nada
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ICUで計測する入力周期の最大値より長い周期になるようにFRTのカウントクロック周期を制御するのが最も簡単な解決方法です。
しかし、より詳細に入力信号の周期を計測されたいようなので、以下のような方法はいかがでしょうか?
二つの別々の周期(FRTと入力信号)の物を利用していますので、一方がもう一方をケアする必要があります。
更に、ケアする側がケアされる側より高優先で動作するようにします。
- 割込み優先度について
NVICの機能を使用して、FRTのゼロ検出割込みとICUのキャプチャ割込みに優先度の差をつけてください。
FRTのゼロ検出割込み:優先度高
ICUのキャプチャ割込み:優先度低
- それぞれの割り込み処理について
FRTのゼロ検出割込み:(ICU側のケアを行う)
・ICUがキャプチャ済かどうか確認する。
ICU制御レジスタAのIPC0(IPC1)フィールドを参照(0クリアはしないでください)
・IPC0(IPC1)フィールドが0の場合:ゼロ検出割込みの回数をカウントアップする。
・IPC0(IPC1)フィールドが1の場合:ICUのキャプチャ値を参照して、ゼロをまたいでいれば、ゼロ検出割込みの回数をカウントアップする。ゼロをまたいでいなければ、カウントアップしない。
ICUのキャプチャ割込み:
・キャプチャ値から、入力周期を計算する。
以上、宜しくお願い致します。
Nada
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I write in Japanese.
ご回答、ありがとうございます。
以下、確認させて下さい。
FRTのゼロ検出割込みが発生した後にICUのキャプチャ割込みが発生する。
このときキャプチャされていた値が0xFFFFである。
キャプチャ値が0xFFFFなので割り込みの発生時間が逆転している様に見えてしまいますが、ICUでキャプチャしたことの割り込みが受け付けられるまでに時間が掛かっているものと思います。
仕様上 FRTのゼロ検出割込みとICUのキャプチャ割込みとの時間規定がなく、デバイスに問題がある訳ではない(逆転している様に見えこともあり得る)との理解で正しいでしょうか?
> ゼロをまたいでいれば、ゼロ検出割込みの回数をカウントアップする。
> ゼロをまたいでいなければ、カウントアップしない。
またいでいることの判断は、システム設計による(ICUのキャプチャ割込みよりも高い優先順位の割り込みがある場合は0xFFFFよりも小さい値に見えることもあるなど)ので、一概に回答頂けるものではないとの理解で正しいでしょうか?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
どちらも正しく理解されています。
以上、宜しくお願い致します。
Nada
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
デバイス内部のタイミングについて、念のために確認させてください。
ご提示頂いた手順から、
「ICUが0xFFFFをキャプチャ」して「FRTのゼロ検出割込み」の後に「ICUの
キャプチャ割込み」が発生する場合、
「FRTのゼロ検出割込みでIPC0(IPC1)フィールド参照するタイミング」
よりも「IPC0(IPC1)フィールドが1になるタイミング」が遅れてしまうこと
はないものと理解しました。
正しいでしょうか?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
CPUに供給しているクロックとMFT(FRT)に供給しているクロックの間に
極端な差を付けている場合には、MFTが動作する前に
CPUがレジスタを参照してしまうことがあるかもしれません。
今回問題視している2つの割込み以外に、
割込みが発生していないとすると、
ICUが0xFFFFをキャプチャするタイミングが
もっとも厳しい条件になります。
お客様のクロック設定で評価されてみて、ICUが0xFFFFをキャプチャしている時に、
FRTのゼロ検出割り込みでIPCフィールドを参照して、
1になっていることを確認していただければ、問題ないと考えます。
以上、よろしくお願いいたします。
Nada