Вопрос о библиотеке с низким энергопотреблением

Я изучаю библиотеку Low-Power, чтобы лучше понять, как она работает.
В этой части кода у меня есть вопрос.

Иногда он использует такие команды, как:

power_timer1_disable();
power_timer0_disable();

но в другой части кода, например "TIMER2_OFF":

if (TCCR2B & CS22) clockSource |= (1 << CS22);
if (TCCR2B & CS21) clockSource |= (1 << CS21);
if (TCCR2B & CS20) clockSource |= (1 << CS20);

// Удаляем источник синхронизации для выключения Timer2
TCCR2B &= ~(1 << CS22);
TCCR2B &= ~(1 << CS21);
TCCR2B &= ~(1 << CS20);

power_timer2_disable();

он использует код регистра и, в конце концов, функцию.

Кто-нибудь может объяснить мне, почему?

, 👍1


1 ответ


Лучший ответ:

0

По сути, он делает следующее:

clockSource = TCCR2B & (_BV(CS22) | _BV(CS21) | _BV(CS20)); // сохраняем прескалер
TCCR2B &= ~(_BV(CS22) | _BV(CS21) | _BV(CS20));             // выбираем «нет источника»; - отключить источник синхронизации
power_timer2_disable(); // отключаем весь таймер2 в регистре снижения мощности

Определение макроса power_timer2_disable:

#define power_timer2_disable()  (PRR |= (uint8_t)(1 << PRTIM2))

Короче говоря, вам необходимо отключить источник синхронизации до того, как питание будет отключено регистром PRR (во избежание неожиданного поведения).

Регистр снижения мощности

Регистр снижения мощности (PRR) обеспечивает метод остановки синхронизацию с отдельными периферийными устройствами для снижения энергопотребления. текущее состояние периферийного устройства замораживается, и регистры ввода-вывода могут не читать и не писать. Ресурсы, используемые периферийным устройством при остановке часы останутся занятыми, поэтому периферийное устройство в большинстве случаев должно случаях отключать перед остановкой часов. Пробуждение модуля, которое осуществляется очисткой бита в PRR, переводит модуль в то же состояние как и до выключения. Выключение модуля можно использовать в режиме ожидания и Активный режим, позволяющий значительно снизить общее энергопотребление. В во всех остальных режимах сна часы уже остановлены.

,

Спасибо КИЕВ! Есть ли в таблице данных эти советы перед использованием, например, power_timer2_disable?, @MarkCalaway

@MarkCalaway Это определенно упоминается для модуля АЦП. Я не проверял это на предмет таймеров., @KIIV