Организация системы прерывания программ
Во время выполнения микропроцессором текущей программы внутри системы и связанной с ней внешней среде (например, в технологическом процессе, управляемом МП системой) могут возникать события, требующие немедленной реакции на них со стороны микропроцессора.
Реакция состоит в том, что микропроцессор прерывает обработку текущей программы и переходит к выполнению некоторой другой программы, специально предназначенной для данного события. По завершению этой программы микропроцессор возвращается к выполнению прерванной программы. Рассмотренный процесс называется прерыванием программы.
Каждое событие, требующее прерывание программы, сопровождается сигналом, оповещающим микропроцессор, который называется запросом прерывания ( ). Программа, затребованная запросом прерывания, называется прерывающей программой.
Чтобы микропроцессорная система могла реализовать прерывания программ ей необходимо иметь соответствующие аппаратные и программные средства, совокупность которых получила название системы прерывания программ или контроллера прерываний.
Основное назначение системы прерывания – это автоматическое прерывание программ с целью увеличения его скорости переключения.
Основными функциями системы прерывания являются: запоминание состояния прерываемой программы, идентификация прерывающего устройства и осуществления перехода к прерывающей программе, а также восстановление состояния прерванной программы и возврат к ней.
Практически в каждом микропроцессоре реализована особая структура системы прерываний, а программируемые БИС управления прерываниями еще более увеличивают число разновидностей этой структуры.
Однако общая последовательность реакции различных микропроцессоров на сигнал прерывания примерно одинакова и содержит следующие действия:
- устройство генерирует сигнал прерывания, который подается на вход прерывания микропроцессора (INT); на этой линии по схеме ИЛИ объединяются запросы всех устройств, работающих в режиме прерывания;
- микропроцессор завершает текущую команду и, если прерывания разрешены (не замаскированы), формируют сигнал INTA подтверждения прерывания; до получения этого сигнала устройство сохраняет активный уровень сигнала INT;
- осуществляется запоминание содержимого программного счетчика и некоторых РОН в стеке;
- микропроцессор идентифицирует прерывающее устройство для перехода к соответствующей подпрограмме обслуживания;
- выполняется короткая (30-50 байт) подпрограмма обслуживания прерывания, в которой запрограммированы действия по передаче данных, модификации указателей, проверке окончания операций ввода-вывода и др.;
- восстанавливается состояние прерванной программы, для чего запомненное содержимое регистров извлекаются из стека;
- возобновляется выполнение прерываемой программы; это действие инициируется командой возврата из прерывания, являющейся последней командой подпрограммы обслуживания прерывания.
При наличии нескольких источников запросов прерывания между запросами должны быть установлены приоритетные соотношения, определяющие, какой из нескольких поступающих запросов подлежит обработке в первую очередь, и устанавливающие, имеет право или нет, данный запрос прерывать ту или иную программу.
Для оценки эффективности систем прерывания могут быть использованы следующие характеристики.
Время реакции - время между появлением сигнала прерывания и началом выполнения прерывающей программы (включая время выполнения цикла прерывания микропроцессора).
Время обслуживания есть сумма времени, затраченной на сохранение состояния прерванной программы, и времени на возврат к ней:
Глубина прерывания – максимальное число программ, которые могут прерывать друг друга. Если после перехода к прерывающей программе и вплоть до ее окончания прием других запросов прерываний запрещен, то система имеет глубину прерывания равную 1. Глубина равна , если допускается последовательное прерывание до программ. Глубина прерываний обычно совпадает с числом уровней приоритета в системе прерываний.
Если время реакции системы прерываний настолько велико, что запрос оказывается не обслуженным до момента прихода нового запроса от того же источника, то возникает насыщение системы прерывания. В этом случае предыдущий запрос прерывания от данного источника будет системой утрачен. Быстродействие микропроцессора, логические возможности системы прерывания и количество источников прерывания должны быть согласованы таким образом, чтобы насыщение было невозможным.
Число уровней (классов) прерывания – совокупность запросов, инициирующих одну и ту же прерывающую программу.
Существуют два основных вида прерывания: программное прерывание и аппаратное прерывание.
Программное прерывание реализуется введением специальных команд прерывания в систему команд процессора. Введение таких специальных команд позволяет создавать гибкие и мощные программные средства (например, операционные системы).
Аппаратные прерывания могут инициироваться как операционными блоками микропроцессора, так и устройствами внешними по отношению к нему. Аппаратные прерывания подразделяются на маскируемые прерывания и немаскируемые прерывания.
Маскируемые прерывания реализуется только при условии разрешения прерывания. Процессор реагирует на запросы маскируемых прерываний по линии INT, если установлен внутренний триггер разрешения прерываний INTE, называемой также маской. На рисунке 1.7 приведена функциональная внутренняя схема прерываний.
Рисунок 1.7. Внутренняя схема прерываний
Состояние триггера разрешения прерывания INTE идентифицируется выходным сигналом разрешения прерывания с такой же мнемоникой INTE. Если INTE=0, прерывания запрещены (замаскированы) и процессор не реагирует на сигнал INT=1. С помощью команд разрешения EI и запрещения DI прерываний можно программно управлять состоянием триггера INTE, и пользователь может защитить от прерываний критические сегменты прикладной программы.
При восприятии прерывания триггер прерывания IFF переводиться в нулевое состояние, что приводит к запрещению инкремента программного счетчика и генерированию сигнала подтверждения прерывания INTA.
При этом сбрасывается триггер INTE и в дальнейшем разрешить прерывание можно только командой EI. Для программного управления ПУ в их регистрах управления и состояния предусмотрен специальный бит INTEN разрешения прерывания (маска). Иногда биты масок всех устройств объединяются в специальный регистр. Наконец, в некоторых микропроцессорах бит маскирования прерывания входит в слово состояния процессора PSW.
Немаскируемые прерывания реализуют режим безусловного прерывания. Микропроцессор воспринимает запросы прерывания независимо от того, в каком состоянии находится триггер разрешения прерывания. Эти прерывания должны отражать ситуации, в которых желательно немедленное прерывание (например, ошибка аппаратуры контроля, уменьшение напряжения сети до критического уровня и т.д.).
Одним из распространенных способов организации системы прерывания является векторное приоритетное прерывание. Этот способ реализуется с помощью дополнительных аппаратных средств в виде интерфейсных БИС, которые называются контроллерами прерываний.
Система прерывания при такой организации имеет несколько уровней прерываний (линий запросов прерываний), к которым могут подключаться различные устройства, причем каждый уровень имеет свой вектор прерывания.
Для реализации векторного приоритетного прерывания необходимо распределить приоритеты между уровнями и обеспечить механизм взаимодействия подпрограмм обслуживания прерывания соответствующих уровней.
Распределение приоритетов между уровнями могут реализовываться различными способами.
Одним из этих способов является векторное прерывание с фиксированным приоритетом. Каждому уровню (входу) запросов прерывания присваивается фиксированный приоритет в порядке возрастания. Запрос с более высоким приоритетом прерывает обслуживание прерывания с меньшим приоритетом.
Вторым способом является векторное прерывание с циклическим приоритетом. Каждому входу, как и в предыдущем случае, присваивается фиксированный приоритет. После запроса прерывания и выполнения соответствующей подпрограммы обслуживания приоритеты изменяются в круговом порядке таким образом, что последний обслуженный вход будет иметь низший приоритет.
Этот способ характерен для таких применений, в которых устройства имеют одинаковый приоритет и ни одному из них нельзя отдать предпочтения.
Реализация векторного прерывания с адресуемым приоритетом аналогична второму способу, но допускает программное определение уровня запросов прерывания, которому назначается низший приоритет.
Запрещение прерывания на время обслуживания любого устройства может привести к потере запросов прерываний высокоприоритетных устройств, появляющихся при обслуживании устройств с меньшими приоритетами. Для исключения такой ситуации возникает необходимость использования механизма вложения прерываний, который позволит обеспечить взаимодействие подпрограмм обслуживания соответствующих уровней между собой.
Прерывание подпрограмм обслуживания прерываний называется вложенным прерыванием.
Для того чтобы процессор реагировал на запросы прерываний в начале каждой подпрограммы обслуживания их необходимо разрешать командой EI.
Для организации вложенных прерываний в каждой подпрограмме обслуживания прерываний необходимо выполнить следующие действия:
- разрешить прерывание;
- временно запомнить приоритет прерванной программы;
- загрузить в схему приоритетных прерываний новый текущий приоритет;
- собственно обслужить прерывание;
- восстановить прежний приоритет;
- возобновить прерванную программу с помощью команды RTI.
При определении приоритета прерывания программ различают два его значения: приоритет между запросами прерывания и приоритет между прерывающими программами.
Приоритет между запросами прерываний устанавливает очередность восприятия запросов, поступивших одновременно от различных уровней. Такой приоритет может быть реализован способами, которые указаны выше при организации векторного приоритетного прерывания.
Приоритет между прерывающими программами устанавливает старшинство в выполнении прерывающих программ разных уровней. Он определяет фактический порядок, в котором программы будут использоваться. Обычно этот приоритет реализуется как программно - управляемый на основе маски прерывания.
Маска прерывания представляет собой двоичный код, разряды которого поставлены в соответствие уровням или источникам прерывания. Маска загружается командой программы в регистр маски. Состояние "1" в данном разряде регистра маски разрешает, а "0" запрещает (маскирует) прерывание текущей программы от запросов соответствующего уровня или источника прерывания. Порядок расположения разрядов в регистре маски и нумерация уровней не имеют значения. Для каждой прерывающей программы может быть установлена своя маска. И, наконец, программа, изменяя биты в регистре маски, может устанавливать произвольные приоритетные соотношения между уровнями с любыми номерами без коммутации линий, по которым поступают запросы прерывания.
Таким образом, используя различные виды и способы организации прерываний, можно строить гибкие в то же время сложные системы многоуровневых прерываний, которые позволят подключать значительное число периферийных устройств с различным быстродействием.
Дата добавления: 2015-04-25; просмотров: 1906;