
Ввод вывод по прерываниям
В программно-управляемом вводе выводе ожидание готовности ПУ к обмену данными значительно уменьшает производительность системы. По этой причине в системах с критичными временными соотношениями организуется ВВ по прерываниям. Главная его особенность заключается в том, что действия по ВВ инициируют сами ПУ, генерируя сигнал прерывания или запроса на обслуживание.
Фактически этот сигнал представляет собой состояние бита готовности устройства. При восприятии сигнала прерывания МП приостанавливает выполнение текущей программы, переходит к подпрограмме обслуживания прерывания (обработку прерывания) соответствующего ПУ, обменивается с ним данными и возобновляет выполнение прерванной программы.
Введение прерываний опирается на тот факт, что пропускная способность МП превышает быстродействие многих ПУ. Например скорость печати пишущих машинок составляет 25 символов/с, скорость ленточного перфоратора 160 символов/с, а скорость считывания с перфоленты 1500 символов/с, а пропускная способность МП в режиме прерывания достигает порядка 10000 символов/с и более. Обслуживая ПУ по их запросам, МП может управлять работой нескольких устройств с их номинальным быстродействием.
Эффективность обработки прерываний является одним из основных критериев выбора МП, особенно систем реального времени.
В
нешне
реакция МП на прерывание очень похожа
на вызов подпрограммы. Однако вызов
подпрограммы запланирован и полностью
предсказуем, а вызов обработчика
прерываний осуществляется внешним
сигналом, момент возникновения которого
предсказать невозможно.
Тем не менее внешняя аналогия реакции на прерывание и вызова подпрограммы позволяет считать прерывание внешним (аппаратным) вызовом подпрограммы. Действия, выполняемые обработчиком прерывания, ограничены только программными возможностями МП.
Аппаратные средства обработки прерываний в самом МП К580 весьма ограничены. На вход прерывания INT подаются сигналы запросов на обслуживание от ПУ. МП реагирует на них, если установлен внутренний триггер разрешения прерываний и на входе INTE действует H-уровень. В устройстве управления имеется также недоступные программисту триггер прерывания, выполняющий функцию синхронизатора. Реагируя на сигнал INT=1 (при условии что INTE=1), МП завершает выполнение текущей команды и вводит в цикл команды рестарта RST, в результате чего содержимое РС загружается в стек как адрес возврата, а в РС загружается адрес первой команды обработчика прерывания соответствующего ПУ.
Обслуживание запросов только одного ПУ вызывает затруднения, т.к. начальный адрес обработчика прерывания можно зафиксировать аппаратно. Ситуация несколько усложняется, когда на линию INT подключается сигналы прерываний от нескольких ПУ. В системе с несколькими ПУ обязательно приходится присваивать им определенные приоритеты и при одновременном возникновении запросов от нескольких ПУ первым обслуживается устройство с наивысшим приоритетом.
Приоритеты ПУ устанавливаются по максимально допустимому времени ожидания или обслуживания: чем меньше время ожидания, тем выше приоритет ПУ.
При организации В ПМС одноуровневых прерываний обслуживание любого устройства не может быть прервано на обслуживание от других устройств, независимо от приоритета.
При организации многоуровневых прерываний запрос от устройства с большим приоритетом может прервать подпрограмму обслуживания устройства с меньшим приоритетом.
Контроллер пишущей машинки
Рассмотрим сначала особенности обработки прерываний от единственного ПУ – пишущей машинки, на которую вводиться текст. Сигнал «Готовность к печати» фиксируется в RS-триггере контроллера пишущей машинки. Выход Q триггера соединен со входом INT МП. В состав контроллера введены также порт вывода с адресом PRINT для приема выводимого символа и порт ввода для формирования команды RST7.
Пусть в некоторый момент времени пишущая машинка генерирует запрос на обслуживание INT=1 и прерывания разрешены INTE=1.
В результате этих действий сигналом INTA# в регистр команд загружается команда рестарта RST7 (согласно подключению порта ввода в контроллере пишущей машинки биты ААА команды рестарта имеют значения 111). Выполнение команды RST7 состоит из загрузки адреса возврата в стек и передачи адреса 0038h в РС, представляющего собой начальный адрес обработки прерывания пишущей машинки. Вводимый текст хранится в некоторой буферной области памяти и признаком его окончания служит код символа *. Две смежные ячейки CHAR хранят адрес текущего символа буферной области. В процессе инициализации в них записывается начальный адрес буфера текста. При выводе очередного символа потребуется основной указатель памяти МП – регистры HL и А. Следовательно, их текущее содержимое необходимо где то сохранить для последующего восстановления после обслуживания прерывания. В качестве временного хранилища содержимого любых внутренних регистров удобно использовать стек. Ассемблерная программ обработчика прерываний пишущей машинки представлен ниже.
org 0038h ; фрагмент программы начинается с
; адреса 0038h
PUSH PSW ; временное запоминание состояния
PUSH H ; процессора
LHLD CHAR ; адрес символа в регистрах (H, L)
MOV A,M ; символ в А
CPI '*' ; проверка окончания текста
JZ ENDT ; вывод закончен?
OUT PRINT ; нет, вывод символа
INX H ; переход к следующему символу
SHLD CHAR ; восстановление состояния
POP H ; восстановление состояния
POP PSW ; процессора
ENDT: EI ; разрешение прерываний
RET ; к прерванной программе
*** ; реакция на окончание текста
Длина программы составляет 21 байт, время выполнения соответствует 122 периодам синхронизации. При частоте синхронизации 1.5 МГц обслуживание запроса пишущей машинки длиться 90 мкс (с учетом цикла команды RST). Специально отметим наличие команды разрешения прерываний EI, т.к. в цикле команды рестарта МП автоматически запрещает прерывания. Возобновление выполнения прерванной программы осуществляется с помощью команды возврата RETURN.