Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000544.doc
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.75 Mб
Скачать

10.3. Прерывания в ibm pc

Для управления аппаратными прерываниями в IBM PC AT используется два контроллера прерывания, которые соединены иерархически. Каждая микросхема имеет 8 входов прерываний. Поэтому имеется 16 типов прерываний поступающих по соответствующим линиям IRQ контроллеров прерывания. Сигналы IRQ0-IRQ7 относятся к ведущему контроллеру, IRQ8-IRQ15 – к ведомому. Для каскадирования второго контроллера прерываний задействован вход IRQ2. Тогда распределение приоритетов в порядке убывания будет: IRQ0-IRQ2, IRQ8-IRQ15, IRQ3-IRQ7. Сигналы IRQ0-IRQ2, IRQ8 и IRQ13 используются в системной плате и недоступны платам расширения.

Назначение некоторых прерываний представлено в таблице 10 2.

Назначение векторов прерывания Таблица 10.2

Номер

прерывания

IRQ

Вектор

INT

Назначение

0

08h

Программируемый таймер

1

09h

Контроллер клавиатуры

3

0Bh

Последовательный порт COM2

4

0Ch

Последовательный порт COM1

5

0Dh

Параллельный порт LPT2

6

0Eh

Контроллер гибкого диска

7

0Fh

Параллельный порт LPT1

13

75h

Математический сопроцессор

14

76h

Контроллер жесткого диска

Напомним, что каждая микросхема контроллера прерываний имеет 3 однобайтных регистра, которые управляют 8 линиями аппаратных прерываний. Регистр запроса на прерывание (IRR) устанавливает соответствующий бит, когда линия прерывания IRQ сигнализирует о запросе. Затем микросхема автоматически проверяет, не обрабатывается ли другое прерывание. При этом она запрашивает информацию регистра обслуживания (ISR). Дополнительная цепь отвечает за схему приоритетов. Далее, перед вызовом прерывания проверяется регистр маски прерываний (IMR), чтобы узнать разрешено ли прерывание данного уровня в данный момент времени. Обычно программисты обращаются только к регистру маски прерывания через порт 21Н и командному регистру прерываний через порт 20Н. Программы на ассемблере могут запретить аппаратные прерывания перечисленные выше. Другие аппаратные прерывания, возникающие при некоторых ошибках (деление на 0) не могут быть маскированы.

Имеются две причины запрета аппаратных прерываний.

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

  2. Маскируются только определённые прерывания, когда некоторые определённые прерывания могут взаимодействовать с операциями, критичными к временам. Например, точно рассчитанная по времени процедура ввода/вывода не должна быть прервана длительным дисковым прерыванием.

Выполнение прерываний зависит от значения флага прерывания (9 бит) в регистре флагов процессора. Когда этот бит равен 1, то разрешены все прерывания, которые разрешает маска. Когда бит равен 0, то все аппаратные прерывания запрещены. Чтобы запретить прерывания используется инструкция (команда процессора) CLI, для восстановления прерываний – инструкция STI. Заметим, что машина автоматически запрещает аппаратные прерывания при вызове программных прерываний и автоматически разрешает их при возврате. Можно начинать программу обработки прерывания с инструкции STI, если допускаются аппаратные прерывания. Однако если за инструкцией CLI не следует STI, это может привести к остановке машины, т. к. ввод с клавиатуры будет заморожен. Для маскирования определённых аппаратных прерываний посылается требуемая цепочка битов (байт) в порт с адресом 21h (для ведущего контроллера), который соответствует регистру маски прерываний (IMR). Для маскирования устанавливают те биты регистра маски, которые соответствуют маскируемым номерам линий запросов прерывания. Регистр маски на второй микросхеме контроллера прерываний имеет адрес порта А1h. Для возобновления прерывания необходимо очистить соответствующий бит регистра маски.

Например: блокирование дискового прерывания. Контроллер дискет имеет прерывание IRQ6. Поэтому необходимо установить 6-й бит регистра маски первого контроллера прерывания.

mov AL, 01000000B; маскируем бит 6 пересылкой в регистр маски прерываний

out 21H, AL ;

. . . . .

. . . . . ; программа

. . . . .

mov AL, 0 ;

out 21H, AL ; очистка маски

. . . . .