і
МИКРОКОНТРОЛЛЕРЫ
і
сделать - установить этот бит равным лог.
1
, запретив тем
самым обработку прерываний от сторожевого таймера.
Когда обработчики прерываний завершают свою рабо-
ту, зто бит вновь необходимо сбросить в лог.О. А анализ
этого бита будет происходить в обработчике прерываний
от сторожевого таймера! Пользоваться этим битом мо-
гут не только обработчики прерывания, но и фоновый про-
цесс.
Пример кода, реализующего такой механизм, приведен ниже. Предполагается, что при входе в обработчики
регистр #А содержит адрес 40М:
1пЬ_1: ЬЬЬ1
%аб,ОООООООІЬ
г
Обработчик сторожевого таймера. В какой момент возникло
прерывание (проверяем наш бит) ?
упг
$1
; Оно возникло в запрещенный период.
г
Оно возникло в разрешенный период.
$1:
пюуі
%<15, ОААЬ
г
Перепрограммировать таймер заново
тоуі
гЬі
%<15, ОхххххххЬ
г
для выдачи следующего тика
1пЬ_3: ЬЬЬІ
%а0,ОООООООІЬ
г
г
Обработчик интервального таймера. А не установил ли уже
этот бит фоновый процесс?
Іпг
$1
г
Бит установлен - не нужно хозяйничать!
Ьізі
%а0,ОООООООІЬ
; Запретить прерывания от сторожевого таймера
г
Обработка прерывания.
Ьісі
гЬі
%а0,ОООООООІЬ
'■
Разрешить прерывания от сторожевого таймера
$1:
гЬі
г
Обработка прерывания (в точности та же, что н выше).
рЬопе:
/ Это - фоновый процесс.
Ьізі
пор
%а0,ОООООООІЬ
!
г
/
Запретить прерывания от сторожевого таймера.
Помните - бит будет изменен почти в конце выполнения
следующей команды. Вместо пор можно вставить что-то
другое :-)
/
Некий алгоритм, который не должен прерываться сигналами от
сторожевого таймера.
Ьісі
%а0, ОООООООІЬ
/
Разрешить прерывания от сторожевого таймера.
Некоторые пояснения по поводу приведенного фраг-
мента. Обратите внимание - фоновый процесс устанав-
ливает и сбрасывает наш бит без какого-либо анализа.
В обработчике прерываний'(в нашем примере это 1п»_3
- обработчик прерываний от интервального таймера)
РАБОТА С РЕСУРСАМИ “НА ЛЕТУ”
Пример работы с ресурсами “на лету” - попытка считать
содержимое счетного регистра таймера во время счета.
Если таймер работает в
8
-битном режиме, никаких про-
блем в этом случае не возникает, но если он работает в
режиме 16 бит, то перед считыванием показаний мы дол-
жны его обязательно остановить - показания в этом ре-
жиме считываются частями (операция не является
ато-
марной),
и
нет никакой гарантии,
что между считыва-
нием младшего и старшего байта счетного регистра на
таймер не пришел
счетный импульс.
При неудачном сте-
чении обстоятельств (а именно - число 255 в младшем
байте) в этом случае показания таймера наврут аж на
255 (из-за переноса)! Если же останавливать таймер по
каким-либо причинам нельзя (в частности, из-за того, что
40 | - --------------------------------------------------------------------
анализ бита требуется - ведь его может уже установить
фоновый процесс, и в этом случае сбрасывать его мы не
имеем права: кто его установил, тот и сбрасывает! И, на-
конец, в обработчике прерываний от сторожевого тайме-
ра
1
п
(_ 1
мы имеем право только анализировать этот бит.
при повторном запуске таймера он обязательно обнуля-
ется), то при работе с ним можно применить технику
двой-
ного чтения.
Суть этого приема заключается в том, что мы внача-
ле считываем показания таймера, а затем выполняем
повторное
чтение и сравнение новых показаний с ра-
нее считанными. Если они совпадают, или, по крайней
мере, не слишком отличаются от прежних показаний, то
считанные показания обрабатываются дальше, в про-
тивном случае производится повторное считывание по-
казаний таймера. Фраза “не слишком отличаются” обус-
ловлена тем, что при счете таймером импульсов такто-
вого генератора без включенного предварительного де-
лителя показания эти будут отличать
гарантированно.
| Радиолюбитель - 09/2006
предыдущая страница 40 Радиолюбитель 2006-09 читать онлайн следующая страница 42 Радиолюбитель 2006-09 читать онлайн Домой Выключить/включить текст