Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть 2 - Микропроцессорная техника.doc
Скачиваний:
41
Добавлен:
23.09.2019
Размер:
981.5 Кб
Скачать

Прерывания в микропроцессорных системах

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

Если Вы никогда не имели дело с прерываниями, то у Вас возникнет вопрос — что это такое? В компьютерной системе прерывание — это запуск специальной подпрограммы (называемой «обработчиком прерывания» или «программой обслуживания прерывания»), который вызывается сигналом аппаратуры. На время выполнения этой подпрограммы реализация текущей программы останавливается. Термин «запрос на прерывание» (interrupt request) используется потому, что иногда программа отказывается подтвердить прерывание и выполнить обработчик прерывания немедленно.

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

Первый возможный ответ — «не реагировать на прерывание, пока не завершится выполнение текущей задачи» — реализуется путем запрещения (маскирования) обслуживания запроса прерывания. После завершения задачи возможен один из двух вариантов сброс маски и разрешение обслуживания, что приведет к вызову обработчика прерывания, или анализ значения битов («поллинг»), указывающих на поступление запросов прерывания и непос­редственное выполнение программы обслуживания без вызова обработчика прерывания Такой метод обработки прерываний используется, когда требу­ется обеспечить заданное время выполнения основной программы, так как любое прерывание может нарушить реализацию необходимого интерфейса.

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

Обработчик прерывания всегда обеспечивает следующую последователь­ность действий

1. Сохранить содержимое регистров контекста

2. Сбросить контроллер прерываний и оборудование, вызвавшее запрос

3. Обработать данные

4. Восстановить содержимое регистров контекста

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

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

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

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

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

Восстановление регистров контекста и выполнение команды возврата из прерывания переводит процессор в состояние, в котором он находился до возникновения прерывания

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

Если содержимое регистра состояния сохраняется перед началом выпол­нения обработчика прерывания, то по команде возврата производится его автоматическое восстановление.

Если содержимое других регистров процессора изменяется при выполне­нии обслуживания прерывания, то оно также должно быть сохранено в памяти до изменения и восстановлено перед возвратом в основную программу. Обычно принято сохранять все регистры процессора, чтобы избежать не­предсказуемых ошибок, которые очень трудно локализовать.

Адрес, которым загружается в программный счетчик при переходе к обра­ботчику прерывания, называется «вектор прерывания». Существует несколь­ко типов векторов Адрес, который загружается в программный счетчик при запуске микроконтроллера (leset) называется «вектор сброса». Для различных прерывании могут быть заданы разные вектора, что избавляет программу обслуживания от необходимости определять причину прерывания. Использо­вание различными прерываниями одного вектора обычно не вызывает про­блем при работе микроконтроллеров, так как чаще всею микроконтроллер исполняет одну единственную программу. Этим микроконтроллер отличается от персонального компьютера, в процессе эксплуатации которого могут до­бавляться различные источники прерывании (Если Вы когда-либо подклю­чали два устройства к портам СОМ1 и COM3, то Вы представляете, о чем идет речь) В микроконтроллере, где аппаратная часть хорошо известна, не должно возникнуть каких либо проблем при совместном использовании век­торов прерывании

Последнее, что осталось рассмотреть, — это программные прерывания. Существуют процессорные команды, которые могут быть использованы для имитации аппаратных прерывании. Наиболее очевидное использование этих команд — это вызов системных подпрограмм, которые располагаются в про­извольном месте памяти, him требуют для обращения к ним межсегментных переходов. Эта возможность реализована в микропроцессорах семейства Intel 186 и используется в базовой системе ввода-вывода BIOS (Basic Input/Output System) и операционной системе DOS персональных компьютеров для вызо­ва системных подпрограмм без необходимости фиксирования точки входа Вместо этого используются различные вектора прерывании, выбирающие команду, которая должна выполняться, когда происходит такое программ­ное прерывание

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]