HOMEへ戻る

[新機能]WDT(ウォッチドッグタイマー)

●ZB10K〜ZB28KでBASICプログラムでコントロールできます(外付け回路不要)。

 ユーザープログラムをROM化して組込みボードとして使用中、まれにですがノイズなどによってプログラムが暴走してしまったり、プログラム上の理由で(たとえば異常データによる演算エラーなどで)、システムブレイクして停止してしまったり、ハングアップして応答不能になってしまうことがあります。
 ウォッチドッグタイマはユーザープログラムが停止するとそれを検出して自動的にボードをリセット(ソフトウェアリセット)して、再スタートさせる機能です。
 ZBKボードでは従来はボード上にはこの機能は無く、必要なユーザーには要望によりPICによる外付けのWDTとして供給してきました。
 今回システムを改良してZBKボードのみでこの機能を使えるようにしました。
 WDTとしてKL5C8012CPU内臓のタイマーカウンタB2を使用します。BASICプログラムの中で、WDTON命令を実行することにより、タイマーカウンタB2がWDTモードで起動します。それ以後はBASICプログラムの各命令が実行される度にシステムによってWDTのカウントクリアが実行されるため、BASICのユーザープログラムが正常に実行されている限りは、WDTはユーザープログラムに影響は与えません。しかし何らかの理由でBASICプログラムの実行が中止され、BASICの命令が実行されなくなるとそれ以後WDTカウンタはクリアされなくなるためダウンカウントを続け、約1.6秒後にOUTBP2端子からリセットパルスを出力します。WDT機能を使いたいユーザーはボード上のショートストラップ端子部分でOUTBP2とNMIを接続しておくことで、NMI(ノンマスカブルインタラプト)を利用したソフトウェアリセットルーチンを実行させ、ボードを強制的にリセットさせることができます。

 WDTONはBASICプログラムの適当なところ(通常はプログラムの先頭)に、次のように書きます。

10 WDTON

 WDTON命令の実行によって、タイマーカウンタB2はWDTモードになるため、以後ユーザーはタイマーカウンタB2(I/Oアドレス$24〜$25)を使用することはできません。またパラレルポートP30〜P33はOUTBP2出力に使用されるため、ユーザーは使用することができません。
 WDT機能をユーザープログラム中で一時停止したい時はWDTOFF命令を使います。

300 WDTOFF

のように書きます。これ以後タイマーカウンタB2はWDTモードから開放され、またP30〜P33をパラレルポートとして利用することが可能になります。NMI端子は内部的に入力から切り離されます。

[ウォッチドッグタイマの作動時間の変更]
 デフォルトではWDTがクリアされなくなってから、NMI割込みが発生するまでの時間は約1.6秒で、これが最大値です。この時間は特殊なシステム変数、WDT_%によって管理されていて、初期値は$FFFFです。この値は変更可能で、BASICプログラム中でWDTON命令よりも前に次のように値を設定することでWDTによりNMI割込みが発生するまでの時間を短縮することができます。

10 WDT_%=$8000:WDTON

 この例ではNMI発生までの時間は約0.8秒になります。
 WDT_%は下のようにPRINT文などで、値を確認することができます。

200 PRINT WDT_%;

HOMEへ戻る