Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 11. Прерывания и сторожевой таймер




Цель лекции: познакомить студентов с выполнением прерываний. Научить применять встроенный таймер TRM1 и регистры специального назначения, связанные с его настройкой.

11.1 Прерывания

Микроконтроллеры могут реагировать на запросы на прерывания от самых раз­ных источников, находящихся вне микроконтроллера, либо от различных портов и периферийных устройств, имеющихся в составе конкретного представителя се­мейства. Например, микроконтроллеры P1C16F874/7 поддерживают до 13 раз­личных прерываний от этих периферийных устройств, а также одно внешнее пре­рывание, подаваемое через вывод INT. Вход внешне­го прерывания использует ту же ножку микроконтроллера, к которой подключена нулевая линия PORTB, т.е. вывод RB0. Программист может запретить или разрешить прерывания от этих источников, а также полностью запретить работу всей системы прерываний. Поскольку процесс реакции на пре­рывание практически не зависит от его источника, то будем вести речь именно о внешнем прерывании.

Отклик процессора на за­прос прерывания должен выглядеть так:

1. При выполнении каждой команды процессор проверяет наличие запроса прерывания от разрешенного источника. Если такой запрос отсутствует, микроконтроллер просто переходит к выполнению следующей команды. При наличии запроса следующие три машинных цикла затрачиваются на передачу управления процедуре обработки прерывания. В ней происходит автоматическое сохранение, по меньшей мере, состояния счетчика команд. Это необходимо для возврата из обработчика прерывания. Некото­рые процессоры могут также автоматически сохранять содержимое регистра STATUS и дру­гих регистров специального назначения. Поскольку в РIС-микроконтроллерах среднего уровня реализован 8-уровневый аппаратный стек, из обработчика пре­рывания можно вызывать до семи вложенных друг в друга подпрограмм.

2. Запрещается вся система прерываний, что гарантирует блокирование всех прерываний на время обработки текущего прерывания. Это осуществляется сбросом 7-го бита регистра управления прерываниями INTCON, кото­рый помечен как флаг общего разрешения прерываний (GIE). При сбросе мик­роконтроллера бит GIE всегда сбрасывается, так что по умолчанию пре­рывания запрещены.

Первая команда обработчика прерывания всегда размещается по адресу h'004' памяти программ, называ­емого вектором прерывания. Разумеется, код обработчика прерыва­ния находится в каком-либо другом месте памяти программ, поэтому первой ко­мандой будет команда Goto.

3. Выполнение требуемых действий.

4. Восстановление состояния процессора и возврат к тому месту основной программы, в котором произошло прерывание.

5. Как и все подпрограммы, процедура обработки прерывания должна завершаться командой возврата. Однако при прерывании необходимо не только извлечь из стека сохраненное значение счетчика команд PC, но и установить бит G1E регистра INTCON для разрешения последующих прерываний. Для этого используется команда возврата из прерывания Retfie. Таким образом, после возврата в фоновую программу можно будет обработать все отложенные или будущие прерывания.

11.2 Подсчет посетителей с помощью прерываний.

Рассмотрим задачу подсчета числа посетителей в небольшом магазине. Одним из возможных решений является использование пары маломощный лазер — фотоэлемент, расположенных по бокам от входной двери. При пересечении луча покупателем на управляющий микроконтроллер поступит сигнал в виде прямоугольного импульса, как показано на рисунке 11.1. В этот момент микроконтроллер может быть занят выполнением своей основной задачи, например, организацией обмена данными между торговым терминалом и основным компью­тером склада.

Рисунок 11.1. Контроль числа посетителей магазина

Предположим, что при каждом проходе покупателя в магазин инкрементируется регистр, который мы назовем EVENT. Разумеется, покупатели будут еще и выходить из магазина, однако, если проход достаточно узкий, мы можем просто разделить общее количество проходов на два, чтобы получить реальное число по­сетителей. Таким образом, максимальное число посетителей, регистрируемое системой, составит 128.

В подпрограмме обработчика прерываний применяется команда SWAPF для копирования данных в регистры Status и W, поскольку она не меняет состояние регистра STATUS.

Фрагменты программы подсчета числа посетителей.

include <p16F877.inc>

_STATUS EQU h'51'; регистр, для сохранения состояния Status.

EVENT EQU h'52'; счетчик событий при прерываниях.

_WORK EQU h'53'; регистр, для сохранения состояния аккумулятора.

org h’000’

GOTO MAIN; вектор сброса записываем по адресу h’000’.

org h’004’

GOTO PERS_COUNT; вектор записываем по адресу прерывания h’004.

 

MAIN; метка фоновой (основной) программы.

BSF INTCON, INTE; разрешаем внешние прерывания.

BSF INTCON, GIE; разрешаем работу прерываний.

CLRF EVENT; очищаем счетчик событий (посетителей).

....

GOTO$; конец главной программы.

PERS_COUNT; подпрограмма - обработчик прерываний.

BCF INTCON, INTE; запрещаем внешние прерывания.

MOVWF _WORK; сохраняем значение W в регистре _WORK.

SWAPF STATUS, W

MOVWF _STATUS; сохраняем значение регистра Status.

BCF INTCON, INTF; сбрасываем флаг внешнего прерывания.

INCF EVENT, F; регистрация очередного посетителя.

SWAPF _STATUS, W; возвращаем значение Status.

MOVWF STATUS

SWAPF _WORK, F

SWAPF _WORK, W; возвращаем значение W.

BSF INTCON, INTE; разрешаем внешние прерывания.

RETFIE; возврат в фоновую программу из обработчика.

END

Процедуры обработки прерываний аналогичны обыч­ным подпрограммам, однако необходимо помнить следующее:

- обработчик прерывания должен завершаться командой Retfie.

- рабочий регистр (W), а также все РСН, изменяемые в обработчике прерывания, должны быть сохранены при входе в обработчик. И при выходе из него восстановлены, если они используются в фоновой программе.

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

- обработчики прерывания должны быть как можно короче и должны выполнять минимальный набор операций.

11.4 Сторожевой таймер

Многие системы на базе микроконтроллеров работают в сложной электро­магнитной обстановке, когда помехи наводятся как по сигнальным линиям, так и по линиям питания. Типичным примером такого устройства является система уп­равления приборной панелью автомобиля, на которую воздействуют помехи, со­здаваемые высоковольтными разрядами в блоке зажигания, и пульсации напря­жения питания, вызываемые работой генератора. Даже если поместить блок в эк­ран, а на всех линиях поставить фильтры, никто не сможет гарантировать, что в какой-нибудь момент времени программа не собьется с корректного положения в памяти программ и микроконтроллер не «сойдет с ума». Это может привести к серьезным последствиям в работе системы управления. Иногда эти проблемы можно решить ручным сбросом системы. Однако во многих случаях это невозможно, например, в случае космического зонда.

Один из способов решения данной проблемы заключается в использовании связки генератор - двоичный счетчик, которая процессор будет сбрасывать при переполнении счетчика. Если программа будет периодически обнулять этот счетчик во избежание переполнения, то микроконтроллер никогда не сбросится. Если по какой-либо причине микроконтроллер выйдет из основного цикла, в котором выполнялся сброс счетчика, то счетчик рано или поздно переполнится и микроконтроллер будет сброшен, а программа начнет выполняться с самого начала. Эта схема называется сторожевым таймером (watchdog timer), поскольку увеличивает безопасность системы.

Все микро­контроллеры PIC имеют встроенный модуль сторожевого таймера. Встроенный генератор сторожевого таймера никак не связан с основным тактовым генератором процессора и, если сторожевой таймер включен то, он постоянно генерирует сигнал с номинальным периодом 18 мс. В качестве элемента задающего время этого генератора используется внутренняя LC-цепочка, поэтому в зависимости от конкретного экземпляра, температуры и напряжения питания период генератора может изменяться от 7 мс до 33 мс.

Генератор сторожевого таймера подключен к 8-битному постделителю (postscaler). С его помощью период тайм-аута сторожевого таймера можно увели­чить до 0.018 * 128 = 2.3 с (0.9...4.2 с). Конкретное значение периода тайм-аута оп­ределяется состоянием битов PS[2:0] регистра OPTION_REG. Ге­нератор сторожевого таймера и счетчик постделителя сбрасываются при выполнении команды Clrwdt (Clear Watch DOG Timer — сброс сторожевого таймера). Соответствен­но, для предотвращения наступления тайм-аута сторожевого таймера необходимо периодически вызывать эту команду.

Поскольку генератор сторожевого таймера полностью независим от системного тактового сигнала, он продолжает работать даже после перевода микроконтроллера в «спящий» режим. Для этого команда Sleep сбрасывает сторожевой таймер и флаг ТО регистра Status. К тому же она активизирует флаг PD регистра Status, указывающий на то, что процессор находится в «спящем» режиме. Благодаря всем этим действиям между выполнением команды Sleep и наступле­нием тайм-аута сторожевого таймера проходит время, равное одному периоду сторожевого таймера. Если тайм-аут наступит при нахождении микроконтролле­ра в спящем режиме, то микроконтроллер проснется и продолжит выполнение программы с команды, следующей за командой Sleep. Обычно этой командой является команда сброса сторожевого таймера Clrwdt

 




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 867; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.