Организация векторной системы прерываний. Программируемый контроллер прерываний ВН59, страница 4

По окончании очеред­ной процедуры обслужива­ния в контроллер должна быть передана команда EOI, которая сбрасывает ISR-бит с высшим приоритетом. Для этой   цели   используется OCW2 с кодом R=0, SL=0, EOI = 1. При работе в кас­кадном режиме команда EOI выдается дважды: для веду­щего и ведомого приборов.

В более общем случае OCW2 служит для установки в 0 произвольных разрядов ISR и циклического сдвига приоритетов с присвоением

максимального значения любому из восьми возможных уровней. Если операция установки в 0 кодируется установкой в 1 бита OCW2.EOI, то операция циклического сдвига—бита OCW2.R (Rotate). В зависимости от состояния флажка SL (Special Level) возможны две ситуации: операция установки в 0 и (или) циклического сдвига относится к уровню с высшим в данный момент приоритетом из числа находящихся в обслуживании (SL=0); одна и (или) обе операции относятся к явно указываемому в OCW2 уровню (SL=1). В последнем случае номер уровня кодируется в трехразрядном поле L2—LO (Level). Различные комбинации этих функций и соответствующие им коды приведены на рис. 3.47. На их основе можно построить достаточно мощные и гибкие системы прерываний с разнообразными характеристиками.

Применение только команды EOI обеспечивает работу в режиме строго упорядоченных приоритетов, когда все запросы имеют фиксированные и строго упорядоченные приоритеты. Для обслуживания запросов с равными приоритетами должна быть использована команда EOI с циклическим сдвигом. При исполь­зовании команды сдвига одновременно со сбросом ISR-бита, имеющего высший текущий приоритет, реализуется циклический сдвиг приоритетов с присвоением низшего только что обслуженному уровню. На рис. 3.48 приведен пример циклического сдвига после обработки пятого уровня с приоритетом 3. Следует отметить, что циклический сдвиг не нарушает последовательности вложенных друг в друга прерываний, что обеспечивает правильный возврат из обслуживающих их подпрограмм.

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

В рассмотренной системе приоритетов находящийся на обслуживании уровень подавляет обработку уровней с меньшим приоритетом даже несмотря на его временное маскирование. Обработку прерываний более низкого уровня можно разрешить сбросом соответствующего ISR-бита, однако этот процесс необратим. Еще одна возможность состоит в установке с помощью OCW3 режима специального маскирования (см. рис. 3.47). В данном режиме каждый бит в регистре ISR запрещает только собственный уровень, но разрешает все остальные. Во время процедуры инициализации режим специального маскирования авто­матически аннулируется.

Кроме управления режимом специального маскирования в функции OCW3 входит управление режимом поллинга и выбор регистра IRR или ISR для чтения его содержимого с помощью программ. Режим поллинга (опроса) предполагает ввод информации об источнике прерывания программным методом. Режим инициируется выдачей в ПКП слова OCW3 с установленным битом Р (Polling). Контроллер ВН59 интерпретирует следующий цикл чтения при А0=0 как подтверждение прерывания и выдает на шину данных информацию о требующем обслуживания уровне с высшим приоритетом в формате, представленном на рис. 3.49. Если к моменту опроса запросов нет, то возвращается слово с флажком запроса 1=0, в противном случае 1= 1, а в поле W2—WO содержится код уровня с высшим приоритетом. В остальном работа ВН59 аналогична предыдущему случаю. Режим поллинга применяется в случаях, когда существует единая программа обслуживания для нескольких запросов, а также для расширения числа уровней (сверх 64).