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

(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) (65)

пульс INTA от процессора ведущий контроллер выдает на щину данных код операции CALL, а на линии CAS2-0 - идентификатор ID2-0 прерывающего ведомого контролле-ра. Поэтому на второй и третий импульсы 1NTA ведомый прибор выдает запрограммированный начальный адрес подпрограммы обслуживания. Кроме того, устанавливаются соответствующие прерывающим входам биты регистров ISR обоих контроллеров. Следовательно, при заверщении подпрограммы обслуживания необходимо выдать два приказа EOI: по одному для ведущего и ведомого контроллеров.

При наличии в системе нескольких контроллеров каждый из них инициализируется специальной последовательностью приказов. В табл. 5-4 приведена последовательность инициализации контроллеров, соединенных в соответствии с рис. 5-15. Таблица переходов ведущего контроллера начинается по адресу 100Н, ведомого контроллера А -по адресу 120 Н, ведомого контроллера В - по адресу 140 И, и все имеют 4-байтный интервал. Приказ ICW3 ведущего контроллера показывает наличие ведомых контроллеров на входах IRs и IRe, а поля ID2-0 в приказах TCW3 ведомых контроллеров содержат 011 и 110. Получающаяся структура приоритетов показана на рис. 5-15.

Разработка подпрограмм обслуживания прерываний для системы с несколькими контроллерами ставит ряд проблем. Пусть ведущий контроллер и ведомый контрол-

Таблица 5-4

Инициализация ведущего и ведомого контроллеров

Контроллер

Приказ

Ведущий

ICWi

ICW2

ICW3

Ведомый А

ICW1

ICW2

ICW3

Ведомый В

ICW1

ICWa

ICW3



лер А отреагировали на запрос прерывания (то есть установлены биты ISR и ISR3) и формируется прерывание на входе IR. Ведомый контроллер А сформирует сигнал INT, но ведущий контроллер не воспримет его из-за установленного в регистре ISR бита ISR3 до получения приказа EOI. Этим нарушается вложенность прерываний, так как приоритет запроса по входу IR выше приоритета обслуживаемого запроса IR .

Для решения этой проблемы подпрограмма обслуживания периферийного устройства, сигнал прерывания которого подключен к ведомому контроллеру, должна замаскировать у ведущего контроллера входы IR с меньшим приоритетом (в данном случае IR7-4), а затем выдать в ведущий контроллер приказ EOI того входа, к которому подключен ведомый контроллер. Этими действиями обеспечивается восприятие ведущим контроллером прерываний с большим приоритетом (в рассматриваемом примере IR* o). Если входы ведущего контроллера с меньшими приоритетами не замаскировать, он будет реагировать на запросы IR7-4, так как бит ISR3 сброшен приказом EOI.

Подпрограмма должна также сохранять информацию о том, какой вход ведомого прибора с наименьшим приоритетом обслуживается. Маски входов ведущего контроллера должны сбрасываться при завершении подпрограммы обслуживания прерывания с наименьшим приоритетом ведомого контроллера. Если обслуживается только прерывание от входа IRA , то маски должны сбрасываться соответствующей ему подпрограммой обслуживания. Но в рассмотренном выше примере подпрограмма входа IR возвращается к подпрограмме обслуживания прерывания IR . Следовательно, подпрограмма, инициированная прерыванием IR , должна не сбрасывать маски, а дать возможность сбросить их подпрограмме обслуживания IR. Это реализуется считыванием и временным запоминанием содержимого регистра IMR ведущего контроллера при вызовах подпрограмм прерываний ведомого контроллера с последующим восстановлением содержимого IMR.

Ниже приведен пример подпрограммы обслуживания прерывания IR . В ней по-прежнему используются символические адреса ADR1 (Ао=0, CS"=0) и ADR2 (Ао = 1, CS=0) ведущего контроллера и вводится адрес ADRA (Ао=0, CS=0) ведомого контроллера.



Метка IR5A:

Операнд

Комментарий

PUSH

Запоминание всего сос-

PUSH

тояния процессора

PUSH

PUSH

ADR2

Считывание IMR веду-

щего контроллера

E. A

Запоминание в регист-

ре Е

A, OFOH

Маскирование IR7-IR4

ADR2

A, 63H

Адресуемый EOI бига

ADRl

ISR3

Разрешение прерыва-

; Здесь находится собственно подпрограмма обслуживания

Запрещение прерыва-

ний для приказов

A, 20H

Неадресуемый EOI ве-

ADRA

домого контроллера

A, E

Восстановление 1MR

ADR2

ведущего контрол-

лера

Восстановление состоя-

; ния процессора

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

; НИИ

, Возврат

5-5. ВВОД-ВЫВОД С ПРЯМЫМ ДОСТУПОМ к ПАМЯТИ

Обмен данными с медленнодействующими периферийными устройствами, например посимвольным принтером, организуется по прерываниям, инициирующим передачу каждого байта или слова данных. Если подпрограмма обслуживания запроса прерывания длится 50 мкс, а скорость передачи не превыщает 100 символов/с, то на ввод-вывод расходуется не более 0,5 % времени процессора. Однако при передаче между основной и внещней памятью ЭВМ больших блоков данных (128-2048 байт) производительности (или пропускной способности) процессора в режиме прерываний недостаточно. Например, в накопителях на гибких дисках с одинарной плотностью записи скорость передачи после локализации требуемых данных составляет 31,25К байт/с (интервал между байтами 32 мкс), а при двойной плотности записи скорость передачи будет 62-,5К



(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)