Вход/Регистрация
Шины PCI, USB и FireWire
вернуться

Гук Михаил Юрьевич

Шрифт:

• бит 1:0 – каскадное включение пары контроллеров, 1 – одиночный контроллер;

• бит 0:1 – признак использования ICW4.

Команда инициализации ICW2 (запись по адресу 021h или 0A1h) задает номер вектора, генерируемого данным контроллером для входа 0. Биты [2:0] должны иметь нулевые значения.

Команда инициализации ICW3 (запись по адресу 021h или 0A1h) используется только для каскадного включения:

• для ведущего контроллера (Master, 8259A#1) биты [0:7] указывают на наличие ведомых контроллеров на линиях IRQ0–IRQ7 соответственно. В AT ICW3 = 04h (ведомый на IRQ2);

• для ведомого контроллера (Slave, 8259A#2) биты [2:0] содержат номер входа ведущего контроллера, к которому он подключен, биты [7:3] сброшены. В AT ICW3 = 02h (подключен к IRQ2 ведущего).

Команда инициализации ICW4 (запись по адресу 021h или 0A1h) задает режим работы контроллера, его применение обязательно при начальной инициализации:

• биты [7:5]: 0 – не используются;

• бит 4 – SFNM (Special Fully Nested Mode): 1 – специальный режим полной вложенности разрешен, 0 – запрещен;

• бит 3 – BUF (Buffered): 1 – признак буферизованности шины;

• бит 2 – M/S (Master/Slave), положение в каскаде: 1 – ведущий, 0 – ведомый.

В современных контроллерах не используется (сброшен);

• бит 1 – AEOI (Auto End Of Interrupt): 1 – разрешение автоматического завершения прерывания, 0 – нормальный режим (требует подачи EOI);

• бит 0 – тип используемого процессора: 1 – 8086/8088 и далее, 0 – 8080.

Команда управления OCW1 (запись по адресу 021h или 0A1h) задает маски запросов, единичное значение бита означает маскирование запроса. Биты [0:7]определяют маски запросов для IRQ0–IRQ7 (8259#1) или IRQ8–IRQ15 (8259#2).

Команда управления OCW2 (запись по адресу 020h или 0A0h) – завершение обслуживания прерывания (команда EOI), управление приоритетом:

• биты [7:5] задают код операции (в операциях, помеченных звездочкой, используется поле LLL в битах 2–0):

• 001 – неспецифический EOI;

• 011* – специфический EOI для запроса LLL;

• 101 – неспецифический EOI с ротацией приоритета;

• 100 – установка ротации приоритета в режиме AEOI;

• 000 – сброс ротации приоритета в режиме AEOI;

• 111* – специфический EOI с ротацией приоритета (установкой низшего приоритета для заданного уровня);

• 110* – установка низшего приоритета для заданного уровня;

• 010 – нет операции.

• биты [4:3]: 00 – признак OCW2;

• биты [2:0] – поле LLL – номер уровня, к которому относится команда (только для команд, помеченных звездочкой).

Команда управления OCW3 (запись по адресу 020h или 0A0h) – оперативное управление контроллером:

• бит 7:0 – не используется;

• биты [6:5] – режим специального маскирования (в PC не используется): 11 —установить, 10 – сбросить, 00, 01 – не изменять;

• биты [4:3]: 01 – признак OCW3;

• бит 2 – признак команды опроса (полинга). После команды полинга на последующую команду чтения порта 020h или 0A0h контроллер ответит байтом, кодирующим запрос прерывания с максимальным приоритетом. Для PC полинг обычно не используется (бит 2 – нулевой), а контроллер передает вектор прерывания по команде INTA;

• биты [1:0] – управление чтением регистров при операциях ввода по адресу 020h или 0A0h:

• 10 – чтение IRR – регистра запросов;

• 11 – чтение ISR – регистра обслуживаемого прерывания;

• 00, 01 – не изменять выбор регистра.

Регистры ELCR, имеющиеся в современных компьютерах, позволяют селективно управлять чувствительностью входов. В этих регистрах каждый бит отвечает за режим своего входа запроса: 0 – чувствительность к положительному перепаду, 1 – чувствительность к высокому уровню. Для входов IRQ0, 1, 2, 8 и 13 (таймер, клавиатура, вторичный контроллер прерываний, часы и исключение сопроцессора), допускается чувствительность только к перепаду (соответствующие биты должны быть нулевыми, но чипсет может их и игнорировать). Линии запросов прерывания от PCI по пути ко входам инвертируются, так как на них запрос сигнализируется низким уровнем.

В IBM PC/XT/AT используется специальный режим вложенных прерываний с фиксированным приоритетом и автоматическим неспецифическим завершением; типовые байты инициализации и управления приведены в табл. 3.3. После инициализации (процедурой POST и при загрузке ОС) все неиспользуемые входы контроллеров замаскированы (на запросы прерываний реагировать не будут), а их векторы прерываний указывают на «заглушку» – процедуру с единственной инструкцией IRET. Для подключения обработчика прерывания от устройства первым делом следует загрузить обработчик в память и установить указатель на него в таблице прерываний. Далее следует размаскировать соответствующий ему вход в контроллере прерываний, для чего выполняется чтение регистра маски (адрес 21h для 8259A#1, A1h для 8259A#2), обнуление соответствующего бита (см. табл. 3.1) и запись в регистр нового значения маски. Если обработчик прерывания удаляется из памяти, предварительно должен быть замаскирован соответствующий ему вход контроллера. Все изменения в таблице прерываний должны выполняться при замаскированных прерываниях, чтобы избежать попытки использования вектора в процессе его модификации (это приведет к «вылету» программы – вызову по некорректному адресу).

  • Читать дальше
  • 1
  • ...
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: