ウオッチドックタイマを使用すると、プログラムが何らかの原因で停止(無限ループ)した際にマイコンを再起動することができます。ウオッチドックタイマ用のテストプログラムを作成しました。
ウオッチドックタイマ
動作
本CPUのウオッチドックタイマはカウントを開始すると、初期値から1ずつ値が減少します。プログラムが正常に動作して想定時間以内にリフレッシュすれば、カウント値は初期値に戻りアンダーフローにはなりません。異常動作を起こし想定時間以内にリフレッシュできない場合、カウンタはアンダーフローとなりリセット信号が発生し再起動します。
ウィンドウ機能
処理1の「遅れ」異常の場合には上記で異常検知できますが、「早まり」異常となった場合は、リフレッシュされるので異常を検出できません。このためウィンドウ機能の開始位置を適切に設定し、リフレッシュできる期間を設定します。もしウィンドウ開始位置の前でリフレッシュが発生した場合は、リセットします。
独立ウオッチドックタイマ (Independent Watch Dog Timer)
本CPUのウオッチドックタイマは、プログラムの動作と別なクロックで動作する、独立ウオッチドックタイマ(IWDT)です。 専用オンチップオシレータの起動が必要です。
動作開始モード
ウオッチドックタイマのカウントを開始するモードには「オートスタートモード」と「レジスタスタートモード」があります。
オプション機能選択レジスタ0 (OFS0) のbit1(IWDTSTRT) = 0の場合、「オートスタートモード」となります。OFS0 レジスタで設定します。リセット後、自動的にカウントが開始されます。bit1(IWDTSTRT)=1の場合「レジスタスタートモード」でIWDTレジスタで設定します。
テスト
レジスタスタートモード、アンダーフロー、NMI割り込み
正常に動作しているプログラムを異常にすることは難しいので、正常タスク(100msec 待ち)と異常タスク(遅れ)(150 msec 待ち)を用意します。最初に正常タスクを2つ実行し、ALM3のLEDが点滅する事を確認します。(正常動作)
次に正常タスクと異常タスクを実行します。異常タスクが入ると、ウオッチドックタイマによりアンダーフローとなり、NMI割り込みが発生します。NMI割り込み処理ルーチン内で、ALM4のLEDを点灯します。タイムアウト時間を136.5msecとします。
レジスタスタートモード、アンダーフロー、リセット
最初に正常タスクを2つ実行し、ALM3のLEDが点滅する事を確認します。(正常動作)
異常タスクが入ると、ウオッチドックタイマによりアンダーフローとなり、RESETが発生します。独立ウオッチドックタイマによるリセットが発生すると、(SYSTEM.RSTSR2.BIT.IWDTRF = 1)となります。リセット解除後の再起動でこのフラグが1ならば、ALM4のLEDを点灯します。タイムアウト時間を136.5msecとします。
オートスタートモード、アンダーフロー、リセット
最初に正常タスクを2つ実行し、ALM3のLEDが点滅する事を確認します。(正常動作)
異常タスクが入ると、ウオッチドックタイマによりアンダーフローとなり、RESETが発生します。独立ウオッチドックタイマによるリセットが発生すると、(SYSTEM.RSTSR2.BIT.IWDTRF = 1)となります。リセット解除後の再起動でこのフラグが1ならば、ALM4のLEDを点灯します。オードスタートモードでは、オプション機能選択レジスタ0(OFS0)の設定を使用します。
・オプション機能選択レジスタ0(OSF0: FFFF FF8Ch)へのデータ設定(except_vecttbl.c)
オートスタートモード、リフレッシュエラー、リセット
正常タスク(100msec 待ち)と異常タスク(早まり)(50 msec 待ち)を用意します。
タイムアウト時間を136.5msecとします。ウインドウ開始位置を50%、終了位置を0%とします。タスクが正常(68~136msecの範囲で実行)であれば、リフレッシュ許可内でリフレッシュされます。異常(早まり 50msec)の場合、ウインドウ開始位置前にリフレッシュされるため、リフレッシュエラーとなります。リフレッシュエラーにより、リセットされます。一度、独立ウオッチドックタイマによるリセットが発生すると、(SYSTEM.RSTSR2.BIT.IWDTRF = 1)となります。リセット解除後の再起動でこのフラグが1ならば、ALM4のLEDを点灯します。
オプション機能選択レジスタ0(OSF0: FFFF FF8Ch)へのデータ設定(except_vecttbl.c)
ファイル一覧
ファイル一覧は各テスト共通です。
登録場所:
レジスタスタートモード、アンダーフロー、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倍となるので、実際の時間でウオッチドックが働きません。
*1:資料1「RX23E-Aグループ ユーザーズマニュアル ハードウェア編 ( R01UH0801JJ0120 Rev.1.20)」
*2:資料2「FAQ 1006640 : ウォッチドッグ・タイマの基本」 https://ja-support.renesas.com/knowledgeBase/17796064