Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_i386.docx
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
820.47 Кб
Скачать
    1. Реализация подсистемы прерываний

Система векторных прерываний может быть построена различными способами, однако в настоящее время наиболее часто она реализуется с помощью БИС ПКП I8259A. Микросхема выполнена по n-МОП технологии и размещается в 28-выводном корпусе. Она совместима с ТТЛ-схемами. Для работы БИС требуется единственный источник питания +5В.

На основе одного ПКП I8259A формируется 8-уровневая приоритетная система векторных прерываний для МП типа I82386. Несколько контроллеров могут соединяться каскадно для расширения числа прерывания до 64. ПКП обеспечивает работу в нескольких режимах, позволяя оптимизировать логику работы системы прерываний согласно требованиям, предъявляемым к МПС. УГО ПКП приведено на рисунке 12.

Рисунок 12 – УГО программируемого контроллера прерываний I8259A

Назначение выводов микросхемы I8259A приведено в таблице 7.

Таблица 7- Назначение выводов микросхемы I8259A

Вывод

Обозначение

Тип вывода

Функциональное назначение вывода

11,10,9,8,7,6,5,4

D0-D7

Входы-выходы

Канал данных

27

A0

Вход

Адрес 0-го разряда

18-25

IRQ0- IRQ7

Вход

Запрос прерывания

1

CS

Вход

Выбор микросхемы

2

WR

Вход

Запись информации

3

RD

Вход

Чтение информации

26

INTA

Вход

Подтверждение прерывания

16

MS/SV

Вход

Выбор ведомой микросхемы

12,13,15

CAS0-CAS2

Входы-выходы

Шина каскадирования

17

INT

Выход

Прерывание

14

GND

-

Общий

28

UCC

-

Напряжение питания

Работа микросхемы в автономном (без каскадирования) режиме происходит следующим образом. Один или несколько запросов на прерывание (переход из 0 в 1) подаются на входы IRQ0-IRQ7 и запоминаются в регистре запросов IRR (Interrupt Request Register).Регистр обслуживания ISR (In Service Register) содержит все запросы, которые в данное время находятся в стадии обработки. Регистр маски IMR (Interrupt Mask Register) используется для маскирования отдельных уровней. Запрет некоторого уровня соответствует единице в соответствующем разряде IMR.

Приоритетная логика выбирает разрешённый запрос на прерывание с наивысшим приоритетом из числа поступивших и сравнивает его с текущим приоритетом запросов, находящихся на обслуживании. При превышении последнего ПКП генерирует сигнал INT. Микропроцессор подтверждает приём запроса INT (при разрешённом восприятии прерываний) генерацией кода шинного цикла подтверждения прерывания на выходах М/Ю#, D/C#, W/R#, в результате чего СК вырабатывает сигнал подтверждения прерывания INTA#, поступающий на ПКП. Под воздействием сигнала запрос с высшим приоритетом из IRR фиксируется в соответствующем разряде ISR. Принятый к обслуживанию IRR-бит сбрасывается, и приём нового запроса разрешается.

При работе совместно с процессором I82386SX ПКП должен выдавать на процессор номер вектора прерывания n, для чего на него подаётся ещё один сигнал INTA#, по которому МП считывает с шины данных значение вектора прерывания n.

Отличительной особенностью БИС типа I8259A является её программируемость. Программирование осуществляется двумя типами управляющих слов: командами инициализации ICW (Initialization Command Word) и управления OCW (Operation Command Word). Четыре команды инициализации ICW1-ICW4 загружаются перед началом работы и служат для установки БИС в исходное состояние. Для программирования одиночного ПКП достаточно только две команды инициализации ICW1 и ICW2. Команды управления OCW1-OCW3 могут быть переданы в ПКП в любое время после выполнения инициализации. Они предназначены для оперативного управления работой контроллера и в рамках данного курсового проекта не рассматриваются.

При значениях разряда А0=0 ША и четвертого разряда ШД D4=1 входной байт интерпретируется как ICW1 (см. рисунок 13). Разряд S определяет наличие одного или нескольких ПКП в системе. Остальные разряды при работе в МПС с процессорами, начиная с i8086, могут принимать любые значения.

Рисунок 13 – Формат управляющего слова ICW1

Формат управляющего слова ICW2 приведен на рисунке 14. При работе с процессорами начиная с i8086 и выше разряды D7-D3 определяют старшие биты номера прерывания n для каждого входа IRQ ПКП. Младшие 3 бита номера прерывания определяются номером входа IRQ, на который поступил запрос прерываний.

Рисунок 14 – Формат управляющего слова ICW2

Набор действий процессора после появления сигнала INTR на его входе и выдачи сигнала INTA заключается в определении источника прерывания и вызова соответствующей программы обработки.

Обработка прерываний (как внешних, так и внутренних) в реальном режиме микропроцессора производится в три этапа:

  1. Прекращение выполнения текущей программы.

  2. Переход к выполнению и выполнение программы обработки прерываний.

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

Первый этап должен обеспечить временное прекращение выполнения текущей программы таким образом, чтобы потом прерванная программа продолжила свою работу так, как будто никакого прерывания не было. Разделяемыми между программами (подпрограммами) ресурсами являются регистры микропроцессора, в том числе регистр флагов, поэтому их содержимое нужно сохранять. Обязательными для сохранения являются регистры cs, ip и flags\eflags, поэтому они при возникновении прерывания сохраняются микропроцессором автоматически. Пара cs:ip содержит адрес команды, с которой необходимо начать выполнение после возврата из программы обслуживания прерывания, а flags\eflags - состояние флагов после выполнения последней команды прерванной программы в момент передачи управления программе обработки прерывания. Сохранение содержимого остальных регистров должно обеспечиваться программистом в начале программы обработки прерывания до их использования. Наиболее удобным местом хранения содержимого регистров является стек. В конце первого этапа микропроцессор после включения в стек регистров flags, cs и ip сбрасывает бит флага прерываний IF в регистре flags (но при этом в стек записывается предыдущее содержимое регистра flags с еще установленным IF). Тем самым предотвращаются возможность возникновения вложенных прерываний по входу INTR и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы обработки вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti.

В реальном режиме микропроцессора допускается до 256 источников прерываний. Количество источников прерываний ограничено размером таблицы векторов прерываний. Эта таблица выступает связующим звеном между источником прерывания и процедурой обработки. Данная таблица располагается в памяти, начиная с адреса 0. Каждый элемент таблицы векторов прерываний занимает 4 байта и имеет следующую структуру:

  • 1-е слово элемента таблицы - значение смещения начала процедуры обработки прерывания (n) от начала кодового сегмента;

  • 2-е слово элемента таблицы - значение базового адреса сегмента, в котором находится процедура обработки прерывания.

Таким образом, полный размер таблицы векторов прерываний 4 * 256 = = 1024 байт. Поэтому, при выполнении второго этапа обработки прерывания, процессор должен выполнить следующие действия:

  1. По номеру источника прерывания путем умножения на 4 определить смещение (адрес) в таблице векторов прерываний.

  2. Поместить первые два байта по вычисленному адресу в регистр ip.

  3. Поместить вторые два байта по вычисленному адресу в регистр cs.

  4. Передать управление по адресу, определяемому парой cs:ip.

Далее выполняется сама подпрограмма обработки прерывания. Она также может быть прервана, например, поступлением запроса от более приоритетного источника.

По окончании выполнения подпрограммы обработки прерывания необходимо восстановление контекста прерванной программы. Так же, как и на этапе 1, на данном последнем этапе есть действия, выполняемые микропроцессором автоматически, и действия, задаваемые программистом. Основная задача на этапе 3 - привести стек в состояние, в котором он был сразу после передачи управления данной процедуре. Для этого программист указывает необходимые действия по восстановлению регистров и очистке стека. Этот участок кода необходимо защитить от возможности искажения содержимого регистров (в результате появления аппаратного прерывания) с помощью команды cli. Последние команды в процедуре обработки прерывания - sti и iret, при обработке которых микропроцессор выполняет следующие действия:

  1. sti - разрешить аппаратные прерывания по входу INTR;

  2. iret - извлечь последовательно три слова из стека и поместить их, соответственно, в регистры ip, cs и flags.

В результате этапа 3 управление возвращается очередной команде прерванной программы, которая должна была выполниться, если бы прерывания не было. Аппаратные прерывания могут быть инициированы программно командой микропроцессора int n, где n - номер аппаратного прерывания в соответствии с таблицей векторов прерываний. При этом микропроцессор также сбрасывает флаг IF, но не вырабатывает сигнал INTA.

Запрос прерывания (в соответствии с требованиями ТЗ на КП) должен происходить после нажатия кнопки КН2. Для предотвращения дребезга контакта кнопки необходимо применить схему, показанную на рисунке 15.

Рисунок 15 – Схема подавления дребезга контактов и снятия сигнала IRQI после формирования сигнала INTA#

При нажатой кнопке S2 на прямом выходе триггера формируется высокий уровень сигнала IRQi. Для его снятия после появления сигнала INTA# можно использовать D- триггер, устанавливаемый в состояния логической 1 нарастающим фронтом сигнала IRQI и сбрасываемый низким уровнем INTA#.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]