|
Предыдущий
<< 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" в вышеописанных
битах. |
|