AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page User Manual Library Reference FAQ Alphabetical Index Example Projects

定義

<avr/wdt.h>: Watchdog timer 操作

定義

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

詳しい説明

 #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_disable (  )
Value:
__asm__ __volatile__ (  \
    "in __tmp_reg__, __SREG__" "\n\t" \
     "cli" "\n\t" \
    "out %0, %1" "\n\t" \
    "out %0, __zero_reg__" "\n\t" \
    "out __SREG__,__tmp_reg__" "\n\t" \
    : /* no outputs */ \
    : "I" (_SFR_IO_ADDR(_WD_CONTROL_REG)), \
    "r" ((uint8_t)(_BV(_WD_CHANGE_BIT) | _BV(WDE))) \
    : "r0" \
)

ウォッチドッグタイマを可能なら不可にします。ウォッチドッグタイマ制御レジスタの許可ビットをオフへ試みます。詳細はデータシートを参照してください。

#define wdt_enable (   value )
Value:
__asm__ __volatile__ (  \
        "in __tmp_reg__,__SREG__" "\n\t"    \
        "cli" "\n\t"    \
        "wdr" "\n\t"    \
        "out %0,%1" "\n\t"  \
        "out __SREG__,__tmp_reg__" "\n\t"   \
        "out %0,%2" \
        : /* no outputs */  \
        : "I" (_SFR_IO_ADDR(_WD_CONTROL_REG)), \
        "r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)),   \
        "r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \
            _BV(WDE) | (value & 0x07)) ) \
        : "r0"  \
    )

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

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

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

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

#define WDTO_120MS   3

WDT0_15MS を参照

#define WDTO_15MS   0

ウォッチドッグタイムアウトのための象徴的な定数。ウォッチドッグタイマは、自由動作のRC発信器に基づくため、時間は概算で、5Vの供給電圧のときに当てはまる。そのため、低い電圧では、時間は増加する。新しいデバイス(例えば ATmega128, ATmega8)にはわずかな変化だが、古いデバイスにとっては、Vcc = 3 V 動作時の時間は3倍くらい大きくなる。

可能性のあるタイムアウトの値は次の通りである: 15 ms, 30 ms, 60 ms, 120 ms, 250 ms, 500 ms, 1 s, 2 s。 (いくつかのデバイスでは、4 s と 8 s を考慮に入れる。) 象徴的な定数は、接頭辞がWDTO_により作られ、その後に時間が続く。

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

#define WDTO_1S   6

WDT0_15MS を参照

#define WDTO_250MS   4

WDT0_15MS を参照

#define WDTO_2S   7

WDT0_15MS を参照

#define WDTO_30MS   1

WDT0_15MS を参照

#define WDTO_4S   8

WDT0_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, AT90USB82, AT90USB162, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATtiny48, ATtiny88.

#define WDTO_500MS   5

WDT0_15MS を参照

#define WDTO_60MS   2

WDT0_15MS

#define WDTO_8S   9

WDT0_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, AT90USB82, AT90USB162, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287, ATtiny48, ATtiny88.


Automatically generated by Doxygen 1.7.2 on Wed Feb 16 2011.

翻訳更新:2012年4月8日 by cega