Механизм обработки прерываний

Программирование контроллера прерываний

Сигналы, поступающие от различных периферийных устройств, должны быть обработаны какой-либо программой. Узнать о сигналах, требующих обслуживание, микропроцессор может различными способами:

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

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

- На основе механизма прерывания, который позволяет обеспечить наиболее эффективное управление внешними устройствами и программами.

Цифровые устройства, построенные на основе архитектуры IBM PC, используют механизм прерываний. Прерыванияприостанавливают выполнение программы для выполнения специальных системных действий. Необходимость прерываний обусловлено двумя причинами: преднамеренный запрос на выполнение операций ввода-вывода на различные внешние устройства и обработка непредвиденных программных ошибок.

Обработка прерываний микропроцессором производится в три этапа:

- прерывание выполнения текущей программы;

- переход к выполнению подпрограммы обработки прерывания;

- возврат управления прерванной программе.

Любая программа, загруженная на выполнение, занимает в памяти отдельное от других программ адресное пространство. Регистры являются разделяемыми ресурсами для микропроцессора, поэтому их содержимое нужно сохранять при переключении задач. Закончив выполнение инструкции, в ходе которого возник запрос на прерывание, в стеке сохраняется содержимое регистра флагов и регистровой пары CS:IP.

В регистре флагов сбрасываются флаги разрешения прерывания IF и трассировки TF. Этим обеспечивается блокировка возникновения новых маскируемых внешних прерываний (см. раздел 2.2) и запрещаются пошаговые прерывания по выполнении каждой инструкции.

Затем в регистровую пару CS:IP загружается адрес подпрограммы обработки прерыванияISR(Interrupt Subroutine), которой и передается управление. Адреса подпрограмм прерываний называют векторами, а их совокупность – таблицей векторов прерыванийIVT(Interrupt Vector Table).

Каждый вектор размещается в 4 байтах. Старшее слово адреса содержит значение сегмента CS, младшее – смещение IP. Первые 1024 байта оперативной памяти содержат векторы прерываний. Всего доступно 256 векторов. Вектор для прерывания 0 начинается с ячейки памяти 0000:0000, для прерывания 1 – с ячейки 0000:0004, 2 – с ячейки 0000:0008 и т.д. Каждый элемент таблицы указывает на подпрограмму обработки указанного типа прерывания. В табл. 91 описаны вектора таблицы прерываний.

После выполнения подпрограммы обработки прерывания следует восстановить состояния прерванной программы. Для этого всегда последней командой подпрограммы обработки прерывания указывается машинная команда IRET. По этой команде микропроцессор извлекает из стека последовательно три слова и помещает их, соответственно в регистры IP, CS и регистр флагов.

В результате после выполнения подпрограммы обработки прерываний регистровая пара CS:IP будет содержать адрес следующей команды прерванной программы, а регистр флагов – состояние флагов на момент передачи управления ISR.

 

Табл. 91. Основные прерывания таблицы векторов.

Номер Описание
Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0). Обработчик DOS выводит сообщение об ошибке и останавливает выполнение программы. При этом для процессора 8086 адрес возврата указывает на следующую после команды деления команду, а в процессоре 80286 – на первый байт команды, вызвавшей прерывание.
Прерывание пошагового режима. Вырабатывается после выполнения очередной машинной команды, если в слове флагов установлен бит пошаговой трассировки TF. Используется для отладки.
Аппаратное немаскируемое прерывание. Обычно вырабатывается при ошибке четности в оперативной памяти и при запросе прерывания от сопроцессора.
Прерывание для трассировки. Генерируется при выполнении однобайтовой машинной команды с кодом CCh и обычно используется отладчиками для установки точки прерывания.
Переполнение. Прерывание используется для обработки ошибок при выполнении арифметических операций.
Печать копии экрана. Генерируется при нажатии на клавишу PrtScr.
Неопределенный код операции или длина команды больше 10 байт (для процессора 80286).
Особый случай отсутствия математического сопроцессора (процессор 80286).
IRQ0 - прерывание таймера, возникает 18,2 раза в секунду.
IRQ1 - прерывание от клавиатуры. Генерируется при нажатии и при отпускании клавиши. Используется для чтения данных от клавиатуры.
A IRQ2 - каскадирование аппаратных прерываний в машинах класса AT.
B IRQ3 - прерывание асинхронного порта COM2.
C IRQ4 - прерывание асинхронного порта COM1.
D IRQ5 - прерывание от контроллера жесткого диска для XT.
E IRQ6 - прерывание контроллера флоппи-диска после завершения операции.
F IRQ7 - прерывание принтера. Генерируется принтером, когда он готов к выполнению очередной операции.
Обслуживание видеоадаптера.
Определение конфигурации устройств в системе.
Определение размера оперативной памяти в системе.
Обслуживание дисковой системы.
Последовательный ввод/вывод.
Расширенный сервис для AT-компьютеров.
Обслуживание клавиатуры.
Обслуживание принтера.
Запуск BASIC в ПЗУ (если есть).
Загрузка операционной системы.
1A Обслуживание часов.
1B Обработчик прерывания Ctrl-Break.
1C Прерывание возникает с частотой 18.2 Гц и вызывается программно обработчиком прерывания таймера.
1D Адрес видеотаблицы для контроллера видеоадаптера 6845.
1E Указатель на таблицу параметров дискеты.
1F Указатель на графическую таблицу для символов с кодами ASCII 128-255.
20-5F Зарезервировано для DOS.
60-67 Прерывания, зарезервированные для пользователя.
68-6F Не используются.
IRQ8 - прерывание от часов реального времени.
IRQ9 - прерывание от контроллера EGA.
IRQ10 - зарезервировано.
IRQ11 - зарезервировано.
IRQ12 - зарезервировано.
IRQ13 - прерывание от математического сопроцессора.
IRQ14 - прерывание от контроллера жесткого диска.
IRQ15 - зарезервировано.
78-7F Не используются.
80-85 Зарезервированы для BASIC.
86-F0 Используются интерпретатором BASIC (если есть).
F1-FF Не используются.