Энергосберегающий режим Sleep в микроконтроллерах PIC

Описание режима SLEEP. Микроконтроллер переводится в режим SLEEP при выполнении специальной команды SLEEP. Если сторожевой таймер включен, то он обнуляется и начинает отсчет задержки заново. В регистре STATUS сбрасывается бит РD и устанавливается бит ТО. Тактовый генератор отключается. Выводы портов сохраняют состояние, которое было непосредственно перед исполнением команды SLEEP.

Чтобы потребляемый в этом режиме ток был минимальным, настроенные на вывод порты должны иметь значения, при которых через них не будет протекать ток от внешних источников. Линии портов, настроенные на ввод и имеющие высокое входное сопротивление, должны быть соединены через внешние резисторы порядка 10 кОм с шиной питания или общим проводом, чтобы исключить внутренние токи пере ключения, вызванные хаотичными наводками на входы. Так же следует поступить и с входом RA4/Т0СК1. На выводе MCLR должен быть высокий уровень.

ПРОБУЖДЕНИЕ ИЗ РЕЖИМА SLEEP

Процессор может быть выведен из режима SLEEP тремя различнымиспособами:

(а) внешним сбросом по входу MCLR;

(б) при переполнении сторожевого таймера (если он включен);

(в) прерыванием по входу RB0/INT, по изменению состояния входов RВ4-RB7 или по окончанию записи в EEPROM.

Событие (а) приводит к сбросу процессора и исполнению программы с начального адреса. Два остальных события приводят к продолжению исполнения программы. Во время исполнения команды SLEEP процессор загружает в буфер команд следующую команду (РС+1). Чтобы контроллер вышел из режима SLEEP по прерыванию, оно должно быть раз решено соответствующими битами.

Порядок пробуждения по прерыванию зависит от состояния бита GIE. Если этот бит сброшен, то после пробуэгсдения выполняется команда, следующая за командой SLEEP (и уже загруженная в буфер) и далее по порядку. Если биn GIE установлен в 1, то сначала исполняется команда, загруженная в буфер, и затем процессор переходит на адрес-вектор прерывания 000411. Если исполнение команды, следующей за SLEEP, при выходе по прерыванию нежелательно, то сразу после команды SLEEP должна следовать команда NOP.

Когда бит GIE глобального разрешения прерываний сброшен и возникает ситуация, при которой для любого из прерываний одновременно установлены бит разрешения и флаг-бит, происходит одно из следующих событии:

Если событие прерывания произошло до исполнения команды SLEEP, то эта команда исполняется как NОР. Сторожевой таймер и предделитель не очищаются, бит ТО не устанавливается и бит PD не сбрасывается.

Если событие прерывания произошло во время или после исполнения команды SLEEP, то устройство немедленно пробуждается из режима SLEEP.

Команда SLEEP отрабатывается полностью, даже если прерывание произошло в момент ее действия. Сторожевой таймер и предделитель очищаются, устанавливается бит ТО и сбрасывается бит PD.

Даже если протестировать флаг-биты перед началом исполнения команды SLEEP, возможна ситуация, когда некий флаг-бит будет установлен до того, как команда SLEEP будет завершена. Чтобы убедиться, исполнялась ли команда SLEEP, протестируйте бит РD. Если бит РD установлен, значит, команда SLEEP была исполнена, как NOP.

Загрузка...