ウオッチドックタイマのテストプログラムを作成しました。
以下の資料を参考にしています。
ウオッチドックタイマ
RL78/G16 のウオッチドックタイマは、カウントを開始するとカウントがインクリメントされます。プログラムの暴走等により、想定時間内にリフレッシュできない場合、カンターがオーバフローし、リセット信号が発生し、再スタートします。
オーバフローの75%で割り込み信号が発生する、インターバル割り込み(INTWDTI)を使用して、割り込み内でのリフレッシュも可能です。
リフレッシュは、WDTE = 0xacで行います。
設定は、オプションバイトの0x000C0を使用します。
・ ウオッチドックタイマのカウントアップには、低速オンチップ・オシレータ・クロック(fIL=15kHz(TYP))を使用しています。低速オンチップ・オシレータは、オプション・バイト(000C0H)のビット4(WDTON)または、動作スピード・モード制御レジスタ(OSMC)のビット4(WUTMMCK0)のどちらか、または両方が1 のときに動作します。
・ 資料1の「21.2 ユーザ・オプション・バイトのフォーマット」の図21.1より、オバーフロー時間を選択します。マニュアルでは、fIL=17.25kHz(MAX)時のオーバフロー時間が記載されています。
・低速オンチップ・オシレータ (fIL)の精度が15kHz±15%(資料1 「26.2.2 オンチップ・オシレータ特性])を考慮する必要があります。
動作確認
オーバフロー時間を118msecに設定します。
リセット・コントロール・フラグ・レジスタ(RESF)(資料1. 「18.3.1 リセット・コントロール・フラグ・レジスタ(RESF)」)のビット4(WDTRF)(ウオッチドックタイマによる内部リセット要求)の0,1で判断します。
メインループ内でのリフレッシュ
1) 100msec待ち後に、ウオッチドックカウンタをクリアします。
2) 200msec待ち後に、ウオッチドックカウンタをクリアします。
インターバル割り込み内でのリフレッシュ
待ち時間を200[msec]としてインターバル割り込み内でリフレッシュします。インターバル割り込みは89[msec](=オーバフロー時間の75%)毎に発生します。
ファイル一覧
・ メインループ内でリフレッシュ
登録場所: https://github.com/vABCWork/rl78_test_watch_dog
・インターバル割り込み内でリフレッシュ
登録場所: https://github.com/vABCWork/rl78_test_watch_dog_interval_timer
ディレイ処理
ディレイ処理はコンパイラの最適化オプションで機械語が変化する場合があるため、アセンブラで作成しています。
高速オンチップオシレータ=16[MHz]用です。(1 clock = 1/(16[MHz]) = 0.0625[usec])