II
“РЛ" - НАЧИНАЮЩИМ
II
требуется от \ЛЮТ), реально период переполнения может от-
личаться от указанного на 30% в любую сторону.
Чтобы \ЛЮТ начал работать, необходимо установить
флаг \ЛЮТЕ1\1, который по умолчанию сброшен. Сделать
это можно в той же самой команде, которая установит
значение битов РЭх. Однако фактический запуск (и, впос-
ледствии, перезапуск) \ЛЮТ произойдет только при уста-
новке флага \ЛЮТРЗТ, который аппаратно сбросится в
следующем после установки машинном цикле. Таким об-
разом, применение \ЛЮТ в общем случае осуществляет-
ся так:
1. Настраиваем \ЛЮТ на определенный интервал пере-
полнения, в зависимости от того, насколько быстро наше
устройство должно приходить в себя после зависания.
2. В программе мы предусматриваем команды, уста-
навливающие флаг \ЛЮТРЗТ, причем размещаем их так,
чтобы период между их повторениями был не более выб-
ранного периода переполнения \ЛЮТ.
3. Выполняем первичный запуск-сброс \ZVDT путем ус-
тановки флагов \ЛЮТЕЫ и УУОТРЭТ.
Теперь попытка выполнить бесконечный цикл
Л\1Р $
будет прервана не более чем через 2 секунды. Вы легко
можете проверить этот факт при помощи МСЭЩсПо: вве-
дите простейшую программку, которая инициализирует
\ЛЮТ, а затем входит в бесконечный цикл, и запустите ее
на автоматическое выполнение. Вскоре вы увидите спе-
циальное сообщение системы о том, что \ЛЮТ сработал.
Остается только при необходимости выяснить, отчего про-
изошел сброс - из-за зависания программы или же просто
было включено питание устройства, ведь и тот и другой слу-
чай с аппаратной точки зрения одинаково сопровождаются
сбросом микроконтроллера, а вот с программной точки зре-
ния могут и отличаться.
Для определения причины сброса можно использовать
метод, одинаково хорошо действующий в программах для
любых микроконтроллеров и основанный на том, что при
сбросе содержимое ОЗУ микроконтроллера не изменяется.
Суть его в том, что в начале программы мы проверяем зна-
чения нескольких ячеек памяти на предмет равенства зара-
нее определенным значениям
(сигнатурам).
Если в этих ячей-
ках содержатся правильные коды сигнатуры, значит, был
сброс от \ЛГОТ или по иной причине, не связанной с подачей
питания (например, пользователь нажал кнопку сброса), а
вот если коды сигнатур не совпадают - было отключение
питания. Принято сброс при включении питания называть
холодным
” сбросом (или стартом), а сброс “под напряжени-
ем”
-горячим
или
теплым
сбросом. После того, как мы опре-
делили, что был холодный сброс, необходимо сразу же зане-
сти в наши ячейки коды сигнатур, чтобы иметь возможность
определить впоследствии горячий сброс.
Вот пример участка программы, диагностирующей вид сброса:
; верная сигнатура - коды 1,2,3 в ячейках Эгд!, 8л.д2 и гл.дЗ соответственно
mov
A, #1
cjne
A, Sigl,
•0
H
0
0
reset
; сигнатура не совпадает, значит холодный сброс
mov
A, #2
cjne
A, Sig2,
•o
H
0
0
reset
mov
A, #3
cjne
A, Sig3,
00
и
reset
jmp
warm reset
; теплый старт - переходим к его обработке
со1Ц_гезеЪ:
; обработка холодного сброса
точ
8±д1,
#1
; записываем сигнатуры
точ
Э±д2,
#2
точ
БгдЗ,
#3
; далее обрабатываем холодный сброс
Теоретически, можно использовать и единственную ячей-
ку для хранения сигнатуры, но для надежности их число дол-
жно быть не менее трех, а еще лучше - больше. 100% гаран-
тии даст контроль содержимого всего ОЗУ ©, но это, разу-
меется, невозможно.
Однако в микроконтроллере АТ8938252 имеется и более
простой способ диагностики типа сброса - воспользоваться
специальным флагом, который устанавливается аппаратно
только в том случае, если был факт отключения питания, а
при горячем сбросе не меняет своего значения. Флаг этот
называется РОР и находится в регистре управления питани-
ем микроконтроллера
РСОЫ
(см. таблицу 18). В этом реги-
стре есть два флажка, которые можно использовать в про-
грамме произвольно - 6Р1 и 6ГО, остальные флаги имеют
специальное назначение.
После сброса регистр РСОЫ содержит нули во всех би-
тах, кроме РССЖ4, значение которого либо 1 (при холодном
сбросе), либо имеет программно установленное значение
(при теплом сбросе).
Использовать этот флаг чрезвычайно просто: анализи-
руем его значение сразу в начале программы - если он уста-
новлен, то был холодный сброс, а если сброшен - теплый.
При обработке холодного сброса сразу же сбросим этот флаг
- и все.
Однако регистр РСОЫ служит не только для определе-
ния вида сброса, он позволяет управлять мощностью, потреб-
ляемой микроконтроллером!
Таблица 18.
Регистр РСОМ
Р а з р я д
7
6
5
4
3
2
1
0
ф л а г
S M O D
-
-
P O F
G F 1
G F 0
P D
I D L
28
У Радиолюбитель - 0 8 /2 0 0 7
предыдущая страница 28 Радиолюбитель 2007-08 читать онлайн следующая страница 30 Радиолюбитель 2007-08 читать онлайн Домой Выключить/включить текст