Команды инициализации (ICW)
Форматы команд инициализации приведены на рис. 6.16 - 6.20.
Рис. 6.17. Формат ICW2
Рис. 6.18. Формат ICW3 (MASTER)
Рис. 6.19. Формат ICW3 (SLAVE)
Рис. 6.20. Формат ICW4
Рабочие команды (OCW) После инициализации дальнейшее управление работой контроллера может быть осуществлено с помощью команд OCW. Для программирования различных режимов предусмотрены три команды OCW. В отличие от ICW для OCW не требуется никакой определенной последовательности. Они выдаются процессором, когда это нужно программе. OCW1 используется только для операций 8259A, связанных с маскированием. Это слово обеспечивает прямой канал связи с регистром маски прерываний IMR. Процессор может осуществлять чтение или запись IMR через OCW1. Формат OCW1 приведен на рис. 6.21.
Рис. 6.21. Формат OCW1
Разряды OCW1 определяются следующим образом. M0-M7: используются для управления маскированием входов IRQ. Если разряд Mх установлен в 1, он будет маскировать соответствующий вход IRQ. Если разряд Mx установлен в нуль, то он разрешает распознавание соответствующего входа IRQ. Эти разряды имеют те же значения, когда они читаются процессором для корректировки состояния. OCW2 используется для окончания прерывания, автоматической ротации и специальной ротации. В зависимости от сочетания разрядов OCW2 выбираются соответствующие режимы и команды (за исключением инициализации AEOI). Формат OCW2 приведен на рис. 6.22.
Рис. 6.22. Формат OCW2.
Разряды OCW2 определяются следующим образом. L0-L2: используются для указания уровня прерываний (0-7) для операций, выбранных разрядами EOI, SL и R слова OCW2. Указанный уровень будет использован либо для сброса конкретного ISR, либо для установки конкретного приоритета. L0-L2 разрешаются или запрещаются разрядом SL; EOI: используется для команд окончания прерывания EOI (не в автоматическом режиме EOI). Если разряд EOI установлен в 1, то при выполнении команды EOI будет учитываться состояние разрядов SL и R (см.рис.6.18). Если разряд EOI установлен в нуль, команда окончания прерывания выполняться не будет; SL: используется для выбора конкретного уровня прерывания для данной операции. Если SL установлен в 1, разряды L0-L2 разрешены. Операция, выбранная разрядами EOI и R, будет выполняться на заданном уровне прерывания. Если разряд SL установлен в нуль, разряды L0-L2 запрещены; R: используется для управления всеми операциями ротации 8259A. Если разряд R установлен в 1, форма ротации приоритетов будет определяться состоянием разрядов SL и EOI. Если разряд R установлен в нуль, ротация выполняться не будет. OCW3 используется для выдачи различных режимов и команд в 8259A. Слово OCW3 имеет дело с двумя основными классами операций, связанными с состоянием прерываний и маскированием прерываний. Формат OCW3 приведен на рис. 6.23. Разряды OCW3 определены следующим образом. RIS: используется для выбора ISR или IRR для команды чтения регистра. Если RIS установлен в 1, выбирается ISR. Если RIS установлен в нуль, выбирается IRR. Состояние RIS учитывается только в том случае, если разряд RR установлен в 1; RR: используется для выполнения команд чтения регистра. Если RR установлен в 1, выполняется чтение регистра, а установка RIS определяет, какой регистр будет прочитан. Если RR установлен в нуль, команда чтения регистра не выполняется; P: используется для выдачи команды опроса. Если P установлен в 1, выдается команда опроса. Если он установлен в нуль, команда опроса не выдается.
Рис. 6.23. Формат OCW3
SMM: используется для назначения режима специального маскирования. Если SMM установлен в 1, будет выбран режим специального маскирования. Состояние разряда SMM учитывается только в том случае, если он разрешен разрядом ESMM. ESMM: используется для разрешения или запрещения действия SMM. Если ESMM установлен в 1, то SMM разрешен. Если ESM установлен в нуль, то SMM запрещен. Это полезно для предотвращения интерференции установок режимов и команд в OSW3.
Инициализация До начала нормальной работы каждый контроллер 8295A в системе должен быть инициализирован с помощью командных слов инициализации (ICW), содержащих от двух до четырех байтов. ICW используются для установки необходимых условий и режимов работы 8259A. Инициализация контроллера (рис. 6.24) производится только в указанной последовательности, так как эта процедура жестко связана с аппаратурой. Если в системе несколько контроллеров, то сначала инициализируется MASTER, затем SLAVE. Типовая программа инициализации контроллеров прерывания имеет вид: Для MASTER ---------- MOV AL,11h OUT 20h,AL ;ICW1, режим запуска по фронту LTIM=0, каскадный режим SNLG=0 ;IC4=1 - наличие в цепочке инициализации команды ICW4 ;D4=1 указывает, что выполняется команда ICW1 MOV AL,8 OUT 21h,AL ;ICW2, устанавливает базовый адрес векторов прерываний в ;диапазоне 8h-Fh MOV AL,4 OUT 21h,AL ;ICW3, указывает, что SLAVE подключен к IRQ2 MOV AL,1 OUT 21h,AL ;ICW4, установлен режим работы системы (может быть при ;необходимости задан специальный полновложенный режим - SFNM)
Для SLAVE --------- MOV AL,11h ;ICW1, режим запуска по фронту LTIM=0, каскадный режим SNLG=0 OUT A0h,AL ;IC4=1 - наличие в цепочке инициализации команды ICW4 ;D4=1 указывает, что выполняется команда ICW1 MOV AL,70h ;ICW2, устанавливает базовый адрес векторов прерываний в ;диапазоне 70-77h OUT A1h,AL MOV AL,2 ;ICW3, задает код SLAVE в системе (для каскадирования OUT A1h,AL ;использован IRQ2) MOV AL,1 ;ICW4, установлен режим работы системы OUT A1h,AL
Рис. 6.24 Ход инициализации подсистемы 8259A в РС АТ.
Отметим, что если после инициализации нужно произвести какие-либо программные изменения в ICW, то необходимо перепрограммировать всю последовательность ICW, а не только отдельное изменяемое слово. При инициализации выполняются следующие функции, в том числе и аппаратные: - согласно ICW1 устанавливается логика последовательности инициализации таким образом, чтобы обеспечивался прием ICW, указанных в ICW1; - сбрасываются регистры ISR и IMR ; - сбрасывается режим специального маскирования (SMM); - сбрасывается триггер ротации в автоматическом режиме EOI; - схема чтения/записи для чтения настраивается на чтение IRR в обоих контроллерах; - устанавливается фиксированный приоритет (высший у IRQ0, низший у IRQ7); - устанавливается режим распознавания запросов на прерывание по - фронту (см. параграф "Режимы работы"); - устанавливается работа подсистемы в каскадном режиме (объединение по входу IRQ2 MASTER); - присваиваются коды векторов, соответствующие уровням прерываний; - при необходимости может быть установлен специальнай режим полного вложения (SFNM). Если он не установлен, контроллеры будут работать в полновложенном режиме.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|