Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
20.03.2015
Размер:
273.92 Кб
Скачать

7.2.4. Управление запросами устройств

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

Обычно для этого используется один разряд, разрешающий или запрещаю­щий прерывания, как, например, флаг разрешения прерывания от клавиатуры KEN и флаг разрешения прерывания от дисплея DEN в регистре CONTROL на рис. 7.3. Когда такой флаг установлен, устройство генерирует запрос прерывания, как только устанавливается соответствующий флаг в регистре STATUS. Одновре­менно интерфейсная схема устанавливает разряд KIRQ или DIRQ, указывая та­ким образом, что данное устройство запросило прерывание. Если флаг разрешения прерывания равен 0, интерфейсная схема не генерирует запросов прерываний не­зависимо от того, какой флаг состояния активен.

Существует два независимых механизма управления запросами прерывания. Со стороны устройства решение о том, можно ли ему генерировать запросы преры­вания, зависит от состояния разряда разрешения на прерывание. Со стороны про­цессора решение о том, будет ли принят запрос на прерывание, зависит либо от разряда разрешения прерываний в регистре FX, либо от системы приоритетов.

Пример 7.3___________________________________________________________________

Рассмотрим процессор, в котором используется векторная схема прерываний. Начальный адрес подпрограммы обработки прерываний хранится в памяти по адресу INTVEC. Прерывания разрешаются установкой разряда разрешения пре­рываний IF (9 разряда) в слове состояния процессора. Клавиатура и дисплей, подключенные к этому процессору, имеют регистры состояния и данных, а также управляющий регистр (рис. 7.3).

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

1. Загружаем начальный адрес программы обработки прерывания по адресу INTVEC.

2. Загружаем адрес LINE в память по адресу PNTR. Программа обработки прерываний будет использовать его в качестве указателя для сохранения вводимых символов в памяти.

3. Разрешаем прерывания от клавиатуры, для чего устанавливаем в 1 второй разряд регистра CONTROL.

4. Разрешаем прерывания в процессоре, для чего устанавливаем в 1 разряд IF в регистре состояния процессора FLAGS.

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

1. Прочитать из регистра входных данных клавиатуры введенный символ. В ответ интерфейсная схема удалит свой запрос прерывания.

2. Сохранить символ в памяти компьютера по адресу, указанному в PNTR, и увеличить значение PNTR.

3. По достижении конца строки запретить прерывания от клавиатуры и про­информировать об этом программу Main.

4. Выполнить команду возврата из процедуры обработки прерывания.

Соседние файлы в папке Архитектура компьютеров