- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
Psoc4000SシリーズにてWDTの動作を確認しておりますがわからないことがあるので教えて下さい。
ClockのLow Frequency Clocksの設定を下記のようにしています。
Mode Watchdog(w/Interrupt)
Period 819.2ms
プログラムは下記のようにしております。
#include <project.h>
#define LO (0)
#define HI (1)
void InitializeSystem(void)
{
/* Enable Global Interrupt Mask */
CyGlobalIntEnable;
}
int main (void)
{
/* Start the components */
InitializeSystem();
Pin_Enable0_Write(HI);
for(;;)
{
}
}
オシロでPin_Enable0ポートを観測すると0になるのでWDTが効いていると思っております。
聞きたいのはWDTがかかるタイミングについてです。
Period WDTがかかる時間
819.2ms 1400.0ms
409.6ms 740.0ms
1600.0ms 2720.0ms
上記のような関係にありますが資料でWDTはカウントアップが3回目にRESETされると読みました。
819.2msに設定した場合、819.2ms*3で2457.6ms後にRESETされるのではないのでしょうか?
1400.0ms後にRESETされるのは何故なのでしょうか?
宜しくお願い致します。
解決済! 解決策の投稿を見る。
- ラベル:
-
PSoC 4 MCU
- タグ:
- wdt
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
本件では、Periodが819.2msとして設定されているおり、以下の通り
819.2ms = 1/40kHz * 2^x
x=15bit
15bit カウンターとして動作します。15bitカウンターは1周期あたりのカウント数が32768 です。
2^15 = 32768 count = 819.2ms
ここで現状の設定について整理すると、以下のようになります。
- 1周期にかかる時間 = 819.2ms
- 1周期のカウント数 = 32768 count (15bit counter)
- WDT Match value = 4096
(※1周期で1~32768回カウントが行われ、そのカウント値が4096になったときにはinterruptが発生する。3回目のinterruptでWDT Resetが行われる)
WDT Reset (Count) : 32768(1周目) + 32768(2周目) + 4096(3回目のinterruptまで)
WDT Reset (Time) : 819.2ms + 819.2ms + 819.2ms * 4096/32768 = 1740.8ms
計測いただいた時間と本来WDT Resetまでにかかる時間の誤差は、1740.8-1400=340.8つまり0.3408sとなります。
したがって、本来WDTのcountが開始された0.3408s後に計測が開始されている可能性が考えられます。
現状として、どの時点で計測を開始しているのか定かではありませんが、
これらについてさらに検証する必要がある場合は、計測が開始した時点で現在のCount値を取得してみてください。WDT 開始から0.3408s 後は13632 count (340.8 = 819.2*x/32768)です。取得したカウント値が13632に近い数字であるか確認するといった方法も可能です。
しかし、ILO自体もとより精度の高いClockではないため、その点についてはご了承ください。
Infineon Technologies
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
お示しのPeriodと計測時間についてですが、どのように確認が行われましたでしょうか。
加えて、Match Valueなどは設定されておりますでしょうか。
WDTの動作については、PSoC® 4000 ファミリのウォッチドッグタイマについて - KBA91373を参照してください。
Infineon Technologies
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
御回答ありがとうございます。
計測時間はオシロでPin_Enable0がLOWになる間隔の時間を測定しております。
Match Valueは設定しておりません。プログラムで読み出したところ0x1000でした。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
WDTカウンターは基本16ビットカウンタ(Ignore bit = 0であるとき)、つまり65535カウントを1周期とし、カウント数がMatch valueとして指定されている値に達したときに、割り込み処理が発生します。そして3回目のその割り込みが発生するとWDTがリセットされます。
Match value = 0x1000(4096)はデフォルト値です。
上記のWDTの動作については以下のドキュメントに記載がございますので、今一度ご確認いただければと思います。
PSoC® 4000 ファミリのウォッチドッグタイマについて - KBA91373
PSoC® 4000S ファミリPSoC4 アーキテクチャTRM (11. ウォッチドックタイマー)
Infineon Technologies
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
LFCKが動作するタイミングでカウントも開始するため、今回計測を開始するタイミングがカウントの開始時より少し遅れており、WDTリセットまでの計測時間に数秒のずれが生じているものだと考えます。
Infineon Technologies
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
御回答ありがとうございます。
最初の投稿で使用したソフトを記載させて頂きましたがイニシャルでCyGlobalIntEnableを行い
main処理では観測用のPin_Enable0をHIGHにして無限ループしているだけなので「今回計測を
開始するタイミングがカウントの開始時より少し遅れており」というのは考えにくいと思いま
すが如何でしょうか?
色々調べている中で私の投稿と同じような投稿を見つけました。英語があまり得意ではないので
すが ILO trimming と言っておりますが関係ありますでしょうか?
途中で終わっており結論が出てないように見えるのが残念です。
下記のURLになります。
https://community.cypress.com/t5/PSoC-4-MCU/PSoC4S-Reset-process-by-WDT/m-p/276380
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
main()に入る前からILOは動作しています。したがって、main()に入る時点ではカウントもすでに開始されています。加えて、InterruptはILOの動作開始には関係しません。
上記でご提示の投稿内容については、“ILOは精度が低いため、正確に計測したいのであればILO trimmingで精度を上げるという手段もある“といった内容です。
しかし、今回投稿いただいている問題に関しては、実施いただいている手法自体に問題があると考えます。WDTリセットまでの時間は、設定をもとに計算によって把握することが可能です。(式についてはPSoC® 4000 ファミリのウォッチドッグタイマについて - KBA91373をご参照ください)
現時点でご提示いただいている分の設定とILOの精度を鑑みて、数秒計測がおくれているものと仮定すると、WDTリセットの時間について大きな誤差は発生していないと考えられます。
Infineon Technologies
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
御回答ありがとうございます。
>main()に入る前からILOは動作しています。したがって、main()に入る時点ではカウントもすで
>に開始されています。加えて、InterruptはILOの動作開始には関係しません。
回答内容理解致しました。
InterruptがILO開始動作についてついて影響していないのは理解しております。
現状のイニシャル処理が記載したのですがそれが紛らわしかったですね。
>上記でご提示の投稿内容については、“ILOは精度が低いため、正確に計測したいのであれば
>ILO trimmingで精度を上げるという手段もある“といった内容です。
御回答よりこれについては余り影響がないと思って宜しいでしょうか?
>しかし、今回投稿いただいている問題に関しては、実施いただいている手法自体に問題がある
>と考えます。
「手法自体に問題がある」というのは実際にはどのような問題になりますでしょうか?
御指摘頂けると助かります。
>WDTリセットまでの時間は、設定をもとに計算によって把握することが可能です。(式については
>PSoC® 4000 ファミリのウォッチドッグタイマについて - KBA91373をご参照ください)
見ているのですがよくわかりません。
実際に計算がどのようになるか実例をあげて教えて頂くことは可能でしょうか?
>現時点でご提示いただいている分の設定とILOの精度を鑑みて、数秒計測がおくれているものと
>仮定すると、WDTリセットの時間について大きな誤差は発生していないと考えられます。
プログラムは提示しているのが全てになります。
顧客に提案するにあたりWDTの検証が必要になるのですが何か良い方法(例えば、サンプル
プログラムなど)ありませんか?
819.2msの設定をした時に1400.0msでRESETがかかることが論理的に説明出ればいいのです
が。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
本件では、Periodが819.2msとして設定されているおり、以下の通り
819.2ms = 1/40kHz * 2^x
x=15bit
15bit カウンターとして動作します。15bitカウンターは1周期あたりのカウント数が32768 です。
2^15 = 32768 count = 819.2ms
ここで現状の設定について整理すると、以下のようになります。
- 1周期にかかる時間 = 819.2ms
- 1周期のカウント数 = 32768 count (15bit counter)
- WDT Match value = 4096
(※1周期で1~32768回カウントが行われ、そのカウント値が4096になったときにはinterruptが発生する。3回目のinterruptでWDT Resetが行われる)
WDT Reset (Count) : 32768(1周目) + 32768(2周目) + 4096(3回目のinterruptまで)
WDT Reset (Time) : 819.2ms + 819.2ms + 819.2ms * 4096/32768 = 1740.8ms
計測いただいた時間と本来WDT Resetまでにかかる時間の誤差は、1740.8-1400=340.8つまり0.3408sとなります。
したがって、本来WDTのcountが開始された0.3408s後に計測が開始されている可能性が考えられます。
現状として、どの時点で計測を開始しているのか定かではありませんが、
これらについてさらに検証する必要がある場合は、計測が開始した時点で現在のCount値を取得してみてください。WDT 開始から0.3408s 後は13632 count (340.8 = 819.2*x/32768)です。取得したカウント値が13632に近い数字であるか確認するといった方法も可能です。
しかし、ILO自体もとより精度の高いClockではないため、その点についてはご了承ください。
Infineon Technologies
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご回答ありがとうございます。
御回答頂いた内容をもとに検討してみます。