AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page FAQ Library Reference Additional Documentation Example Projects

<avr/sleep.h>: Power Management and Sleep Modes


Detailed Description

 #include <avr/sleep.h>
SLEEP 命令の使用によりアプリケーションは消費電力をかなり削減することができます。AVRデバイスは複数のスリープモードを持ってiいます。詳細はデータシートを参照ください。
このヘッダファイルによりデバイスをスリープモードに突入させるためのマクロをいくつか提供しています。
最も単純な方法は、set_sleep_mode() で必要とされるスリープモードを設定し、その後sleep_mode()をコールすることです。スリープモードを指定しない場合のデフォルトはCPUだけスリープし他の機構は走り続けるアイドルモードです。
スリープモードは(ハードウェアリセットまで)CPUハードをロックしてしまうためのものではないので、スリープ終了・復帰のための割り込みも必要になります。
ここで提供するマクロは、スリープに入る直前に自動的にスリープモードを有効にするための処理を行い、スリープから脱した後に自動的にそれを解除します。※データシート上それが推奨されている。
複数のマクロに組み合わせは時に競合を引き起こすので、スリープ有効ビット(SE)の個々の操作、実際のSLEEPコマンドの発行などはマクロ sleep_enable()sleep_disable()sleep_cpu() として提供されます。これらのマクロは、スリープから起動するのに必要な割り込みを忘れずに有効にするのにも役立ちます。
Example:
    #include <avr/interrupt.h>
    #include <avr/sleep.h>

    ...
      cli();
      if (some_condition) {
        sleep_enable();
        sei();
        sleep_cpu();
        sleep_disable();
      }
      sei();
この例であげた手順、は割り込み禁止状態で実行され、分割されないことを保証します。
この状況に出会うと、スリープモードが準備され、SLEEP命令がSEI命令の直後に実行されます。SEI命令直後の命令は割り込みが起きていても割り込みより先に実行されることが保証されているので、確実に割り込み可の状態でスリープにはいることができます。

Sleep Modes

Note:
以下のモードのいくつかは全てのデバイスで使えるとは限りません。データシートを参照ください。


#define SLEEP_MODE_IDLE   0
#define SLEEP_MODE_ADC   _BV(SM0)
#define SLEEP_MODE_PWR_DOWN   _BV(SM1)
#define SLEEP_MODE_PWR_SAVE   (_BV(SM0) | _BV(SM1))
#define SLEEP_MODE_STANDBY   (_BV(SM1) | _BV(SM2))
#define SLEEP_MODE_EXT_STANDBY   (_BV(SM0) | _BV(SM1) | _BV(SM2))

Sleep Functions

void set_sleep_mode (uint8_t mode)
void sleep_mode (void)
void sleep_enable (void)
void sleep_disable (void)
void sleep_cpu (void)

Define Documentation

#define SLEEP_MODE_IDLE   0
 

アイドルモード

#define SLEEP_MODE_ADC   _BV(SM0)
  ADCノイズ低減モード
#define SLEEP_MODE_PWR_DOWN   _BV(SM1)
 

パワーダウンモード

#define SLEEP_MODE_PWR_SAVE   (_BV(SM0) | _BV(SM1))
 

パワーセーブモード

#define SLEEP_MODE_STANDBY   (_BV(SM1) | _BV(SM2))
  スタンバイモード
#define SLEEP_MODE_EXT_STANDBY   (_BV(SM0) | _BV(SM1) | _BV(SM2))
  拡張スタンバイモード

Function Documentation

void set_sleep_mode uint8_t  mode  ) 
  スリープモードを選択する。
void sleep_cpu void   ) 
  デバイスをスリープモードに突入させる。
SEビットはスリープの直前にセットし、スリープから戻るとすぐにクリアしなければなりません。
※sleep_enable() と sleep_disable() で挟むこと!
void sleep_disable void   ) 
  SE (sleep enable) bit をクリアして、スリープを無効にする
void sleep_enable void   ) 
  SE (sleep enable) bit をセットして、スリープを有効にする
void sleep_mode void   ) 

デバイスをスリープモードにする。スリープモードから目覚める手段は、 set_sleep_mode() で設定したモードによって決まります。詳細はデータシートをお読みください。
単なるasm("sleep"::)だけでなく、、直前にSEビットをセットしてスリープ可にして、スリープを抜けた直後にSEビットをクリアするコードを生成します。


Automatically generated by Doxygen 1.4.1 on 23 Jan 2006.