Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція№5.docx
Скачиваний:
2
Добавлен:
23.11.2019
Размер:
220.38 Кб
Скачать

Irq0 - irq15 - это аппаратные прерывания.

Процессор, получив от контроллера прерываний номер активного прерывания, автоматически сохраняет в стеке текущее содержимое счетчика команд PC(адрес возврата в прерываемую программу), обращается к памяти по адресу AdrN, считывает из элемента таблицы его содержимое и помещает его в регистр PC. Таким образом, следующей будет выполнена первая команда процедуры обработки (рис.6.3-а).

Векторно-программный переход на процедуру обработки прерывания

Отличие от векторного принципа состоит в том, что элемент таблицы векторов перехода должен содержать команду перехода на процедуру обработки (например, команду JMP <adr>).

В этом случае процессор, сохранив в стеке текущее содержимое PC, вычисляет и записывает в этот регистр адрес нужного элемента таблицы. Содержимое нужного элемента таблицы считывается в процессор как команда и соответственно выполняется (рис.6.3-б).

В элемент таблицы векторов может быть помещена даже короткая процедура обработки прерывания (менее размера элемента).

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

Рис. 6.3. Способы перехода на подпрограмму обработки прерывания:  а) векторный; б) векторно-программный

Особенности построения процедур обработки прерываний

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

Особенности обработки внутренних и программных прерываний

Если нужно вызвать программное прерывание из текущей программы, программист в соответствующем месте программы должен разместить специальную команду. Для процессоров серии Intel 80x86 такой командой является INTn, где n – номер нужного прерывания. При выполнении такой команды процессор получает информацию о номере прерывания непосредственно из кода команды и выполняет переход на нужную процедуру так же, как и в случае обработки других видов прерываний. При обработке программных прерываний внешний контроллер не используется.

Обобщенно последовательность действий аппаратных и программных средств по обработке прерывания можно описать следующим образом:

  1. Установление факта прерывания (прием и идентификация сигнала на прерывание).

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

    При этом происходит

    2. Запоминание состояния прерванного процесса (состояние процесса определяется значением счетчика команд, содержимым регистра процессора, спецификацией режима: пользовательский или привилегированный)

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

    4. Сохранение информации прерванной программе, которую не удалось спасти с помощью действий аппаратуры.

    5. Обработка прерывания. Работа может быть выполнена той же подпрограммой, которой было передано управление на 3-ем шаге, но в ОС чаще всего эта обработка реализуется путем вызова соотв. подпрограммы.

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

    7. Возврат в прерванную программу.