60歳からの電子工作ノート

生涯学習として取り組んでいます。

新ペルチェ制御用ボードの試作(ウオッチドックタイマ)

ウオッチドックタイマを使用すると、プログラムが何らかの原因で停止(無限ループ)した際にマイコンを再起動することができます。ウオッチドックタイマ用のテストプログラムを作成しました。

次の資料を参考にしています。資料1*1、資料2 *2

 

ウオッチドックタイマ

動作

 本CPUのウオッチドックタイマはカウントを開始すると、初期値から1ずつ値が減少します。プログラムが正常に動作して想定時間以内にリフレッシュすれば、カウント値は初期値に戻りアンダーフローにはなりません。異常動作を起こし想定時間以内にリフレッシュできない場合、カウンタはアンダーフローとなりリセット信号が発生し再起動します。

図1. ウオッチドックタイマの動作(プログラムの正常時と異常時)
ウィンドウ機能

処理1の「遅れ」異常の場合には上記で異常検知できますが、「早まり」異常となった場合は、リフレッシュされるので異常を検出できません。このためウィンドウ機能の開始位置を適切に設定し、リフレッシュできる期間を設定します。もしウィンドウ開始位置の前でリフレッシュが発生した場合は、リセットします。

図2. ウオッチドックタイマの動作(ウィンドウ機能)
独立ウオッチドックタイマ (Independent Watch Dog Timer)

本CPUのウオッチドックタイマは、プログラムの動作と別なクロックで動作する、独立ウオッチドックタイマ(IWDT)です。 専用オンチップオシレータの起動が必要です。

図3. 独立ウオッチドックタイマの起動

動作開始モード

ウオッチドックタイマのカウントを開始するモードには「オートスタートモード」と「レジスタスタートモード」があります。 

オプション機能選択レジスタ0 (OFS0) のbit1(IWDTSTRT) = 0の場合、「オートスタートモード」となります。OFS0 レジスタで設定します。リセット後、自動的にカウントが開始されます。bit1(IWDTSTRT)=1の場合「レジスタスタートモード」でIWDTレジスタで設定します。

図4. IWDT設定用のレジスタ

図5. IWDT開始条件と動作

テスト

レジスタスタートモード、アンダーフロー、NMI割り込み

 正常に動作しているプログラムを異常にすることは難しいので、正常タスク(100msec 待ち)と異常タスク(遅れ)(150 msec 待ち)を用意します。最初に正常タスクを2つ実行し、ALM3のLEDが点滅する事を確認します。(正常動作)

次に正常タスクと異常タスクを実行します。異常タスクが入ると、ウオッチドックタイマによりアンダーフローとなり、NMI割り込みが発生します。NMI割り込み処理ルーチン内で、ALM4のLEDを点灯します。タイムアウト時間を136.5msecとします。

図6. タイムアウト時間の設定

図7. レジスタスタート、アンダーフロー、NMI割り込み
レジスタスタートモード、アンダーフロー、リセット

 最初に正常タスクを2つ実行し、ALM3のLEDが点滅する事を確認します。(正常動作)

異常タスクが入ると、ウオッチドックタイマによりアンダーフローとなり、RESETが発生します。独立ウオッチドックタイマによるリセットが発生すると、(SYSTEM.RSTSR2.BIT.IWDTRF = 1)となります。リセット解除後の再起動でこのフラグが1ならば、ALM4のLEDを点灯します。タイムアウト時間を136.5msecとします。

図8. レジスタスタートモード、アンダーフロー、リセット
オートスタートモード、アンダーフロー、リセット

 最初に正常タスクを2つ実行し、ALM3のLEDが点滅する事を確認します。(正常動作)

異常タスクが入ると、ウオッチドックタイマによりアンダーフローとなり、RESETが発生します。独立ウオッチドックタイマによるリセットが発生すると、(SYSTEM.RSTSR2.BIT.IWDTRF = 1)となります。リセット解除後の再起動でこのフラグが1ならば、ALM4のLEDを点灯します。オードスタートモードでは、オプション機能選択レジスタ0(OFS0)の設定を使用します。

・オプション機能選択レジスタ0(OSF0: FFFF FF8Ch)へのデータ設定(except_vecttbl.c)

図9. OFS0への設定

図10. オードスタートモード、アンダーフロー、リセット

オートスタートモード、リフレッシュエラー、リセット

 正常タスク(100msec 待ち)と異常タスク(早まり)(50 msec 待ち)を用意します。
タイムアウト時間を136.5msecとします。ウインドウ開始位置を50%、終了位置を0%とします。タスクが正常(68~136msecの範囲で実行)であれば、リフレッシュ許可内でリフレッシュされます。異常(早まり 50msec)の場合、ウインドウ開始位置前にリフレッシュされるため、リフレッシュエラーとなります。リフレッシュエラーにより、リセットされます。一度、独立ウオッチドックタイマによるリセットが発生すると、(SYSTEM.RSTSR2.BIT.IWDTRF = 1)となります。リセット解除後の再起動でこのフラグが1ならば、ALM4のLEDを点灯します。

 

図11. リフレッシュエラー

 

オプション機能選択レジスタ0(OSF0: FFFF FF8Ch)へのデータ設定(except_vecttbl.c)

図12. OFS0への設定(ウィンドウ開始位置あり)

図13. オードスタートモード、リフレッシュエラー、リセット

ファイル一覧

ファイル一覧は各テスト共通です。

図14. ファイル一覧(共通)

登録場所:

レジスタスタートモード、アンダーフロー、NMI割り込み:

https://github.com/vABCWork/test_IWDT_Reg_Underflow_NMI

レジスタスタートモード、アンダーフロー、リセット:

https://github.com/vABCWork/test_IWDT_Reg_Underflow_Reset

オートスタートモード、アンダーフロー、リセット:

https://github.com/vABCWork/test_IWDT_Auto_Underflow_Reset

オートスタートモード、リフレッシュエラー、リセット:

https://github.com/vABCWork/test_IWDT_Auto_RefreshError_Reset

 

補足

 独立ウオッチドックタイマは、プルグラム実行用の発振器と独立しているので、プルグラム実行用の発振器が異常となった場合でも影響なく動作します。例えば、何かの原因でプログラム実行用の発振器の周波数が1/2となった場合でも、ウオッチドックタイマは正常の周波数で動作しているので、異常を検出できます。これに対してプログラム実行用とウオッチドックが同一の発振器を使用した場合、故障するとウオッチドックもカント間隔が2倍となるので、実際の時間でウオッチドックが働きません。

図15. 独立ウオッチドックタイマの効果

*1:資料1「RX23E-Aグループ ユーザーズマニュアル ハードウェア編 ( R01UH0801JJ0120 Rev.1.20)」

*2:資料2「FAQ 1006640 : ウォッチドッグ・タイマの基本」 https://ja-support.renesas.com/knowledgeBase/17796064