AKI-H8のウォッチドッグタイマの利用
Copyright(C)15Dec2003
coskx
1.はじめに
この文書はH8/3048におけるウォッチドッグタイマの利用を解説したものである。この内蔵タイマはタイマ割り込みとウォッチドッグタイマとして動作する。
ウォッチドッグタイマとは,一定時間内にカウンタをリセットしないとカウンタがオーバーフローし,その時CPUにリセットがかかるものである。プログラム中に一定時間内にカウンタリセット命令を埋め込んでおき,異常動作時にはカウンタがクリアされなくなるので,CPUリセットを起こすような使い方がされる。
プログラムのダウンロード
プログラムのダウンロード ウォッチドッグタイマ |
| |
プログラムのダウンロード タイマ割り込み |
|
2.ウォッチドッグタイマサンプルプログラム
制御プログラムが暴走すると危険なことがおこります。これをある程度防ぐ目的で監視するのがウォッチドッグタイマです。動作は単純で,8ビットカウンタがアップカウントし,オーバーフローしたらCPUがリセットされてしまうからくりです。プログラムが正常に動作している場合は,適当な間隔で,この8ビットカウンタをクリアするとオーバーフローしないので,CPUはリセットされることなく動作します。しかし,プログラムの不具合で8ビットカウンタをクリアしなくなると,オーバーフローが生じ,CPUがリセットされてしまいます。
サンプルプログラムでは無限ループ中で,カウンタをクリアしていますが,シリアル通信から1文字受け取ると,内部無限ループに落ち込み,カウンタをクリアを行なわなくなるため,オーバーフローが生じ,CPUがリセットされてしまいます。そして最初から再び動作します。
ウォッチドッグタイマ割り込みによるオーバーフローリセット |
/********************************************************** typedef union { /* WDT TCSR Byte Read Address*/ /*--------------------------------------------------
tcsr=WDT_TCSR_BREAD; main() |
ハイパーターミナルの実行時画面 |
***
Watchdog Timer Demonstration *** [ここで何かのキーが押された] [ここでタイマオーバフローが起こりCPU]がリセットされ初期表示に戻る] [ここで何かのキーが押された] [ここでタイマオーバフローが起こりCPU]がリセットされ初期表示に戻る] |
フォルダの内容
h8_3048fone.h サービス関数類
h8_3048fone.cmd
コンパイル&ゴーコマンド
h8_3048.sub
リンカスクリプト(リンカサブコマンド)
WDT_ResetDemo.c
サンプルプログラムのCソース
to_H8.ht
ハイパーターミナル設定ファイル
readme.txt
説明ファイル
3. タイマ割り込みサンプルプログラム
ウォッチドッグタイマを通常のタイマ割り込みに使うことも出来る。しかしオーバーフロー割り込みのみなので,周期を自由に設定できない。周期を自由に設定したい場合はITUのタイマー割り込みを用いると良い。
ウォッチドッグタイマ割り込みによってLEDのON-OFFを行う |
/********************************************************** typedef union { /*-------------------------------------------------- tcsr.BIT.TME=0;
/*タイマ・割り込みディスエイブル*/ void
startWatchdogTimer(void) main() #pragma asm #pragma
interrupt(watchdogTimerINT)/*この名前の関数は割込ルーチン仕様である*/ |
フォルダの内容
h8_3048fone.h
サービス関数類
h8_3048fone.cmd
コンパイル&ゴーコマンド
h8_3048.sub
リンカスクリプト(リンカサブコマンド)
WDT_IntervalTimerDemo.c
サンプルプログラムのCソース
to_H8.ht
ハイパーターミナル設定ファイル
readme.txt
説明ファイル