AVR Libc Home Page | AVR Libc Development Pages | ||||
Main Page | User Manual | Library Reference | FAQ | Alphabetical Index | Example Projects |
関数 | |
void | sleep_enable (void) |
void | sleep_disable (void) |
void | sleep_cpu (void) |
#include <avr/sleep.h>
SLEEP
命令の使用は、かなりのアプリケーションの電力消費を削減できます。AVRデバイスは、異なるスリープモードに入ることができる。あなたが使用しているデバイスに関する詳細はデータシートを参照ください。
実際にデバイスをスリープモードにするために、このヘッダファイルではいくつかのマクロを提供している。最も簡単な方法は、set_sleep_mode()
を使い希望するスリープモードを任意に設定し、sleep_mode()
を呼び出すことです(idle mode に通常なり、CPUがスリープし周辺回路のクロックは動作する)。このマクロは自動的にスリープ許可ビットをセットして、スリープになり、そしてスリープ許可ビットをクリアします。
例:
#include <avr/sleep.h>
...
set_sleep_mode(<mode>);
sleep_mode();
注意として、CPUの完全なロック(ハードウェアによるリセットまで)が目的でない限り、スリープになる前に割込みが許可される必要があります。
sleep_mode()
マクロは、いくつかの状況で競合が発生するかもしれませんが、それぞれの動作のステップは、(SE)ビットを許可し、SLEEP命令を実際に実行することを、sleep_enable()
、sleep_disable()
とsleep_cpu()
マクロ中で提供します。このことで、スリープからデバイスが起動する割込みを欠かさないよう取り扱うテスト&スリープ計画が可能になります。
例:
#include <avr/interrupt.h> #include <avr/sleep.h> ... set_sleep_mode(<mode>); cli(); if (some_condition) { sleep_enable(); sei(); sleep_cpu(); sleep_disable(); } sei();
このシーケンスは、some_condition
の小さなテストにおいて、割込みを無効にします。条件が満たされれば、スリープモードが準備され、SEI
命令の後すぐSLEEP
命令がスケジュールされます。 SEI
直後の対応は、割込みが入る可能性がある前に実行されることが保証されることで、デバイスは確実にスリープになります。
いくつかのデバイスは、スリープになる前に低電圧検出器(BOD:Brown Out Detector)を無効にする機能があります。これはまた、スリープ時の消費電力を削減します。この機能がある特定のAVRデバイスでは、sleep_bod_disable()
マクロが定義されています。このマクロは、スリープする前にBODの無効化を時系列で正しく実装されたインラインアセンブラコードを生成します。しかし、BODを無効にしてデバイスがスリープするには決められたサイクルがあり、それ以外ではBODを本当に無効にできません。おすすめの方法は、次のようにBODを無効(sleep_bod_disable()
)にして、割込み許可(sei()
)し、デバイスをスリープ(sleep_cpu()
)にします。
#include <avr/interrupt.h> #include <avr/sleep.h> ... set_sleep_mode(<mode>); cli(); if (some_condition) { sleep_enable(); sleep_bod_disable(); sei(); sleep_cpu(); sleep_disable(); } sei();
void sleep_cpu | ( | void | ) |
デバイスをスリープモードにする。SEビットは、前もって設定されなければならない。そして、その後クリアにすることが推奨される。
void sleep_disable | ( | void | ) |
SE (sleep 許可)ビットをクリア。
void sleep_enable | ( | void | ) |
デバイスをスリープモードにする。デバイスがスリープモードから出る方法は、set_sleep_mode()関数で設定した特定のモードに依存する。さらに詳しくはデバイスのデータシートを参照。
SE (sleep 許可)ビットを設定。