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