а#include <avr/sleep.h>
Использование команд sleep может позволить значительно уменьшать энергопотребление МК. МК AVR могут быть переведены в различные спящие режимы. Обратитесь к описанию используемого МК.
Чтобы
поместить МК
в спящий
режим в этом header файле
есть
несколько
макро. Самый
простой путь
состоит в
том, чтобы
произвольно
установить
использование
спящего
режима set_sleep_mode()
(обычно
значение по
умолчанию
спящего режима,
-а все
периферийные
часы все еще
выполняются),а затем
вызывается sleep_mode()
.
Если не стоит
цель
блокировать CPU аппаратно
(до
аппаратного
сброса),
прерывания в
этом пункте
нужно
разрешить.
Эта макрокоманда
автоматически
заботится,
чтобы
допустить
режиму бездействия
в CPU
перед
движением
бездействовать,
и отключать
его
впоследствии
снова.
Поскольку
эта
объединенная
макрокоманда
может
вызвать
условие
гонки в
небольшом количестве
ситуаций,
индивидуальные
шаги
управления бездействием
допускают (SE)
биту, и
фактически
издание sleep
команда
обеспечена в
макроопределении
sleep_enable()
, sleep_disable()
, and sleep_cpu()
.
Это также
учитывает
сценарии
испытания-бездействия,
которые
заботятся не
об
отсутствии
прерывания,
которое пробудит
устройство
от
бездействия.
Пример:
ааа #include <avr/interrupt.h>
ааа #include <avr/sleep.h>
ааа ...
ааааа cli();
ааааа if (some_condition)
аааааа {
ааааааа sleep_enable();
ааааааа sei();
ааааааа sleep_cpu();
ааааааа sleep_disable();
ааааа }
ааааа sei();
Эта
последовательность
гарантирует
атомное
испытание some
_
condition
с заблокируемыми
прерываниями.
Если условие
выполнено,
режим
бездействия
будет готов,
и SLEEP
команда
будет
намечена
немедленно
после команды
SEI. Как
инструкция
право после SEI как
гарантируют,
будет
выполнен
прежде, чем
прерывание
могло
вызвать, это
уверено, что
устройство
будет
действительно
помещаться,
чтобы
бездействовать.
Макроопределения Функций Сна. |
|
void |
set_sleep_mode (uint8_t
mode) |
void |
sleep_mode (void) |
void |
sleep_enable (void) |
void |
sleep_disable (void) |
void |
sleep_cpu (void) |
Спящие Режимы |
|
Примечание: Некоторые из этих способов не доступны на всех устройствах. См. datasheet для целевого устройства для доступных способов сна. |
|
#define |
|
#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)) |
( |
mode |
) |
|
Выбор
спящего
режима.
Устанавливает разряды регистра MCUCR для выбора "спящего"режима. Возможные значения для mode:
-а SLEEP_MODE_ADCа -а режимаа пониженногоаа шумаа от АЦП;
-а sleep_mode_EXT_standbyа -а расширенныйа режим ожидания;
-а SLEEP_MODE_IDLE - ждущий режим;
-а SLEEP_MODE_PWR_DOWN - режим пониженного энергонпотребления;
-а SLEEP_MODE_PWR_SAVE - режим энергосбережения;
-а SLEEP_MODE_STANDBY - режим ожидания.
Пример
использования:ааа set__sleep_mode (SLEEP_MODE_IDLE)
;
Переводит
МК в спящий
режим .
Бит SE должен
быть
установлен
заранее, и
рекомендуется
впоследствии
сбросить его.
Переводит
МК в "спящий"
режим. Выход
устройства
из этого
режима
зависит от
установки, вынполненной
с помощью
функции set_sleep_mode ().
Пример использования: set_sleep_mode (SLEEP_MODE_IDLE)
;
sleepа mode();