і
МИКРОКОНТРОЛЛЕРЫ
і
точ1
%<15, ОААЬ
; Выдать в регистр таймера характерный код.
;
А вот тут случилось прерывание!
1пЪ_1:
.
.
.
; Код обработчика прерываний.
; Выдать в регистр таймера характерный код (в обработчике
; пр ерыв ания)
; Продолжить счет!!!
; Возврат из обработчика прерывания.
movl
movl
rti
%d5,OAAh
%d5,Olxxxxxxb
А вот теперь продолжаем выполнение программы:
точ!
, ООххххххЬ
; Останов счета.
Естественно, что никакого останова счета тайме-
ра не пр оизой д ет - ведь между этими двумя коман-
дами вклинился обработчик преры ваний, который
вывел в управляющий регистр таймера свой харак-
терный код, и свой управляющий байт. Да, мы выво-
дим в регистр байт, требующий останова счета, но
ведь перед ним-то мы д о л ж н ы бы ли вы вести в ре-
гистр таймера хара кте р н ы й ко д , а вмешательство
обработчика прерываний спутало нам все карты - наш
байт характерного кода давным-давно пропал! Как
поступить в этом случае - ведь с помощью команд est
и sst мы не можем запрещ ать немаскируемые преры-
вания? Приведем ответ на это вопрос в виде готовой
программы и предлагаем читателю разобраться в ней
самостоятельно:
est
00001000b
; Запрещаем все прерывания (кроме сторожевого таймера,
; естественно, т.к. оно немаскируемое!)
wait
; Ожидаем , когда система получит очередное прерывание от
; сторожевого таймера (других не будет - они замаскированы!).
movl
%d5,OAAh
; А вот теперь выдаем характерный код и байт останова счета,
movl
%d5,OOxxxxxxb
; т.к. у нас гарантированно есть достаточно времени для
; останова таймера, т.к. он ТОЛЬКО ЧТО начал отсчитывать
; интервал.
; Фактически с помощью wait мы выполнили СИНХРОНИЗАЦИЮ
; работы фонового процесса и обработчика прерываний.
sst
00001000b
; Снова разрешаем прерывания.
Как видите, при работе с прерываниями нужно ис-
ходить из того, что за каждым кустом притаилось по
врагу. В этом примере причина появления проблем та
же - неатом арное действие с регистром сторожево-
го таймера. “Кривые ручки” разработчиков микрокон-
троллера, увы, опять оказываются ни при чем.
..
Пример программы, реализующей взаимодействие
фонового процесса и обработчиков прерываний (файл
example3.zip)
вы можете загрузить с сайта нашего журнала:
http://www.radioliga.com (раздел “Программы")
О кончание в №9/2006
Уважаемые читатели!
В редакции журнала "Радиолюбитель" можно заказать имеющиеся в наличии отдельные номера журнала.
Расценки за 1 экз. любого номера журнала с учетом пересылки:
до 2006 г. - 3200 белорусских рублей, 20 гривен или 48 российских рублей;
за 2006 г. - 3300 белорусских рублей, 21 гривна или 52 российских рубля.
При заказе номеров журналов следует предварительно уточнить их наличие:
- по телефонам в г. М инске +375 17 251-70-86, +375 29 350-55-56, +375 29 350-38-25, +375 29 634-92-80.
- отправив заявку по E-mail: [email protected] radioliga.com
В графе "Для письменного сообщения" необходимо точно перечислить, какие конкретно номера журнала Вы
заказываете, а также сообщить свой полный почтовый адрес.
При заказе более трех номеров - скидки.
Отправка журналов - после поступления денег.
Наложенным платежом редакция журналы не высылает!
Реквизиты
ИЧУП "Радиолига", УНН 190549275, р/с 3012000036352, код 603 в филиале № 510 АСБ "Беларусбанк" г. Минска.
I 39
Радиолюбитель - 0 8 /2 0 0 6 1
предыдущая страница 38 Радиолюбитель 2006-08 читать онлайн следующая страница 40 Радиолюбитель 2006-08 читать онлайн Домой Выключить/включить текст