Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Регистр Isr и его значение

5.2K
30 мая 2004 года
JumpingJack
7 / / 07.01.2004
Подскажите, пожалуйста, что должно хранится в регистре ISR контроллера прерывания 8259A? почему у меня выводится значение 10111000, при считывании его значения при помощи команды in AL, 20h (значение считываю во время обработки прерывания от таймера) и правильно ли я считываю его значение.

Есть ли в инете документация по этой теме? (Я не могу найти)
1.8K
30 мая 2004 года
Sanya DLR
123 / / 03.03.2004
Цитата:
Originally posted by JumpingJack
Подскажите, пожалуйста, что должно хранится в регистре ISR контроллера прерывания 8259A? почему у меня выводится значение 10111000, при считывании его значения при помощи команды in AL, 20h (значение считываю во время обработки прерывания от таймера) и правильно ли я считываю его значение.

Есть ли в инете документация по этой теме? (Я не могу найти)


Программирование контроллера прерываний 8259 (ликбез).

Порты:
20h, 21h - для контроллера 1 (тот, который ближе к процессору)
0A0h, 0A1h - для контроллера 2 (тот, который воткнут в первый (вместо IRQ2))

Байт команды посылается в порт 20h (0A0h). Затем, если команда это предусматривает, посылаются байты параметров в порт 21h (0A1h).
В остальное время порт 21h (0A1h) используется как регистр масок прерываний (можно читать и записывать), где единичные значения битов запрещают соответствующие IRQ.
_______________________
Настроить контроллер 1:
out 20h,Byte1
out 21h,Byte2
out 21h,Byte3
out 21h,Byte4

где:
Byte1 = 0001 a 0 b c (двоичное)
если a=0 -прерывание по перепаду сигнала;
если b=1 -подключение без каскадирования и параметра Byte3 нет в команде; если b=0, то использовать каскадирование контроллеров;
если c=1 -использовать параметр Byte4 (если c=0, то параметра Byte4 посылать не надо).

Byte2 = базовый вектор (значение кратное 8), номер прерывания для IRQ0 (IRQ1,2,3,4,5,6,7 присваиваются последующие номера (адреса))

Byte3 = 00000100, ведомый контроллер подключен ко входу IRQ номер 2 (соответствующий бит=1)

Byte4 = 000 a b c d e
если a=0 , то использование специального вложенного режима;
если b=1 , то системная шина данных буферизована
если c=1 , то данный контроллер - ведущий
если d=1 , то установка режима автоматического сброса бита в ISR (вместо привычного out 20h,20h в обработчиках)
если e=0 , то микропроцессор i8080, иначе 8086 (пентиум)
_______________________
Настроить контроллер 2:
out 0a0h,Byte_1
out 0a1h,Byte_2
out 0a1h,Byte_3
out 0a1h,Byte_4

где: все тоже кроме Byte_3
Byte_3 = 00000010 ведомый контроллер подключен к второму входу ведущего
_______________________
Управление приоритетами:
out 20h/0a0h,Byte
где Byte = aaa 00 bbb
aaa-задает операцию;
bbb-указывает уровень IRQ для операции;
известные операции:
000 - обычный режим приоритетов с автоматическим EOI
001 - сброс бита с максимальным приоритетом в ISR
011 - сброс бита в ISR для уровня bbb
100 - установка режима циклической смены приоритета при автоматическом EOI
101 - тоже при неавтоматическом
111 - установка режима циклической смены приоритета относительно уровня bbb
_______________________
Общее управление контроллером:
out 20h/0a0h,Byte
где Byte = 0 aa 01 b cc
aa =11 - установить режим специального маскирования (игнорирование ISR):
aa =00 - сбросить этот режим;
aa =01 или 10 - оставить как есть;
b=0 - установить режим опроса
cc=10 - прочитать содержимое IRR (следующей командой из порта 20h);
cc=11 - тоже, но для ISR;
________________________

Исходя из вышесказанного, читать ISR надо так (наверное):
mov al,00001111b
out 20h,al
in al,20h

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог