AKI-H8のウォッチドッグタイマの利用
自分でスタートアップおよび割り込みベクタテーブルを管理する中級者向け
(cygwin+GCC)
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]がリセットされ初期表示に戻る] |
フォルダの内容
3048F.H
レジスタ定義
h8gcc.cmd
コンパイル&ゴーコマンド
h8_3048.h
サービス関数類
h8_3048f.x
リンカスクリプ
n-h8w.exe
フラッシュライタ
readme.txt
このファイル
startup.S
スタートアップルーチ
to_H8.ht
ハイパーターミナル設定ファイル
WDT_ResetDemo.c
サンプルプログラムのCソース
3. タイマ割り込みサンプルプログラム
ウォッチドッグタイマを通常のタイマ割り込みに使うことも出来る。しかしオーバーフロー割り込みのみなので,周期を自由に設定できない。周期を自由に設定したい場合はITUのタイマー割り込みを用いると良い。
ウォッチドッグタイマ割り込みによってLEDのON-OFFを行う |
/********************************************************** typedef union { /*-------------------------------------------------- tcsr.BIT.TME=0;
/*タイマ・割り込みディスエイブル*/ void
startWatchdogTimer(void) main() /*ウォッチドグタイマ割り込み関数*/ |
フォルダの内容
3048F.H
レジスタ定義
h8gcc.cmd
コンパイル&ゴーコマンド
h8_3048.h
サービス関数類
h8_3048f.x
リンカスクリプ
n-h8w.exe
フラッシュライタ
readme.txt
このファイル
startup.S
スタートアップルーチ
to_H8.ht
ハイパーターミナル設定ファイル
WDT_IntervalTimerDemo.c
サンプルプログラムのCソース