Программирование контроллера прерываний.
Контроллер программируется с помощью команд, которые формируются в регистре АL центрального процессора и передаются в ПКП по команде OUT. Различают два вида команд программирования: команды инициализации ICW, используемые для начальной подготовки контроллера к работе, и рабочие команды OCW, предназначенные для задания маски, различных режимов работы ПКП, а также для обеспечения контрольного считывания содержимого регистров ПКП. Управляющие сигналы, которые сопровождают подачу команд, приведены в табл. 4.1.
Таблица 4.1.
A0 | D4 | D3 | RD | WR | CS | Операция |
ШД -> ОСW2 | ||||||
ШД -> ОСW3 | ||||||
Х | ШД -> ICW1 | |||||
Х | Х | ШД -> ICW2, ICW3, ICW4, OCW1 | ||||
- | - | РЗП, РОП -> ШД | ||||
- | - | РМП -> ШД | ||||
Х | Х | Х | Нет операции (выходыD7 – D0 | |||
Х | Х | Х | Х | Х | - в третьем состоянии) |
Различают четыре основных режима работы контроллера: полной вложенности, циклического приоритета, специального маскирования и поллинга (последовательного опроса). Режим полной вложенности, при котором каждый вход запроса прерываний имеет фиксированный приоритет от высшего уровня (вход IRO) до низшего (вход IR7), является стандартным и не требует использования рабочих команд. Остальные режимы, а также состояние регистра маски РМП могут быть заданы с помощью следующих рабочих команд.
Команда OCW1 устанавливает и сбрасывает разряды регистра РМП: установленный в «1» i-ый разряд регистра маскирует вход IRi; во всех режимах, в результате чего запросы по этому входу не будут вызывать перехода кпрограмме обслуживания.
Команда OCW2 управляет режимами сдвигов приоритетов и окончаний прерываний.
Команда OCW3 служит для установки режимов маскирования, считывания статуса и поллинга.
Режимы работы контроллера.
Режим полной вложенности - устанавливается сразу после окончания инициализации. Приоритеты запросов прерывания упорядочиваются в сторону убывания от 0 до 7. Добавим, что в системе с каскадированием контроллеров полная вложенность обеспечивается только по входам ведущего контроллера. При обслуживании запроса по какому-либо входу ведомого контроллера запросы по другим его входам (даже с более высоким приоритетом) не обслуживаются.
Специальный режим полной вложенности. Применяется тогда, когда в системе используется каскадирование контроллеров и вложенность приоритетов должна сохраняться для каждого контроллера. Этот режим, устанавливаемый командой ICW4, отличается от обычного режима полной вложенности следующим:
- когда обслуживается запрос от некоторого ведомого контроллера, этот контроллер не закрыт от приоритетной логики ведущего контроллера и дальнейшие запросы на прерывание от входов с более высоким приоритетом в пределах ведомого контроллера будут распознаваться ведущим контроллером и инициировать запрос прерывания для ЦП (в обычном режиме полной вложенности ведомый контроллер маскируется, если его запрос находится в обслуживании, так что другие запросы от него не воспринимаются);
- если запускается подпрограмма обслуживания прерывания, то программным путем необходимо проверить, является ли данное прерывание единственным от этого ведомого контроллера. Это. делается с помощью посылки неспецифической команды окончания прерывания EOI на подчиненный контроллер с последующим чтением содержимого РОП и проверкой его на нуль. Если проверка удовлетворена, то такая же команда EOI посылается на ведущий контроллер для анализа его РОП.
Режимы циклического приоритета. Используются в тех случаях, когда требуется установить одинаковые приоритеты на обслуживание ВУ. При этом любое обслуженное ВУ получает низший приоритет, а приоритеты остальных устройств циклически сдвигаются относительно него. Повторное обслуживание ВУ возможно лишь после обслуживания всех остальных устройств. Такой режим автоматического сдвига приоритетов называется режимом А и устанавливается командой OCW2.
В контроллере имеется также режим программного сдвига приоритетов - режим В. В этом случае разработчик может с помощью команды OCW2 задавать номер входа, которому будет присвоен низший приоритет, а приоритеты других входов зафиксируются по отношению к заданному.
Режим cпециального маскирования. Применяется для того, чтобы программы обслуживания прерываний могли динамически изменять структуру системных приоритетов в процессе работы. Например, при выполнении какой-либо части подпрограммы обслуживания необходимо запретить запросы более низких уровней, а при выполнении другой части - разрешить их. Трудность реализации таких действий состоит в том, что пока выполняется подпрограмма и соответствующий разряд в регистре РОП не сброшен, контроллер не реагирует на запросы с более низким приоритетом. Для разрешения прерываний со всех уровней (в том числе и с более низких) устанавливается режим специального маскирования (затенения), при котором запрещается только прерывание на данном уровне. Этот режим задается и отменяется командой OCW3.
![]() ![]() ![]() ![]() |
Рис. 4.2. Схема каскадирования ПКП
Режим опроса (поллинга). Применяется для организации обслуживания запросов прерываний по инициативе программы, выполняемой МП. При этом прерывания ЦП запрещаются путем сброса флага IF и используется команда POLL, которая задается с помощью OCW3. Тогда контроллер воспринимает следующий импульс по входу RD как подтверждение прерывания и выдает на ШД следующий байт: D7 = 1 - устанавливается .в «1», если на вход данного контроллера поступил запрос; D2 - D0 - задают двоичный код входа высшего уровня среди тех, по которым поступили запросы. С помощью команды POLL последовательно опрашиваются все контроллеры прерываний в системе, что позволяет легко наращивать число уровней приоритетов сверх 64. В этом режиме таблица адресов подпрограмм обслуживания не используется, и он полезен в тех случаях, когда одна подпрограмма применяется для обслуживания нескольких уровней прерываний.
Каскадирование контроллеров прерываний.Контроллеры прерываний имеют встроенные средства для их каскадирования с целью увеличения числа уровней прерываний. На рис. 4.2 показана схема каскадирования, содержащая три контроллера, в которой контроллер ПКП0 является ведущим, а остальные два - ведомыми. Включение контроллера в качестве ведущего или ведомого определяется соответствующим подключением вывода SP/EN к источнику питания в первом случае и к общей шине - во втором. Шины каскадирования CAS0–CAS2 всех контроллеров соединяются параллельно, причем выводы CAS0-CAS2 ведущего контроллера работают как выходы, а у ведомых контроллеров - как входы. Когда активизируется вход запроса ведомого контроллера, ведущий контроллер разрешает ведомому выдать номер соответствующего уровня прерывания по второму импульсу INTA.
Дата добавления: 2018-11-26; просмотров: 1102;