AVR Libc Home Page | ![]() |
AVR Libc Development Pages | ||
Main Page | FAQ | Library Reference | Additional Documentation | Example Projects |
#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 | |
| |
#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) |
|
アイドルモード |
|
ADCノイズ低減モード |
|
パワーダウンモード |
|
パワーセーブモード |
|
スタンバイモード |
|
拡張スタンバイモード |
|
スリープモードを選択する。 |
|
デバイスをスリープモードに突入させる。 SEビットはスリープの直前にセットし、スリープから戻るとすぐにクリアしなければなりません。 ※sleep_enable() と sleep_disable() で挟むこと! |
|
SE (sleep enable) bit をクリアして、スリープを無効にする |
|
SE (sleep enable) bit をセットして、スリープを有効にする |
|
0 |
デバイスをスリープモードにする。スリープモードから目覚める手段は、 set_sleep_mode() で設定したモードによって決まります。詳細はデータシートをお読みください。 |