Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Особенности использования прерываний при программировании МК



По запросу на прерывание, основная программа останавливается и запускается специальная подпрограмма («обработчик прерывания», «программа обслуживания прерывания»). Основная программа может отказать в подтверждении прерывания и в выполнении программы обслуживания прерывания. Действия при выполнении прерывания показаны на рисунке ниже.

Компьютерная система может реагировать на запрос на прерывание несколькими способами:

а) Не реагировать на запрос, пока не завершится выполнение текущей задачи. Это реализуется путём запрещения (маскирования) обслуживания запроса на прерывание. Такой метод обработки запросов на прерывание используется, когда нужно обеспечить заданное время выполнения основной программы: любое прерывание может нарушить реализацию необходимого интерфейса. Длительное маскирование прерываний не рекомендуется, так как в течение времени маскирования может произойти наложение нескольких событий, вызывающих прерывания, а распознаваться будет только одно. Продолжительность маскирования определяется конкретным применением МП-устройства, типом и частотой следования событий. Не рекомендуется запрещать прерывания на время большее, чем половина минимального ожидаемого периода следования событий, запрашивающих прерывания (случайная величина с равномерной плотностью распределения вероятности).

б) После завершения задачи возможен один из вариантов:

1. сброс маски и разрешение обслуживания запроса, что ведёт к запуску обработчика прерываний;

2. анализ значений битов, указывающих на поступление запросов на прерывание и непосредственное выполнение программы обслуживания прерывания без вызова обработчика прерывания.

Обработчик прерываний выполняет нижеследующую последовательность действий (см. рисунок):

а) сохранить содержимое регистров контекста – регистров, определяющих текущее состояние выполнения основной программы. Обычно это состояние программного счётчика, регистры состояния и аккумулятор. Также сохраняется содержимое индексного регистра процессора, так как он может быть использован для обработки запроса на прерывание;

б) сбросить контроллер прерываний и оборудование, вызвавшее запрос. После сброса, контроллер прерываний готов воспринимать следующий запрос. Если поступит новый запрос прерывания, то регистр маскирования прерываний процессора предотвратит обработку запроса. Но регистр состояния прерываний зафиксирует этот запрос, который будет ожидать своего обслуживания. После завершения обработки текущего прерывания, маска прерываний будет сброшена, и вновь поступивший запрос поступает на обработку;

в) обработать данные – в микроконтроллерах обычно принимают и сохраняют поступающие извне данные, и далее их используют после окончания текущей задачи. Такой способ обслуживания запроса является компромиссом между немедленной полной обработкой данных по запросу на прерывание, которая может потребовать много времени, и игнорированием прерывания, что может привести к потере информации о событии, вызвавшем запрос. Адрес, который загружается в программный счётчик при переходе к программе обслуживания прерывания, называется «вектор прерывания». Для различных прерываний могут быть заданы различные вектора, что избавляет программу обслуживания от необходимости определять причину прерывания. Использование различными прерываниями одного вектора обычно не вызывает проблем при работе микроконтроллеров, так как чаще всего микроконтроллер исполняет одну единственную программу;

г) восстановить содержимое регистров контекста. Вместе с выполнением команды возврата из прерывания, это событие переводит процессор в состояние, в котором он находился до выполнения прерывания. Так как содержимое регистра состояния и программного счётчика обычно автоматически сохраняется, это избавляет от сохранения этих данных в памяти программными средствами с помощью команд пересылки. А затем и от восстановления при возврате к исходной программе. Но такое автоматическое сохранение реализуется не во всех МП-устройствах. Если содержимое регистра состояния сохраняется перед выполнением программы по обслуживанию прерывания, то по команде возврата производится автоматическое восстановление регистра состояния. Если содержимое других регистров процессора изменяется при обслуживании прерывания, то оно должно быть также сохранено в памяти до изменения, и затем восстановлено перед возвратом в основную программу. Обычно принято сохранять все регистры процессора, чтобы избежать непредсказуемых ошибок, которые трудно локализовать;

д) вернуться к прерванной основной программе.

Выше описаны так называемые аппаратные прерывания, когда запрос формируется аппаратной частью по какому-либо событию. Ещё существуют программные прерывания: некоторые процессорные команды используются для имитации программных прерываний. Обычно это вызов системных подпрограмм, которые располагаются в произвольном месте памяти, или требуют при обращении к ним межсегментных переходов (один сегмент равен 64 Кбайт; область памяти 4 Гбайт). Эта возможность реализована в МП Intel i86 и используется в BIOS, и ОС DOS для вызова системных подпрограмм без необходимости фиксирования точки входа. Вместо этого используются различные вектора прерываний, выбирающие команду для выполнения при таком программном прерывании.





Дата публикования: 2015-01-24; Прочитано: 260 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...