Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Вариант 18.docx
Скачиваний:
25
Добавлен:
17.06.2016
Размер:
188.59 Кб
Скачать

2.4. Средства управления прерываниями

Каждый раз перед выполнением очередной команды CPU производит проверку наличия запроса прерывания INTR. При наличии запроса прерывания останавливается выполнение основной программы и происходит переход к обработке прерывания. Выясняется, разрешены ли прерывания (анализ состояния разряда IF регистра флагов). Если разрешены, то процессором выдается сигнал INTA в контроллер прерываний для получения номера вектора прерывания. В стеке сохраняется содержимое регистров и адрес текущей команды, чтобы был возможен возврат к выполнению основной программы. Затем выставляется запрет прерываний (IF=0). По номеру прерывания в таблице векторов определяется адрес обработчика прерывания. По этому адресу находится начало программы обработки прерывания. По окончании работы этой программы из стека извлекается содержимое регистра флагов и счетчика команд, происходит возврат к основной программе.

Контроллер необходим для слежения за соблюдением приоритетов прерываний, а также для присвоения номера каждому запросу.

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

Каждая программа обработки прерывания завершается командой IRET, выполнение которой обеспечивает возврат к прерванной программе для продолжения ее выполнения.

Логическая схема обработки прерывания реализуется в виде программируемого контроллера прерываний (PIC), который располагается на кристалле вместе с CPU.

IR7

№ запроса

Все регистры контроллера имеют адреса (либо четные, например 20h, либо нечетные – 21h). Кроме регистров, изображенных на рисунке, в состав контроллера входят дополнительные управляющие регистры. Запрос от ВУ помещается на регистр запросов прерывания (IRR), на нем могут одновременно размещаться несколько запросов. Наиболее приоритетным считается IR0 запрос. Для выбора запроса (на IRR) с максимальным приоритетом используется логическая схема маскирования и выделения приоритета. Выбранный запрос идентифицируется в виде номера запроса, задаваемого с помощью трех младших разрядов регистра типа прерывания. Старшие разряды регистра типа прерывания устанавливаются при инициализации контроллера таким образом, чтобы величина (N), содержащаяся в данном регистре, соответствовала адресу вектора прерывания для выбранного запроса. Для выбранного запроса устанавливается бит в регистре ISR обслуживания прерывания, а сам запрос в IRR сбрасывается. Это свидетельствует о начале обслуживания прерывания.

Логическая схема маскирования и выделения приоритета формирует сигнал INT, поступающий на специальный вход процессора INTR (запрос прерывания). Если в CPU флаг прерывания IF установлен в 1, что означает отсутствие маскирования внешних запросов прерывания, то CPU выдает сигнал INTA (подтверждение прерывания), предоставляя возможность контроллеру сформировать АВП.

По сигналу INTA все запросы на IRR, имеющие приоритет равный или меньший приоритета выбранного для обслуживания запроса, маскируются до тех пор, пока не будет обнулен бит в регистре ISR для обслуживаемого прерывания. Этот сброс осуществляется программой обслуживания прерывания. Для сброса необходимо в программе обслуживания прерывания выполнить команду OUT, в которой задан известный адрес регистра ISR.

После появления сигнала INTA контроллер формирует на регистре типа прерывания АВП, который подается на младшие разряды D0-D7 шины данных CPU.

АВП (адрес вектора прерывания) используется для указания адреса ячейки памяти (ОЗУ), в которой хранится адрес (IP) начала программы обработки запроса прерывания.

Типы прерываний представлены группами, каждая из которых объединяет восемь типов прерываний. Номер группы задается с помощью старших (с 3 по 7) разрядов регистра типа. Для обслуживания запросов прерываний от внешних устройств необходимо при инициализации занести в регистр типа номер группы, равный величине (const) 00001, так как аппаратным прерываниям соответствуют типы 8h-0Fh, 70h-77h.

N

Регистр типа

7  3

2  0

8

00001

000 – системный таймер

9

00001

001  клавиатура

F

00001

111 – принтер (LPT1)

Классификация прерываний:

  1. 0-7 – логические;

  2. 8-F, 70h-77h – аппаратные;

  3. 10-1Fh, 40-5Fh – BIOS;

  4. 20-3Fh – DOS;

  5. 80-F0h – Basic;

  6. 60-67h – для пользовательских нужд.

Рассмотренные примеры типов прерываний входят в состав 256 возможных типов.

Схема обработки прерывания имеет следующий вид:

4

IF==1

5

ГСА

Нет

Да

  1. Выдача в контроллер прерывания сигнала INTA для получения от контроллера АВП.

  2. Сохранение в стеке IF из регистра флагов и АВ (адреса возврата) из CS, IP.

  3. Сброс IF (запрет прерываний).

  4. Перемещение из IVT (таблицы векторов прерываний) адреса обработчика прерываний на CS, IP.

Адрес в IP используется для вызова процедуры обслуживания прерывания (ISR).

IP

Адрес1

АдресN

ISR 1

Для обеспечения вложенных прерываний

необходимо в начале процедуры обработки

прерывания установить IF командой STI.

ГСА

ISR N

При выполнении в обработчике команды RET из стека перемещаются в RF, IP сохраненные IF, АВ.

1

ГСА