Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба прерывания / Материалы / Лаб_раб_контр_прерываний.doc
Скачиваний:
0
Добавлен:
09.02.2024
Размер:
474.62 Кб
Скачать

1.2. Система прерываний вм86.

В МП ВМ86 каждому источнику запроса на прерывание ставится в соответствие так называемый тип (номер) прерывания. Тип имеет формат 1 байт. То есть всего возможно 256 различных источников запросов. Для того чтобы МП по известному типу мог определить начальный адрес обработчика, в ОП создается таблица векторов прерываний. Каждый вектор представляет собой пару «сегмент:смещение» и однозначно задает начальный адрес обработчика прерывания данного типа. В ОП вектор занимает 4 байта. Таблица прерываний ВМ86 всегда располагается в младшем килобайте ОП. Ее формат приведен на рис. 2.

Здесь displ и disph – соответственно младший и старший байт смещения, а segl и segh – младший и старший байт сегмента. Из рис.20 видно, что для определения адреса вектора достаточно взять тип и умножить его на 4. Именно так и вычисляет адрес вектора МП. Так как таблица прерываний располагается по младшим адресам ОП, никакие сегментные регистры в формировании адреса вектора участия не принимают.

Рис. 2 Формат таблицы прерываний

При восприятии любого прерывания ВМ86 выполняет следующую последовательность действий:

  • запоминает в стеке содержимое регистра флагов f и адрес возврата (содержимое регистров cs и ip);

  • по известному типу находит в таблице соответствующий вектор и загружает disp в ip, а seg – в cs, тем самым, передавая управление обработчику.

Помимо рассмотренных выше двух пунктов, МП также сбрасывает в ноль флаги if и tf, маскируя внешние прерывания и запрещая пошаговое выполнение обработчика.

Возврат из обработчика в фоновую программу осуществляется по команде iret, которую ставит в обработчике программист. Данная команда последовательно выталкивает из стека три слова. Первое попадает в ip, второе в cs и третье в регистр флагов f. Таким образом, управление передается фоновой программе в ту точку, на которую указывает адрес возврата.

1.3. Контроллер прерываний к1810вн59а (i8259а).

Основная задача контроллера – сообщить процессору какое внешнее устройство его запросило.

Подключение ВН59 к системной шине показано на рис. 3.

Рис. 3 Подключение ВН59 к системной шине

Контроллер имеет восемь входов запросов на прерывание (IR7 – IR0). Восприняв запрос на одном из этих входов ВН59, формирует сигнал на выходе INT. Этот сигнал подается на вход INTR ВМ86. Если внешние прерывания не замаскированы (флаг if установлен в единицу), МП подтверждает прерывание, выставляя два сигнала на выходе INTA. Эти сигналы поступают на одноименный вход контроллера, и по второму из них ВН59 выставляет на ШД тип прерывания. Этот тип он формирует следующим образом: старшие пять разрядов типа задает программист при настройке контроллера, а на место младших трех разрядов ВН59 подставляет двоичный номер линии, по которой пришел запрос.

Внутренняя структура ВН59 представлена на рис. 4

Рис. 4. Внутренняя структура ВН59.

Буфер данных используется для связи контроллера с шиной данных процессора (ШД). Контроллер подключается к ШД, когда на его вход CS приходит активный (нулевой) сигнал и при подтверждении прерывания (сигнал INTA). Система распаивается таким образом, чтобы активный CS приходил, когда процессор обращается к одному из двух внутренних портов контроллера командой in или out.

Схема чтения/записи управляет чтением/записью внутренних регистров контроллера. Активный сигнал IOR (вырабатывается при выполнении процессором команды in) задает операцию чтения, активный IOW (команда out) – операцию записи.

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

IRR – восьмиразрядный регистр запросов прерываний. В нем запоминаются все запросы, приходящие на входы IR7 – IR0. Когда прерывание подтверждается процессором (приходит сигнал INTA), соответствующий разряд IRR сбрасывается. Текущее содержимое IRR можно прочитать с помощью команды OCW3 (смотри ниже).

ISR – восьмиразрядный регистр обслуживаемых запросов. Соответствующий бит в этом регистре устанавливается, когда прерывание подтверждается процессором (приходит сигнал INTA). Сбрасывается этот бит, в зависимости от настройки контроллера, либо специальной командой EOI, которую формирует программист, как правило, в конце обработчика, либо автоматически (AEOI). Установленный разряд ISR блокирует (маскирует) восприятие контроллером запросов, имеющих тот же или более низкий по отношению к установленному разряду приоритет (пришедший запрос запоминается в IRR, но запрос INT на процессор не вырабатывается). Устранить блокирующее влияние разрядов ISR можно либо путем их сброса (EIO), либо путем специального маскирования. Текущее содержимое IRR можно прочитать с помощью команды OCW3 (смотри ниже).

IMR – восьмиразрядный регистр масок. Содержит маски, позволяющие заблокировать прохождение поступившего запроса в процессор. IMRi = 0 разрешает запрос на ножке IRi, IMRi = 1 – запрещает.

Несмотря на то, что внутренняя архитектура ВН59 включает в себя довольно много различных регистров, с точки зрения программиста, контроллер содержит всего два адресуемых устройства, выбор между которыми определяет сигнал на линии А0.

В системе могут использоваться несколько ВН59, соединенных каскадно. При этом один контроллер является ведущим (MASTER), а все остальные ведомыми (SLAVE). Выходы INT ведомых контроллеров заводятся на входы IRi ведущего контроллера. Таким образом, максимальное число контроллеров в системе равно девяти, а максимально возможное число источников внешних прерываний равно 64. Например, в IBM-подобных ПЭВМ используются два контроллера прерываний. Ведущему присвоены системные адреса 20h (A0 = 0) и 21h (A0 = 1), ведомому – а0h и а1h. Таким образом, организуется 15 входов запросов на прерывание. Схема подключения контроллеров в IBM проведена на рис. 5.

Рис 5. Каскадное соединение контроллеров в IBM.

Соседние файлы в папке Материалы