Назад в раздел
8259A / 8259-2 / 8259A-
8259A / 8259-2 / 8259A-8
PROGRAMMABLE INTERRUPT CONTROLLER
1 Совместим с iAPX 86, iAPX 88...................
2 Совместим с MCS-80, MCS-85.....................
3 Контроллер с восьмиуровневым
приоритетом....................................
4 Расширение до 64 уровней.......................
5 Программируемые режимы прерываний..............
6 Возможность маскирования отдельных
запросов.......................................
7 Одиночное питание +5В (без генератора).........
8 28-штырьковый корпус "два-в-линию".............
Программируемый Контроллер Прерываний Intel 8259A
обрабатывает до 8 векторизируемых приоритетов прерываний для
ЦПУ. Он может каскадировать до 64 векторизируемых
приоритетов прерываний без дополнительных цепей. Размещен в
28-ножечном корпусе, использует технологию NMOS и требует
одиночного питания +5В. Цепи статичные, не требуют
генераторного входа.
8259A разработана для минимизации объемов
программного обеспечения и накладных расходов времени при
обработке прерываний с несколькими уровнями прерываний. В
нем имеется несколько режимов, позволяющих оптимизацию
многих системных требований.
8259A полностью совместима на верхнем уровне с Intel
8259. Оригинальное матобеспечение написанное для 8259 будет
работать с 8259A во всех эквивалентных режимах ( MCS-80/85,
небуферизованный, триггер по фронту ).
Ф У Н К Ц И О Н А Л Ь Н О Е О П И С А Н И Е.
Прерывание в микрокомпьютерной технике
Дизайн микрокомпьтерных систем требует, чтобы обмен
таких устройств как клавиатура, дисплеи, датчики и др.
компоненты обслуживались эффективным образом и большинство
общих системных задач могло выполняться компьютером с
небольшой или несущественной остановкой.
Наиболее общий метод обслуживании таких устройств -
опросный. При этом процессор должен проверять каждое
устройство последовательно и реализует его запрос при
необходимости обслуживания. Нетрудно заметить, что большая
часть главной программы бесконечно зациклена на непрерывном
опросе и что такой метод имел бы серьезный detrimental
-альный эффект в системной производительности, ограничивая
задачи, которые мог бы выполнять компьютер и уменьшая
стоимостную эффективность использования таких систем.
Более желательным был бы метод, при котором
компьютеру позволялось выполнять его главную программу и
останавливать ее для обслуживания периферийных устройств
только, когда устройства говорят об этом. Эффективен метод
обеспечивавший бы внешний асинхронный ввод, который
информировал бы процессор, что он должен завершить
выполнение текущей инструкции и перейти к новой программе,
которая обслужит запрашиваеющее устройство. Однако, по
завершению обслуживания процессор вспомнил бы точно, где он
прервался.
Такой метод называется прерывание. Легко видеть, что
системная производительность резко возрастает и,
следовательно компьютер может выполнять больше задач,
увеличивая свою стоимостную эффективность.
Функцией Программируемого Контроллера Прерываний (
ПКП / PIC ) является общее управление всем оборудованием
систем с прерываниями. Он принимает запросы от периферии,
различает какое из входных требований более важное
(приоритетное), устанавливает выше ли приоритет входного
запроса значения текущего обслуживаемого уровня и выдает
прерывание в ЦПУ основываясь на этом определении.
Каждое периферийное устройство или структура обычно
имеет специальную программу или "рутину", которая
ассоциируется с их специфичными функциональными или
операционными требованиями; это обычно называется
"программой обслуживания". ПКП после выдачи прерывания в
ЦПУ, должно как-то ввести информацию в ЦПУ, которая
разместит счетчик команд на сервисную программу связанную с
запрашивающим устройством. Этот указатель является адресом в
таблице векторов, и в этом документе часто будет называться
векторными данными.
8259A
8259A является устройством, специально разработанным
для микрокомпьютерных систем с прерываниями. Он управляет
восьмью уровнями или запросами и имеет встроенные средства
расширения другими 8259A (до 64 уровней). Он программируется
системным матобеспечением как устройство обмена. Доступный
программисту выбор приоритетных режимов таков, что порядок,
по которому запросы обрабатываются 8259А может
конфигурироваться в соответствие с системными требованиями.
Приоритетные режимы могут изменяться или
переконфигурироваться динамически в любое время в главной
программе. Это означает, что полные струтуры прерываний
могут определятся в соответствие с требованиями, основываясь
на общем системном оборудовании.
Регистр Запросов на Прерывание (IRR) и Регистр Занятости (ISR).
Прерывания с входных линий IR обрабатываются двумя
каскадированными регистрами, регистром запросов на
прерывание и регистром занятости. IRR используется для
хранения прерываний всех уровней, которые запросили
обслуживание, а ISR хранит все уровни прерываний, которые
обслуживаются.
Арбитраж приоритетов.
Этот блок определяет приоритеты битов, установленных
в IRR. Высший приоритет выбирается и стробируется в
соответствующий бит ISR по сигналу INTA
Регистр масок прерываний (IMR)
В IMR хранятся биты, которые отмечают маскируемые
линии прерываний. IMR оперирует на IRR. Маскирование входа
с более высоким приоритетом не влияет на прерывания линий
запросов с более низкими приоритетами.
INT ( Прерывания )
Этот выход идет непосредственно на вход прерывания
ЦПУ. Уровень Vон этой линии полностью совместим с входными
уровнями 8080A, 8085A и 8086.
____
INTA ( Запрос на прерывания )
Импульс INTA вызывает выдачу из 8259A на шину данных
векторной информации. Формат этих данных зависит от режима
системы (мPM) 8259A.
Буфер шины данных
Высокоимпедансный двунаправленный 8-битовый буфер
используется для согласования с системной шиной данных.
Управляющие слова и информация о состоянии передаются череэ
буфер данных.
Логика управления обменом ( чтением/записью)
В функции этого блока входит прием команд OUT из
ЦПУ. Он состоит из регистров командных слов инициализации
(ICW) и командных слов операции (OCW), которое хранят
различные форматы управления операциями устройств. Этот
функциональный блок также позволяет передавать статус 8259A
на шину данных.
__
CS ( выбор схемы - chip select)
Низкий уровень данного входа разрешает работу 8259A.
Пока не схема не выбрана, невозможно ничего ни прочитать ни
записать на нее.
__
WR (запись)
низкий уровень данного сигнала разрешает ЦПУ запись
управляющих слов (ICW и OCW) в 8259A.
__
RD (чтение)
Низкий уровень данного сигнала позволяет 8259A
посылать состояние регистра запросов на прерывания IRR,
регистра обслуживания ISR, регистр масок прерывания IMR или
уровень прерывания на шину данных.
A0 __ __
Этот входной сигнал используется вместе с WR и RD
для записи команд в различные командные регистры, а также
для считывания различных регистров состояния микросхемы. Эта
линия может подключаться непосредсвенно к одной из адресных
линий.
Каскадный буфер/компаратор
Этот функциональный блок хранит и сравнивает
идентификаторы всех 8259A используемых в системе.
Соответствующие три ножки (CAS0-2) являются выходами, когда
8259A используется как ведущая, и входами, когда 8259A -
ведомая. Ведущая 8259A посылает идентифмкатор ведомого
устройства на линии CAS0-2. Выбранное таким образом ведомая
схема выдает запрограммированный адрес подпрограммы на шину
данных во время одного или двух последующих импульсов INTA (
см пункт "Каскадирование 8259A")
Последовательность прерывания
Мощным средством 8259A для микрокомпьютерных систем
является его программируемость и возможность адресации рутин
прерывания. Последнее позволяет непосредственно или косвенно
переходить на указанную рутину обслуживания прерывания безо
всякого опроса прерывающих устройств. Обычная
последовательность событий при прерывании зависит от типа
используемого ЦПУ.
В системах MCS-80/85 порядок событий следующий:
1. Одна или несколько линий запросов на прерывание (IR0-7)
становятся высокими устанавливая соответствующие биты
IRR.
2. 8259A оценивает эти запросы и посылает INT в ЦПУ, если
это требуется.
3. ЦПУ подтверждает INT, отвечая импульсом INTA.
4. Получив от ЦПУ INTA, в ISR установливается бит с высшим
приоритетом, а в IRR соответствующий бит сбрасывается.
8259A также выдает код инструкции CALL (11001101) на
8-битовую шину данных на ее линии D7-0.
5. Данная инструкция CALL вызовет еще два импульса INTA,
посылаемых на 8259A от ЦПУ.
6. Эти два импульса INTA разрешают 8259A выдать
запрограммированные адреса подпрограмм на шину данных.
Вначале выходят младшие 8 битов адреса, а затем по
второму импульсу INTA старшие 8 бит.
7. Это завершает 3-байтную инструкцию CALL генерируемую
8259A. В режиме AEOI бит ISR сбрасывается по концу
третьего импульса INTA. В противном случае бит ISR
остается установленным пока соответствующая команда EOI
не выдаст конец последовательности прерывания.
В системе iAPX-86 порядок до шага 4 тот же.
4. Получив от ЦПУ INTA, в ISR установливается бит с высшим
приоритетом, а в IRR соответствующий бит сбрасывается.
8259A ничего не выдает на шину данных в течение этого
цикла.
5. iAPX-86/10 инициирует второй импульс INTA. В течение
этого импульса 8259A выдает на шину данных 8-битовый
указатель, откуда он считывается ЦПУ.
6. Это завершает цикл прерывания. В режиме AEOI бит ISR
сбрасывается по концу второго импульса INTA. В противном
случае бит ISR остается установленным пока
соответствующая команда EOI не выдаст конец
последовательности прерывания.
Если запросы на прерывание на шаге 4 любой из
последовательностей отсутствовали, (т.е. длительность
запроса была слишком короткой), 8259A выдаст прерывание
уровня 7. И векторные данные, и каскадные линии будут такими
же как и при запросе на прерывание с уровнем 7.
В Ы В О Д П О С Л Е Д О В А Т Е Л Ь Н О С Т И
П Р Е Р Ы В А Н И Я
MCS-80, MCS-85
Данная последовательность синхронизируется тремя
импульсами INTA. В течении первого на шине данных появляется
код операции CALL (CDh)
+D7-D6-D5-D4-D3-D2-D1-D0+
код CALL: ¦ 1¦ 1¦ 0¦ 0¦ 1¦ 1¦ 0¦ 1¦
По второму импульсу INTA на шину освобождается
младшая часть адреса соответствующей рутины обслуживания.
При интервале=4 программируются биты 5-7, а 0-4
автоматически вставляются 8259A. При интервале=8
программируются только биты 6 и 7, а 0-5 вставляются
автоматически.
¦IR¦ интервал = 4 ¦ ¦IR¦ интервал = 8 ¦
¦ ¦ D7 D6 D5 D4 D3 D2 D1 D0 ¦ ¦ ¦ D7 D6 D5 D4 D3 D2 D1 D0 ¦
¦ 7¦ A7 A6 A5 1 1 1 0 0 ¦ ¦ 7¦ A7 A6 1 1 1 0 0 0 ¦
¦ 6¦ A7 A6 A5 1 1 0 0 0 ¦ ¦ 6¦ A7 A6 1 1 0 0 0 0 ¦
¦ 5¦ A7 A6 A5 1 0 1 0 0 ¦ ¦ 5¦ A7 A6 1 0 1 0 0 0 ¦
¦ 4¦ A7 A6 A5 1 0 0 0 0 ¦ ¦ 4¦ A7 A6 1 0 0 0 0 0 ¦
¦ 3¦ A7 A6 A5 0 1 1 0 0 ¦ ¦ 3¦ A7 A6 0 1 1 0 0 0 ¦
¦ 2¦ A7 A6 A5 0 1 0 0 0 ¦ ¦ 2¦ A7 A6 0 1 0 0 0 0 ¦
¦ 1¦ A7 A6 A5 0 0 1 0 0 ¦ ¦ 1¦ A7 A6 0 0 1 0 0 0 ¦
¦ 0¦ A7 A6 A5 0 0 0 0 0 ¦ ¦ 0¦ A7 A6 0 0 0 0 0 0 ¦
По третьему импульсу INTA на шину освобождается
старшая часть адреса соответствующей рутины обслуживания,
которая программируются как байт 2 инициализующей
последовательности (A8 - A15).
+D7--D6--D5--D4--D3--D2--D1--D0-+
¦A15¦A14¦A13¦A12¦A11¦A10¦ A9¦ A8¦
iAPX 86, iAPX 88
Режим iAPX 86 аналогичен MCS-80 за тем исключением,
что процессором генерируется только два цикла подтверждения
прерывания и никакого кода CALL в процессор не выдается.
Первый цикл подтверждения прерывания аналогичен первому в
системе MCS-80/85, в котором 8259A использует его для
внутреннего замораживания состояний прерываний для
разрешения приоритетности, и как ведущая выдает код
прерывания код прерывания на каскадные линия по концу
импульса INTA. На этом первым цикле никакая информация не
выдается на процессор, а буфер шины данных запрещен. На
втором цикле подтверждения прерывания в режиме iAPX 86
ведущая 8259A (или ведомая если так запрограммировано)
посылает байт данных в процессор с кодом подтверждения
прерывания ( см. ниже) ( отметим, что состояние ADI
управляющего режима игнорируются, а A5-A11 не используются в
режиме iAPX 86).
¦ ¦ D7 D6 D5 D4 D3 D2 D1 D0 ¦
¦ 7¦ T7 T6 T5 T4 T3 1 1 1 ¦
¦ 6¦ T7 T6 T5 T4 T3 1 1 0 ¦
¦ 5¦ T7 T6 T5 T4 T3 1 0 1 ¦
¦ 4¦ T7 T6 T5 T4 T3 1 0 0 ¦
¦ 3¦ T7 T6 T5 T4 T3 0 1 1 ¦
¦ 2¦ T7 T6 T5 T4 T3 0 1 0 ¦
¦ 1¦ T7 T6 T5 T4 T3 0 0 1 ¦
¦ 0¦ T7 T6 T5 T4 T3 0 0 0 ¦
П Р О Г Р А М М И Р О В А Н И Е 8 2 5 9 A
8259A принимает два типа команд, генерируемых ЦПУ:
1. Командные слова инициализации (ICW): прежде, чем могут
начаться обычные операции, каждая 8259A в системе должна
быть установлена в свою начальную точку
последовательностью из 2 или 4 байтов, синхронизируемых
по импульсу WR
2. Командные слова операции (OCW): эти командные слова
указывают 8259A в каком из различных режимов прерывания
она должна работать:
a. Полностью вложенный режим
b. Режим ротации приоритетов
c. Режим специальных масок
d. Режим опроса
OCW могут записываться в 8259A в любой момент после
инициализации.
К О М А Н Д Н Ы Е С Л О В А И Н И Ц И А Л И З А Ц И И ( ICW )
Введение
Если команда выдана с A0=0 и D4=1, она
интерпретируется как командное слово инициализации 1 (ICW1).
ICW1 начинает последовательность инициализации, во время
которой автоматически происходит следующее:
a. Фронт цепи чувствительности сбрасывается, это означает,
что после инициализации, чтобы произошло прерывание, на
входе запроса на прерывание должен произойти переход в
направлении снизу вверх.
b. Регистр масок прерывания очищается.
c. Входу IR7 назначается приоритет 7.
d. Адрес для режима ведомого устанавливается в 7.
e. Режим специальных масок сбрасывается, а чтение состояния
устанавливается на IRR.
f. Если IC4=0, то все функции, выбраннуе в ICW4
устанавливаются в нуль. (небуферный режим~, нет АвтоEOI,
система MCS-80/85)
ПРИМЕЧАНИЕ: Ведущий/ведомый в ICW4 используется только в
буферном режиме.
A5-A15:
Адрес страницы старта рутины обслуживания. В
системе MCS-80/85 восемь уровней запроса будут
генерироватьобращения к восьми ячейкам равномерно
распределенных в памяти. Они могут быть
запрограммированы с интервалом либо 4, либо 8 ячеек
памяти, следовательно 8 рутин займут страницу из 32
или 64 байт, соответственно.
Формат адреса длиной в два байта (A0-A15). Когда
интервал рутин равен 4 А0-А4 автоматически
вставляются 8259A, а А5-А15 программируются извне.
Когда интервал рутин равен 8 А0-А5 автоматически
вставляются 8259A, а А6-А15 программируются извне.
8-байтный интервал установлен для совместимости с
существующим матобеспечением, а 4-байтный интервал
наилучший для компактной таблицы переходов.
В системе iAPX A15-A11 вставляются в 5 самых значащих
битов векторного байта, а 8259A устанавливает три
младших значащих бита в соответствии с уровнем
прерывания. A10-A5 игнорируются, а ADI (адресный
интервал) ни на что не влияет.
LTIM:
Если LTIM=1, то 8259A оперирует в режиме прерывания
по уровню. Логика детекции по фронту будет подавлена.
ADI:
Адресный интервал вызова - ADI=1, то интервал 4,
ADI=0 интервал 8.
SNGL:
Одиночный. Означает, что 8259A единственный в
системе. Если SNGL=1, ICW3 не должно выдаваться.
IC4:
Если этот бит установлен, будет ожидаться ICW4. Если
ICW4 не нужно, установите IC4=0.
Данное слово только считывается, когда в системе
несколько 8259A и используется каскадирование, в случае
которого SNGL=0. ICW3 загрузит 8-битовый регистр, в функции
которого входит
1. В режиме ведущего (когда либо SP=1, либо в буферном
режиме M/S=1 в ICW4) для каждого ведомого в системе 8259A
устанавливается "1". При работе ведущий выдает первый
байт последовательности вызыва (в системе MCS-80/85) и по
каскадным линиям разрешает соответствующему ведомому
выдать второй и третий байты (в iAPX только второй)
2. В режиме ведомого (когда либо SP=0, либо если BUF=1, а
M/S=1 в ICW4) биты 2-0 идентифицируют ведомый. Ведомый
будет сравнивать их с входными каскадными линиями и,
когда они совпадут на шину данных будут выданы второй и
третий (или только второй в iAPX 86) байты
последовательности вызова.
SFNM:
если 1, то программируется специальный полностью
вложенный режим.
BUF:
если 1, то программируется буферный режим. В буферном
режиме SP/EN становится выходом, а по M/S определяются
ведущие и ведомые.
M/S:
если в буферном режиме выбрано M/S=1, 8259A
программируется как ведщий, M/S=0 означает
программирование ведомого. M/S не имеет функции в
случае BUF=0.
AEOI:
если 1, программируется режим автоматического
завершения прерывания
мPM:
признак микропроцессора: мPM=0 устанавливает 8259A в
режим системных операций MCS-80/85, а мPM=1 в режим
iAPX 86.
К О М А Н Д Н Ы Е С Л О В А О П Е Р А Ц И И ( OCW )
После программирования 8259A командными словами
инициализации микросхема готова принимать запросы на
прерывания по входным линиям. Однако, с помощью командных
слов операции ( OCW ) во время работы 8259A можно выбирать
алгоритмы, которые укажут 8259A в каком режиме следует
оперировать.
OCW1 устанавливает и сбрасывает маскировочные биты в
регистре масок прерываний (IMR). M7-M0 представляют восемь
битов маски. М=1 указывает, что канал маскирован (запрещен),
а М=0, что канал разрешен.
R, SL, EOI - эти три бита управляют режимами ротации и
завершения прерываний, а также их комбинациями. Описание
этих комбинаций находится на блок-схеме.
L2, L1, L0 - эти биты определяют уровень активного
прерывания, если установлен бит SL
ESMM - разрешает режим специальных масок. Когда он
установлен в 1, он позволяет устанавливать или
сбрасывать биту SMM режим специальных масок. Если
ESMM=0, бит SMM становится не используемым.
SMM - режим специальных масок. Если ESMM=1 и SMM=1 8259A
войдет в режим специальных масок, если ESMM=1 и SMM=0
8259A вернется в режим обычных масок. Когда ESMM=0, бит
SMM не эффективен.
Полностью вложенный режим
Данный режим устанавливается после инициализации
если не запрограммирован другой режим. Запросы на прерывания
упорядочены по приоритетам от 0 до 7 ( 0 - высший). Когда
прерывание подтверждается, определяется запрос с наивысшим
проритетом и его вектор размещается на шине. Кроме того,
устанавливается бит (IS0-7) регистра обслуживания
прерывания. Этот бит останется до тех пор, пока
микропроцессор не выдаст команду EOI - "конец прерывания"
непосредственно перед возвратом из рутины обслуживания,
либо, если установлен бит AEOI (автоматический конец
прерывания), пока не будет заднего фронта последнего сигнала
INTA. Пока установлен бит в IS все последующие прерывания
того же или более низкого приоритета запрещаются, в то время
как более высокие уровнибудут генерировать прерывания
(которые будут подтверждаться только если внутренний триггер
разрешения прерываний в микропроцессоре был восстановлен
программой).
После инициализирующей последовательности IR0 имеет
наивысший приоритет, IR7 - самый низкий. Ниже, в описании
режима ротации приоритетов, поясняется, как можно изменять
приоритеты.
Конец прерывания (EOI)
Бит обслуживания (IS - In Service) может
сбрасываться либо автоматически по заднему фронту
последнего в последовательности импульса INTA, (когда
установлен бит AEOI в ICW1), либо командным словом, которое
должно быть выдано в 8259A перед выходом из рутины
обслуживания (команда EOI). В каскадном режиме команда EOI
должна выдаваться дважды, первый раз для ведущего и другой
для соответствующего ведомого.
Существует две формы команды EOI: специфичная и
неспецифичная. Если 8259A работает в режимах, которые
сохраняют структуру полностью вложенного режима, то можно
определить какой бит IS нужно сбросить по EOI. По
неспецифичной EOI в 8259A автоматически сбрасывается бит IS
с наивысшим приоритетом из тех, что установлены, поскольку
при полностью вложенном режиме самый высокий подтвержденный
и обслуженный уровень IS всегда последний.
Неспецифичный EOI может быть выдан в OCW2 (EOI=1, SL=0, R=0).
Если же используемый режим вызывает беспокойство о
целостности вложенной структуры, 8259A не может определять
последний подтвержденный уровень. В этом случае должен быть
выдан специфичный "конец прерывания", в команду которого
включен и номер сбрасываемого уровня. Специфичный EOI может
быть выдан в OCW2 (EOI=1, SL=1, R=0,а L0-L2 являются
двоичным номером сбрасываемого бита IS).
Необходимо отметить, что бит IS, который
замаскирован битом IMR, не будет очищен неспецифичным EOI6
tckb 8259A находится в режиме специальной маски.
Автоматический конец прерывания (AEOI)
Если в ICW4 бит AEOI=1, 8259A будет оперировать в
режиме AEOI постоянно, пока не будет перепрограммирована
новым ICW4. В данном режиме 8259A автоматически выполняет
операцию неспецифичного EOI по заднему фронту последнего из
импульсов подтверждения прерывания (третий в MCS-80/85,
второй в iAPX86). Заметим, что с точки зрения системы этот
режим должен использоваться только, когда вложенная
многоуровневая структура прерываний не требуется внутри
единственной 8259A.
Режим AEOI может использоваться только в ведущей
8259A, но не в ведомой.
Автоматическая ротация (равноприоритетные устройства).
В некоторых приложениях встречаются устройства с
равным приоритетом. В этом режиме устройство после
обслуживания получает самый низкий приоритет, так что
устройство запрашивающее прерывание должно будет ждать в
худшем случае пока каждое из 7 других устройств не будет
обслужено по крайней мере однажды. Например, если состояния
приоритетов и обслуживание перед ротацией было такое:
IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0
состояние IS: 0 1 0 1 0 0 0 0
состояние приоритета: 7 6 5 4 3 2 1 0
младший старший/
(здесь IR4 самый высокий приоритет, требующий обслуживания),
то после ротации, когда IR4 обслужен и все другие приоритеты
ротируются соответственно:
IS7 IS6 IS5 IS4 IS3 IS2 IS1 IS0
состояние IS: 0 1 0 1 0 0 0 0
состояние приоритета: 2 1 0 7 6 5 4 3
старший/ младший
Существует два способа выполнения автоматической
ротации с использованием OCW2, ротация по команде
неспецифичного EOI (R=1, SL=0, EOI=1) и ротация в режиме
автоматического EOI, который устанавливается по (R=1, SL=0,
EOI=0) и сбрасывается по (R=0, SL=0, EOI=0).
Специфичная ротация ( специфичный приоритет)
Программист может изменять приоритеты программируя
младший приоритет и фиксируя тем самым все остальные. Т.е.
если IR5 запрограммирован как самый младшее по приоритету
устройство, то IR6 будет иметь самый высокий приоритет.
Команда установки приоритета выдается в в OCW2 при
R=1, SL=1, EOI=0 и в L0-L2 двоичный код приоритетного уровня
младшего по приоритету устройства.
Видно, что в этом режиме внутреннее состояние изменяется под
программным управлением по OCW2. Однако, оно не зависит от
команды EOI (также выполняемой с помощью OCW2). Замена
приоритетов может быть выполнена и во время команды EOI,
используя OCW2 с командой ротации по специфичному EOI (R=1,
SL=1, EOI=1, а L0-L2 = уровню IR, который получает низший
приоритет).
Маски прерываний
Каждый запрос на прерывание может быть отдельно
замаскирован регистром масок прерываний (IMR)
программируемым через OCW1. Каждый бит в IMR маскирует один
канал прерывания, если он установлен (1). Бит 0 маскирует
IR0, бит 1 маскирует IR1 и т.д. Маскирование канала IR не
влияет на операции по другим каналам.
Режим специальной маски.
Некоторые приложения могут потребовать рутину
обслуживания для динамического выбора структуры приоритетов
системы во время своего выполнения под управлением
программного обеспечения. Например, желательно, чтобы рутина
запретила запросы младших приоритетов для одной группы своих
операторов, но разрешила некоторые из них для другой группы.
Трудность здесь в том, что если запрос на прерывание
подтвержден, а команда "конец прерывания" не сбросила его IS
бит (т.е. рутина обслуживания пока выполняется) 8259A
запрещает все запросы с младшими приоритетами при отсутствии
простого программного способа разрешить их.
Здесь вполне пригодится режим специальной маски. В
этом режиме бит маски, установленный по OCW1, запрещает все
прерывания по данному уровню и разрешает прерывания по всем
другим уровням, как старшим,так и младшим, которые не
маскированы.
Следовательно, прерывания могут быть выборочно
разрешены, путем загрузки в регистр масок.
Режим специальной маски устанавливается в OCW3, в
котором SSMM=1, SMM=1 и сбрасывается при SSMM=1, SMM=0.
Команда опроса
В этом режиме выход INT не используется, или в
микропроцессоре сброшен триггер разрешающий прерывания.
Обслуживание устройств обеспечивается программно с
использованием команды опроса.
Команда опроса выдается при установке P=1 в OCW3.
8259A трактует следующий импульс RD на 8259A (т.е. RD=0,
CS=0) как подтверждение прерывания устанавливая
соответствующий бит IS если запрос существует и считывает
приоритетный уровень. Прерывания замораживаются между WR и
RD.
В течение RD на шину данных выдается слово:
+D7-D6-D5-D4-D3-D2-D1-D0+ W0-W2 двоичный код высшего
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ приоритетного уровня
¦ I¦ -¦ -¦ -¦ -¦W2¦W1¦W0¦ затребовшего обслуживание
+-----------------------+ I =1, если существует
прерывание
Этот режим полезен, если существует общая для
нескольких уровней рутина, так что не требуется
последовательность INTA (экономия памяти ПЗУ). С другой
стороны режим опроса полезен для расширения приоритетных
уровней до более чем 64.
Считывание состояние 8259A
Для обновления пользовательской информации по
системе можно прочитать входное состояние нескольких
внутренних регистров. С помощью OCW3 можно прочитать IRR и
ISR, а OCW1 читается IMR.
Регистр запросов на прерывание IRR: 8-битовый
регистр, который содержит уровни с неподтвержденными
запросами на прерывание. Старший уровень запроса сброшен в
IRR, когда прерывание подтверждено (не изменяется IMR).
Регистр обслуживания ISR: 8-битовый регистр, который
содержит обслуживаемые уровни приоритетов. ISR обновляется
по команде "конец прерывания".
Регистр масок прерывания IMR: 8-битовый регистр,
который содержит замаскированные линии запросов на
прерывание.
IRR можно прочитать, если перед импульсом RD выдать
команду чтения регистра с OCW3 (RR=1, RIS=0).
ISR можно прочитать, если перед импульсом RD выдать
команду чтения регистра с OCW3 (RR=1, RIS=1).
Нет необходимостизаписывать OCW3 перед каждой
операции чтения, поскольку состояние чтения соответствует
предыдущему, т.е. 8259A "помнит", что было прочитано, IRR
или ISR, ранее выбранным OCW3. Это недействительно при
использовании опроса.
После инициализации 8259A устанавливается на IRR.
Для считывания IMR OCW3 не нужен. Шина выходных
данных будет содержать IMR как только активизируется RD, а
A0=1 (OCW1). Опрос перекрывает статус чтения когда
P=1, RR=1 в OCW3.
Режимы реагирования на уровень и на фронт.
Этот режим программируется битом 3 в ICW1.
Если LTIM=0, прерывание будет распознаваться по
переходу от нижнего уровня к верхнему на входе IR. Вход IR
может оставаться высоким, без генерации других прерываний.
Если LTIM=1, прерывание будет распознаваться по
"высокому" уровню на входе IR, и нет необходимости для
определения фронта. Запрос на прерывание должен убираться
перед выдачей команды EOI, либо прерывание ЦПУ должно
позволить предотвратить реагирование на второе прерывание.
На диаграмме приоритетной ячейки показана
концептульная цепь реагирования на фронт и на уровень
входных сигналов в 8259A. Обязательно отметьте, что триггер
запроса является D-триггером.
В обоих режимах реагирования как по фронту, так и по
уровню вход IR должен оставаться высоким до заднего фронта
первого INTA. Если вход IR станет низким до этого,
произойдет прерывание по умолчанию IR7, когда ЦПУ подтвердит
прерывание. Это может быть полезно для гарантии определения
прерываний вызванных вызванных всплесками шума на входе IR.
Чтобы использовать это средство, рутина для IR7 используется
для "уборки" в виде простой инструкции возврата,
следовательно игнорируя прерывание. Если IR7 необходимо для
других целей, IR7, вызванную по умолчания, можно выделить,
прочитав ISR. Обычное IR7 устанавливает соответствующий бит
ISR, а шумовое IR7 нет. Если произойдет IR7- шумовое при
выполнении рутины обслуживания обычного IR7, регистр ISR
останется установленным. В этом случае необходимо
прослеживать, вошли или нет в рутину IR7 ранее. Если
произошло второе IR7, то это шум.
Специальный полностью вложенный режим.
Этот режим используется в больших системах, когда
применяется каскадирование, а приоритеты хранятся в каждом
ведомом 8259A. В этом случае ведущий 8259A программируется
(используя ICW4) на полностью вложенный режим. Этот режим
похож на обычный вложенный режим за исключением следующего:
a. При обслуживании запроса на прерывание от определенного
ведомого, этот ведомый 8259A не блокируется приоритетной
логикой ведущего и последующие запросы на прерывание
более приоритетных IR ведомого будут распознаны ведущим и
вызовут прерывания процессора. В обычном вложенном режиме
ведомый 8259A маскируется весь, когда обслуживается один
из его запросов, и ни один более высокоприоритетный
запрос от него не может быть обслужен.
b. При выходе из рутины обслуживания прерывания
матобеспечение обязано проверить, было ли обслуженное
прерывание единственным в данном ведомом. Это делается
путем посылки команды неспецифичного EOI на ведомый, с
последующим считыванием регистра обслуживания и проверки
его на нуль. Если он пуст, команда неспецифичного EOI
может быть послана и на ведущий. Если же не нуль, то не
должно посылаться никакого EOI.
Буферный режим
Когда 8259A используется в больших системах, где для
подключения на шину данных требуются буферы и применяется
каскадный режим, существуют проблемы с разрешением буферов.
Буферный режим будет структурировать 8259A так,
чтобы посылать сигнал разрешения на SP/EN разрешая буфера. в
данном режиме как только разрешаются выходы шины данных
8259A, становится активным выход SP/EN.
Данная модификация заставляет определять в
программном обеспечении, является ли данная 8259A ведущей
или ведомой. Бит 3 в ICW4 программирует в буферный режим, а
бит 2 в ICW4 определяет, является данная 8259A ведущей или
ведомой.
К А С К А Д Н Ы Й Р Е Ж И М.
8259A может быть лего подсоединен в систему из
одного главного и до 8 ведущих, обрабатывая до 64
приоритетных уровней.
Ведущий управляет ведомыми по трем линиям каскодной
шины. Каскадная шина работает как "выбор микросхемы" для
ведомого во время последовательности INTA.
В каскадной конфигурации выходы прерывания ведомых
подключаются на входы запросов на прерывания IR ведущего.
Когда активизируется линия запроса в ведомом, а затем
подтверждается, ведущий разрешит соответствующему ведомому
выдать адрес рутины устройства в течение второго и третьего
байта INTA (только второго в 8086/8088)
Сигналы каскадной шины обычно низкие и содержат код
адреса ведомого между задним фронтом первого импульса INTA и
задним фронтом третьего импульса. Каждый 8259A в системе
должен быть раздельно проинициализирован и может быть
запрограммирован для работы в различных режимах. Команда EOI
должно выдаваться дважды: один раз на ведущий и другой на
соответствующий ведомый. Для активизации входа CS (выбор
схемы) каждого 8259A требуется адресный декодер.
Каскадные сигналы ведущего 8259A активизируются
только для входов ведомых, ни один вход ведомого не
оставляет каскадные линии неактивными (низкими).
.
|
|
|
|