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

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

RL78/G16 CPUボートの試作(ウオッチドックタイマ)

 ウオッチドックタイマのテストプログラムを作成しました。

以下の資料を参考にしています。

資料1*1 、資料2*2、資料3*3

 

ウオッチドックタイマ

 RL78/G16 のウオッチドックタイマは、カウントを開始するとカウントがインクリメントされます。プログラムの暴走等により、想定時間内にリフレッシュできない場合、カンターがオーバフローし、リセット信号が発生し、再スタートします。

オーバフローの75%で割り込み信号が発生する、インターバル割り込み(INTWDTI)を使用して、割り込み内でのリフレッシュも可能です。

リフレッシュは、WDTE = 0xacで行います。

設定は、オプションバイトの0x000C0を使用します。

図1. ウオッチドックタイマの動作(メインループ内でリフレッシュ)

図2. ウオッチドックタイマの動作(インターバル割り込み内でリフレッシュ)

・ ウオッチドックタイマのカウントアップには、低速オンチップ・オシレータ・クロック(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 オンチップ・オシレータ特性])を考慮する必要があります。

図3. オプションバイトの設定例


 動作確認

オーバフロー時間を118msecに設定します。

リセット・コントロール・フラグ・レジスタ(RESF)(資料1. 「18.3.1 リセット・コントロール・フラグ・レジスタ(RESF)」)のビット4(WDTRF)(ウオッチドックタイマによる内部リセット要求)の0,1で判断します。

メインループ内でのリフレッシュ

1) 100msec待ち後に、ウオッチドックカウンタをクリアします。

図4. ウオッチドックタイマ オーバフロー発生しない

2) 200msec待ち後に、ウオッチドックカウンタをクリアします。

図5. ウオッチドックタイマ オーバフロー発生、リセット要求
 インターバル割り込み内でのリフレッシュ

 待ち時間を200[msec]としてインターバル割り込み内でリフレッシュします。インターバル割り込みは89[msec](=オーバフロー時間の75%)毎に発生します。

図6. ウオッチドックタイマ オーバフロー発生しない

ファイル一覧

・ メインループ内でリフレッシュ

図7. ファイル一覧(メインループ内でリフレッシュ)

登録場所: https://github.com/vABCWork/rl78_test_watch_dog

・インターバル割り込み内でリフレッシュ

図8. ファイル一覧(インターバル割り込み内でリフレッシュ)

登録場所: https://github.com/vABCWork/rl78_test_watch_dog_interval_timer

ディレイ処理

 ディレイ処理はコンパイラの最適化オプションで機械語が変化する場合があるため、アセンブラで作成しています。

高速オンチップオシレータ=16[MHz]用です。(1 clock = 1/(16[MHz]) = 0.0625[usec])

図9. ディレイ処理

図10. ディレイ処理 10 [msec]待ちの例

 

*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10

*2:資料2「CC-RL コンパイラ ユーザーズマニュアル」 Rev.1.13 2023.12

*3:資料3「RL78 ファミリ ユーザーズマニュアル ソフトウェア編」 Rev.2.30 2022.04