Главная -> Книги

(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) ( 57 ) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124) (57)

кированы) и процессор не реагирует на сигнал INT=1. С помощью команд разрешения EI и запрещения DI прерываний можно программно управлять состоянием триггера INTE, и пользователь может защитить от прерываний критические сегменты прикладной программы.

При восприятии прерывания триггер прерываний IFF переводится в нулевое состояние, что приводит к запрещению инкремента программного счетчика и генерированию сигнала подтверждения прерывания INTA. Отметим, что при этом сбрасывается триггер INTE и в дальнейшем разрешить прерывания можно только командой EI. После выполнения команды EI процессор обязательно выполняет еще одну команду, даже если на входе INT действует сигнал прерывания INT=1.

В мини-ЭВМ для программного управления прерываниями каждого периферийного устройства в их регистрах управления и состояния предусмотрен специальный бит ШТ ENB разрешения прерываний (маска). Иногда биты масок всех устройств объединяются в специальной регистр. Наконец, в некоторых процессорах бит маскирования прерываний входит в слово состояния процессора PSW.

Запросы немаскируемых прерываний по входу NMI процессор воспринимает всегда, независимо от того, разрешены прерывания или нет. Однако до реакции на сигнал NMI процессор все же завершает выполнение текущей команды. Обычно на вход NMI подается сигнал от схемы, фиксирующей уменьшение напряжения сети до некоторого критического уровня. Быстродействие процессора достаточно велико, чтобы за время от момента восприятия сигнала NMI до уменьшения напряжения питания ниже минимального допустимого выполнить несколько команд. Этими командами содержимое всех внутренних регистров и другая важная информация записываются в энергонезависимую память с резервным аккумуляторным питанием.

Подпрограммы обслуживания прерываний. Рассмотрим несколько подробнее организацию подпрограммы обслуживания прерывания, используя в качестве простого примера вывод текста на электрифицированную пишущую машинку (ЭПМ). Номинальная скорость печати ЭПМ не превышает 25 символов/с, т. е. печать одного символа длится 40 ООО мкс.

Будем считать, что ЭПМ определяет возможность передачи ей символа сигналом «готовности печати», линия которого подключена на вход INT процессора. Пусть в некоторый момент времени ЭПМ формирует запрос на обслу-



живанне; другими словами, сигнал прерывания становится активным (ШТ=1). Предположим, что, реагируя на прерывание, процессор сбросил триггер INTE разрешения прерываний, автоматически включил содержимое программного счетчика в стек и каким-либо образом загрузил в программный счетчик начальный адрес START подпрограммы обслуживания прерываний ЭПМ.

Выводимый текст, т. е. последовательность 8-битных кодов символов, находится в некоторой области памяти, называемой выходным буфером, и признаком его окончания является некоторый особенный символ, например звездочка (*). Указатель выходного буфера, т. е. адрес текущего выводимого символа, находится в ячейке памяти с символическим адресом PTR. Символический адрес регистра данных ЭПМ обозначим PRINT. С учетом всех сделанных предположений подпрограмма обслуживания, рассчитанная на микропроцессор КР580, принимает следующий вид:

Метка START:

Операнд

Комментарий

PUSH

; «Освобождение» аккумуля-

PUSH

; тора и основного указателя ; памяти

LHLD

; Указатель выходного буфера

A, M

; Символ в аккумуляторе

; Конец текста?

ENDT

; Да, вывод закончен ; Вывод символа в ЭПМ

PRINT

; Продвижение указателя буфера

SHLD

; Запоминание указателя

; Восстановление регистров

; процессора

; Разрешение прерываний

; Возврат в прерванную при-

грамму

Здесь ENDT обозначает символический начальный адрес подпрограммы, к которой переходит микропроцессор при завершении вывода текста из буфера.

Отметим, что разрешение прерываний осуществляется в конце подпрограммы командой EI, поэтому при выводе символа процессор игнорирует прерывания других периферийных устройств, если они возникают. Кроме того, при выполнении команды OUT флажок готовности ЭПМ сбрасывается, для чего используется сигнал загрузки кода символа с шины данных в регистр с адресом PRINT,



Длина подпрограммы составляет 21 байт, а Время выполнения эквивалентно 122 тактам синхронизации, что при частоте fc=2 МГц соответствует 61 мкс. Сравнение этой величины с продолжительностью вывода одного символа в цикле ожидания (40 ООО мкс) показывает, насколько увеличивается эффективность процессора при организации прерываний. Когда ЭПМ работает с максимальной скоростью, на управление выводом расходуется всего 0,15 % времени процессора.

Идентификация прерывающего устройства. Когда в ЭВМ имеется несколько периферийных устройств, работающих в режиме прерываний, сигналы их запросов на обслуживание объединяются по схеме ИЛИ и подаются на вход INT процессора. Следовательно, при наличии активного сигнала ШТ= 1 без дополнительных действий и аппаратных средств невозможно определить, какое устройство должен обслуживать процессор, тем более, что запросы на обслуживание могут формироваться одновременно несколькими устройствами. Другими словами, возникает проблема идентификации прерывающего устройства, т. е. однозначного перехода к определенной подпрограмме обслуживания. Разработано несколько способов рещения этой проблемы, различающихся скоростью реакции процессора и объемом дополнительных аппаратных средств. При реализации любого способа необходимо назначить устройствам определенные приоритеты и учитывать их таким образом, чтобы процессор, реагируя на сигнал прерывания, выбирал для обслуживания запрашивающее устройство с максимальным приоритетом.

Программный полинг. Простейшее решение проблемы идентификации, почти не требующее дополнительных аппаратных средств, заключается в программном опросе (полните) флажков готовности (т. е. сигналов прерываний) периферийных устройств. Реагируя на прерывание, процессор переходит к подпрограмме полинга, находящейся в фиксированной области памяти с известным начальным адресом. Этот начальный адрес загружается в программный счетчик после запоминания его предшествующего содержимого в стеке.

На рис. 5-7 приведен типичный вариант программного полинга. Первым проверяется флажок готовности устройства У1 с наибольшим приоритетом. Если оно не запрашивало обслуживания, опрашивается следующее устройство и. т. д. Когда встречается первое устройство, готовое к операциям ВВ, управление передается подпрограмме обслу-



(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) ( 57 ) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124)