AVR Libc Home Page | ![]() |
AVR Libc Development Pages | ||
Main Page | FAQ | Library Reference | Additional Documentation | Example Projects |
#include <avr/wdt.h>
このヘッダファイルは、多くのAVRデバイスに装備されているウォッチドッグタイマー(以後WDT)を取り扱うための、いくつかのインラインマクロを提供しています。
暴走するプログラムが偶然にウォッチドッグタイマーの設定をキャンセルしてしまわないように、設定変更には特別なタイムシーケンスが要求されています。このヘッダファイル内のマクロは、設定変更の前に行うべき要求される手順を自動的に行います。この操作の間、割り込みは禁止されます。
#include <stdint.h> #include <avr/wdt.h> uint8_t mcusr_mirror; void get_mcusr(void) \ __attribute__((naked)) \ __attribute__((section(".init3"))); void get_mcusr(void) { mcusr_mirror = MCUSR; MCUSR = 0; wdt_disable(); }
MCUCR値を mcusr_mirror
に待避するのは、あとでリセット原因をチェックするためにリセット時のMCUCR値を知りたい場合に必要となります。しかし、データシートによると、WDTリセットフラグのクリアはWDT禁止の前に行うことが要求されています。※先頭にwdt_reset()を入れるべきと言うことか??
Defines | |
#define | wdt_reset() __asm__ __volatile__ ("wdr") |
#define | wdt_disable() |
#define | wdt_enable(timeout) _wdt_write(timeout) |
#define | WDTO_15MS 0 |
#define | WDTO_30MS 1 |
#define | WDTO_60MS 2 |
#define | WDTO_120MS 3 |
#define | WDTO_250MS 4 |
#define | WDTO_500MS 5 |
#define | WDTO_1S 6 |
#define | WDTO_2S 7 |
#define | WDTO_4S 8 |
#define | WDTO_8S 9 |
|
Value: 可能なら(ヒューズ設定で禁止されていなければ)ウォッチドッグタイマーを無効にします。WDTCRレジスタのWDEビットのクリアを試みます。詳細はデータシート参照。 |
|
ウォッチドッグタイマーを有効にして、 timeout値と時間の関係についてはデータシート参照。便利なシンボリック定数
|
|
ウォッチドッグタイマーをリセットします。ウォッチドッグタイマーが有効なときは、この命令の呼び出しはタイマが時間切れになる前に行って下さい。さもないとウォッチドッグリセットがかかります。 |
|
ウォッチドッグタイムアウト値のためのシンボリック定数です。ウォッチドッグタイマーはRC発振器で出来ているため、この時間の値(ここでは15msec)は、Vcc=5Vの時のみ適用できます。より低い電源電圧では、タイムアウト時間はもう少し長くなります。旧AVRデバイスについては、Vcc=3Vの時はタイムアウト時間は3倍に延びますが、新しいデバイス(ATmega8,mega128など)では、無視できる程度の変化になります。 設定可能なタイムアウト時間は 15 ms, 30 ms,
60 ms, 120 ms, 250 ms, 500 ms, 1 s, 2 s,
(一部のデバイスで 4s, 8s ) です。 例えば、ウォッチドッグタイマータイムアウト時間が約500msecの設定は以下のようになります。 wdt_enable(WDTO_500MS); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note: この設定は以下のデバイスでのみ利用可能です。 |
|
Note: この設定は以下のデバイスでのみ利用可能です。 |