Предыдущий <<  MCUCR $35 ($55)   >>Следующий

 
     
MCUCR.6 SE Разрешение SLEEP режима
MCUCR.5 SM1 Выбор SLEEP режима (11=Power Ssave, 10=Power Down, 00=Idle). Подробнее о SLEEP режимах см. ниже
MCUCR.4 SM0
MCUCR.3 ISC11 Выбор режима прерывания INT1 (00-низкий уровень, 10-спад, 11-фронт)
MCUCR.2 ISC10
MCUCR.1 ISC01 То же - прерывания INT0
MCUCR.0 ISC00

 

Внешнее прерывание вызывается при изменении состояния pin-ов INT1 (PORTD.3) и INT0 (PORTD.2). Спад - прерывание вызывается при переходе pin-а из состояния лог. "1" в "0", фронт - при переходе из "0" в "1". Низкий уровень - означает, что запрос на прерывание будет устанавливаться постоянно, пока соответствующий pin находится в лог. "0". Сказать честно - никогда таким режимом не пользовался, он нужен только для вывода МК из режима SLEEP power down - там прерывания по фронту и спаду не работают. 

В новых МК (Tiny, Mega) добавлен режим 01 - прерывание по любому изменению состояния pin-а, то есть и по фронту, и по спаду. Вот это режим точно полезен.


Режимы SLEEP

В МК AT90s8535 предусмотрены три режима энергосбережения, или SLEEP-режима. В этот режим МК входит по специальной команде SLEEP, в том случае, когда этот режим разрешен в регистре MCUCR (см. выше).

Idle - в этом режиме вся периферия продолжает функционировать, останавливается только сам процессор. В обычный режим МК выходит по любому прерыванию (естественно, они должны быть разрешены!) и по сбросу.

Power Down - останавливается не только процессор, но и тактовый генератор. Вернуть МК в нормальный режим можно внешним сбросом, сбросом сторожевого таймера или внешним прерыванием по уровню. При этом надо иметь в виду, что на "раскачку" тактового генератора требуется время!

Power Save - аналогично Power Down, дополнительно продолжает работать таймер 2 - если он сконфигурирован на работу в асинхронном режиме (работает не от системного тактового генератора, а от TOSC1),  и МК в нормальный режим возвращают (кроме сброса) прерывания этого таймера.


MCUSR  $34 ($54)

Регистр статуса MCUSR нужен для определения причины сброса процессора. В нем определены только два бита - PORF (MCUSR.0) и EXTRF (MCUSR.1). В зависимости от того, из-за чего произошел сброс (говоря иначе - пуск программы с 0 адреса) - биты MCUSR будут установлены следующим образом:

Установлен в "1" бит PORF - по сути, это и не сброс вовсе, а старт программы по включению питания. Но так как при включении питания программа стартует с вектора 0 - считается сбросом по включению питания.

Установлен в "1" бит EXTRF - сброс произошел из-за подачи низкого уровня на pin Reset

Есть еще одна возможная причина сброса - сторожевой таймер, если он включен. В этом случае биты PORF и EXTRF  не изменяются.

Следовательно, если в программе нужно определять режим сброса - то после анализа этих бит их просто нужно установить в "0". Тогда сброс по сторожевому таймеру можно будет определить по отсутствию "1" в вышеописанных битах.


предлагаем щитовой дом в москве ·· порно видео

nml 11-Jul-2009