avr-libc  2.0.0
Standard C library for AVR-GCC

AVR Libc Home Page

AVRs

AVR Libc Development Pages

Main Page

User Manual

Library Reference

FAQ

Example Projects

マクロ | 関数
<avr/wdt.h>: Watchdog timer 操作

マクロ

#define wdt_reset()   __asm__ __volatile__ ("wdr")
 
#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
 

関数

static __inline__ __attribute__ ((__always_inline__)) void wdt_enable(const uint8_t value)
 

説明詳細

#include <avr/wdt.h>

このヘッダファイルは、多くのAVRデバイス内のウォッチドッグタイマーを操作するインラインマクロのインタフェースを宣言しています。ウォッチドックタイマーの設定が、クラッシュしたアプリケーションにより誤って変更されるのを防ぐため、設定を変更するためには特別は手順が必要になります。このヘッダファイルに含まれるマクロは、値を変更する前に必要な手順を自動的に処理します。操作中は、割込みが無効になります。

注意
特定のデバイスのヒューズ設定では、さらに制限されることがあります。具体的には、ウォッチドッグタイマーをオフにすることが許可されない場合があります。

新しいデバイス(ATmega88以降の割込み生成をオプションで有効にできるAVR)では、ウォッチドッグタイマーが(電源投入の状態と関係なく)システムリセット後も有効であり、最も速いプリスケーラ値(約15ms)であることに注意してください。そのため、プログラムの起動時にウォッチドッグを早期にオフにする必要があり、データシートでは次の手順を推奨しています。

#include <stdint.h>
#include <avr/wdt.h>
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) \
__attribute__((naked)) \
__attribute__((section(".init3")));
void get_mcusr(void)
{
mcusr_mirror = MCUSR;
MCUSR = 0;
wdt_disable();
}

mcusr_mirrorにMCUSRの値を保存するのは、アプリケーションが後でリセット源を調べたいときのみです。特に、ウォッチドッグを無効にする前に、ウォッチドッグリセットフラグをクリアすることをデータシートで要求されています。

マクロ定義説明

#define wdt_reset ( )    __asm__ __volatile__ ("wdr")

ウォッチドッグタイマーのリセット。 ウォッチドッグタイマーが有効の時、タイマーの期限前にこの操作が呼び出されなければいけません。さもないと、ウォッチドッグによりデバイスがリセットされます。

#define WDTO_120MS   3

WDTO_15MSを参照

#define WDTO_15MS   0

ウォッチドッグタイムアウトのためのシンボリック定数。ウォッチドッグタイマーは、フリーランのRC発振器に基づくため、時間は概算になり、供給電源が5Vのときの値です。そのため、低い電圧では時間が増加します。新しいデバイス(例えば ATmega128、 ATmega8)ではわずかな変化ですが、古いデバイスにでは、Vcc = 3V 動作時の時間は3倍くらい長くなります。

設定できるタイムアウト値は次の通りです。15 ms、 30 ms、 60 ms、 120 ms、 250 ms、 500 ms、 1 s、 2 s (いくつかのデバイスでは、4s と 8s も可能)。シンボリック定数は、接頭辞が WDTO_で、その後に時間が続きます。

約500 msのウォッチドッグタイマを選択する例:

1 wdt_enable(WDTO_500MS);
#define WDTO_1S   6

WDTO_15MSを参照

#define WDTO_250MS   4

WDTO_15MSを参照

#define WDTO_2S   7

WDTO_15MSを参照

#define WDTO_30MS   1

WDTO_15MSを参照

#define WDTO_4S   8

WDTO_15MSを参照。 注意:つぎのデバイスでのみ使用できます。ATtiny2313, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861, ATmega48, ATmega88, ATmega168, ATmega48P, ATmega88P, ATmega168P, ATmega328P, ATmega164P, ATmega324P, ATmega644P, ATmega644, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega8HVA, ATmega16HVA, ATmega32HVB, ATmega406, ATmega1284P, AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, AT90PWM161, AT90USB82, AT90USB162, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATtiny48, ATtiny88.

#define WDTO_500MS   5

WDTO_15MSを参照

#define WDTO_60MS   2

WDTO_15MSを参照

#define WDTO_8S   9

WDTO_15MSを参照。 注意:つぎのデバイスでのみ使用できます。 ATtiny2313, ATtiny24, ATtiny44, ATtiny84, ATtiny84A, ATtiny25, ATtiny45, ATtiny85, ATtiny261, ATtiny461, ATtiny861, ATmega48, ATmega48A, ATmega48PA, ATmega88, ATmega168, ATmega48P, ATmega88P, ATmega168P, ATmega328P, ATmega164P, ATmega324P, ATmega644P, ATmega644, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega8HVA, ATmega16HVA, ATmega32HVB, ATmega406, ATmega1284P, ATmega2564RFR2, ATmega256RFR2, ATmega1284RFR2, ATmega128RFR2, ATmega644RFR2, ATmega64RFR2 AT90PWM1, AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B, AT90PWM216, AT90PWM316, AT90PWM81, AT90PWM161, AT90USB82, AT90USB162, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATtiny48, ATtiny88, ATxmega16a4u, ATxmega32a4u, ATxmega16c4, ATxmega32c4, ATxmega128c3, ATxmega192c3, ATxmega256c3.

関数説明

static __inline__ __attribute__ ( (__always_inline__)  ) const
static

タイムアウトの期限を設定し、ウォッチドッグタイマを有効にします。(WDP0からWDP2ビットを結合しWDTCRレジスタへ書き込みます。WDTCSRレジスタを持つデバイスには、WDP0からWDP3ビットを結合して使用します。)

WDTO_15MSなどのシンボリック定数を参照ください。