Intel 8259

Intel 8259

Intel 8259 — семейство программируемых контроллеров прерывания (ПКП), разработанных компанией Intel для микропроцессоров Intel 8080, Intel 8085 и Intel 8086. Семейство первоначально состояло из моделей 8259, 8259A и 8259B, но к текущему дню другими производителями были созданы многие другие совместимые модели. 8259 действует как мультиплексор, объединяя несколько источников прерывания в один источник прерывания, чтобы прервать другое устройство. Для которого упрощается обработка уровней приоритета прерываний и их возможной вложенности.

Содержание

История

Не очень много известно про различия между моделями семейства. Полагают, что корпорация NEC создала 8259A, а 8259B может быть ничем иным, как просто мнемоникой для второго (каскадированного) 8259A, введённого на платформе PC AT.

8259 был включён в первоначальный состав IBM PC в 1980 и был оставлен и в архитектуре IBM PC/XT, которая была введена в 1983. С введением IBM PC/AT появился второй чип 8259. Впоследствии семейство 8259 было вытеснено в пользу архитектуры Intel APIC, первоначально разработанной для многопроцессорных PC.

В современных чипсетах 8259 не используется как отдельное устройство, а стал частью южного моста.

В СССР выпускался как Микросхема программируемого контроллера приоритетных прерываний КР1810ВН59А[1]

Основные используемые в 8259 выводы:

  • IRQ0…IRQ7 — восемь входных линий запросов на прерывание;
  • INTR — мультеплексированная выходная линия запроса на прерывание;
  • INTA — входная линия подтверждения прерывания;
  • D0..D7 — двунаправленные выводы на шину данных для сообщения уровня прерывания или значения смещения вектора прерывания;
  • CAS0..CAS2 — выходы для реализации каскадирования нескольких 8259.

К ведущему 8259 могут быть подключены до 8 ведомых устройств 8259, обеспечивая обработку до 64 прерываний. При каскадировании выход INT ведомого подключается к одной из линий IRQ ведущего устройства 8259.

У 8259 три регистра:

  • Interrupt Mask Register (IMR) (Регистр маскирования запросов на прерывания) — описывает, прерывания каких уровней сейчас заблокированы (замаскированы)
  • Interrupt Request Register (IRR) (Регистр запросов на прерывания) — описывает, какие прерывания сейчас ожидают подтверждения
  • In-Service Register (ISR) (Регистр обрабатываемых запросов) — описывает, какие прерывания сейчас активны и требуют команды на завершение прерывания (EOI — End Of Interrupt).

Операции завершения прерывания (EOI) подразделяются на специфицированные, неспецифицированные и автоматические. Специфическая операция EOI указывает какой уровень прерывания требует подтверждения в ISR (фактически, указывает какой бит сбросить в ISR). Неспецифицированная команда EOI сбрасывает линию IRQ с наибольшим приоритетом из обрабатываемых. Автоматический режим EOI сбрасывает бит в ISR сразу после подтверждения прерывания.

Поддерживаются режимы прерываний по фронту и по уровню.

Поддерживаются режимы фиксированного и циклического сдвига приоритетов.

8259 может быть настроен на работу с 8088 или 8086. То есть на 8-и или 16-и битную шину данных.

Особенности программирования

DOS и Windows

Программирование 8259 под DOS и Microsoft Windows вызвало значительное число смущающих проблем, вызванных стремлением сохранить обратную совместимость, корни которых зародились ещё при появлении первых PC в 1981.

Первая проблема более или менее источник второй. Драйверы устройств DOS должны посылать неспецифицированную команду EOI после завершения обслуживания своего устройства. Из-за этого использование других режимов завершения прерывания затруднено (не всегда можно гарантировать, что нужный уровень не сбросится ранее). А также делает невозможным различить прерывания, перенаправленные от ведущего устройства 8259 к ведомому.

Вторая проблема возникает при использовании IRQ2 и IRQ9, которая появилась при появлении ведомого 8259 в PC/AT. Выход INT ведомого 8259 подсоединён к линии IRQ2 ведущего. Линия IRQ2 шины ISA, ранее подключенная к этой линии, теперь была перенаправлена к выходу IRQ1 ведомого. Так что теперь прерывание IRQ2 шины вызывает прерывание IRQ9. Для совместимости с драйверами DOS, которые всё ещё ожидают IRQ2, был добавлен обработчик, который перенаправляет IRQ9 на первоначальный обработчик IRQ2.

В PC BIOS (и, следовательно, DOS) традиционно отображает запросы на прерывания ведущего 8259 (IRQ0-IRQ7) на вектора прерываний INT08-INT0F соответственно. А запросы ведомого 8259 (в PC/AT и далее) IRQ8-IRQ15 на INT70-INT77. Это было сделано, несмотря на то, что первые 32 вектора прерываний зарезервированы под внутренние прерывания процессора (по каким-то причинам разработчики архитектуры PC проигнорировали этот факт). Поэтому большинство других операционных систем отображают прерывания (по крайней мере, для ведущего 8259) на другой диапазон векторов прерываний.

Другие операционные системы

Большинство других операционных систем позволяют использовать и другие режимы операций 8259, таких как автоматическое завершение прерывания. Это особенно важно для современных систем на базе x86, в которых значительное количество времени может быть затрачено впустую на задержках обращений в пространстве ввода/вывода при операциях с 8259. Это также позволяет ввести дополнительные способы оптимизации синхронизации, такие как критические секции, в мультипроцессорных системах с устройствами 8259.

Режим работы по фронту/по уровню

Так как шина ISA не поддерживает прерывания по уровню, то для систем PC/XT, PC/AT и MCA 8259 должен быть настроен на работу по фронту. На более новых EISA, PCI и последующих существуют регистры управления работой по фронту/по уровню (Edge/Level Control Registers (ELCRs)), которые позволяют настраивать режим работы для каждой линии IRQ индивидуально, что фактически устраняет необходимость в установке режима работы 8259 для таких систем с ISA шиной.

Эти регистры расположены по адресам 0x4d0 и 0x4d1 пространстве адресов ввода/вывода x86. Их размерность 8 бит, каждый бит соответствует одной из линий IRQ 8259. Когда бит установлен, то линия IRQ срабатывает по уровню, иначе по фронту.

Спонтанные прерывания

При определённых условиях 8259 может сгенерировать спонтанное прерывание, обычно IRQ7 и, гораздо реже, IRQ15.

В первом случае линия IRQ сбрасывается раньше, чем подтверждается. Это может произойти из-за шума на линиях IRQ. В режиме работы по фронту, шум должен удержать линию в высоком состоянии на 100нс (минимальное время для записи в триггер IRR). Когда шум уйдёт, резистор подтяжки вернёт уровень IRQ в низкое состояние, таким образом порождая ложное прерывание. В режиме работы по уровню, шум может вызвать высокое состояние на линии INTR. Когда система выдаст запрос на подтверждение прерывания, 8259 не будет иметь данных для его разрешения и выдаст IRQ7 (значение, выставляемое по умолчанию). Так могут появиться ложные IRQ7.

Похожий случай может появиться, когда демаскирование 8259 и сброс линии IRQ не тщательно синхронизированны. Во многих системах линия IRQ сбрасывается командой записи в пространство адресов ввода/вывода, и процессор не ожидает того, чтобы команда достигла устройства ввода/вывода. Если процессор продолжит и демаскирует соответствующий уровень 8259 до того, как произошёл сброс линии IRQ от устройства, 8259 снова выдаст запрос на прерывание INTR. К тому времени, как процессор распознает этот запрос INTR и выдаст подтверждение, линия IRQ может быть сброшена, и 8259 вернёт спонтанное прерывание IRQ7.

Второй случай похож на первый, за исключением того, что указанная ситуация прилагается к ведомому устройству, то есть когда линия ведущего IRQ2 активна в момент, когда линии IRQ ведомого 8259 неактивны к падающему фронту подтверждения прерывания (INTA). В этом случае будут проявлять спонтанные IRQ15, но это крайне редкий случай.

Поэтому, при работе с IRQ7 рекомендуется проверять в начале обработчика прерывания на повторное вхождение и проверять регистр ISR 8259 для того, чтобы определить, что это не спонтанное прерывание, а прерывание, действительно пришедшее от линии IRQ7.

PC/XT и PC/AT

В архитектуре IBM PC/XT был только один контроллер прерываний 8259, а начиная с IBM PC/AT системы получили второй, ведомый 8259. Линии IRQ0…IRQ7 это линии IR0..IR7 ведущего 8259, а линии IRQ8…IRQ15 это линии IR0..IR7 ведомого 8259. IRQ0…IRQ15 это линии шины ISA, к которой исторически были подключены 8259.

  • Ведущий 8259
    • IRQ0 — Intel 8253 или Intel 8254 Программируемый контроллер таймера
    • IRQ1 — Intel 8042 Контроллер клавиатуры
    • IRQ2 — в PC/XT не был назначен; в PC/AT используется для каскадирования ведомого 8259
    • IRQ3 — COM2 и COM4
    • IRQ4 — COM1 и COM3
    • IRQ5 — контроллер жёсткого диска в PC/XT; LPT2 в PC/AT
    • IRQ6 — контроллер дисковода
    • IRQ7 — LPT1
  • Ведомый 8259 (только в PC/AT и последующих)
    • IRQ8 — часы реального времени (RTC)
    • IRQ9 — нет обычных назначений
    • IRQ10 — нет обычных назначений
    • IRQ11 — нет обычных назначений
    • IRQ12 — контроллер мыши PS/2
    • IRQ13 — математический сопроцессор
    • IRQ14 — контроллер жёсткого диска 1
    • IRQ15 — контроллер жёсткого диска 2

Первоначально IRQ7 был обычным выбором для использования в звуковых картах, но позднее в этой роли использовали IRQ5, чтобы избежать конфликта с портом принтера LPT. Последовательные порты часто отключались, чтобы освободить линию IRQ для другого устройства.

Примечания

  1. Под. ред. чл.-корр. АН УССР Б.Н.Малиновского Глава 2.6. Микросхема программируемого контроллера приоритетных прерываний КР1810ВН59А // Справочник по персональным ЭВМ = Справочник по персональным ЭВМ. — К.: Тэхника, 1990. — С. 384. — ISBN 5-335-00168-2 Стр.81

Рекомендуемые ссылки


Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Intel 8259" в других словарях:

  • Intel 8259 — Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías, prensa diaria o páginas de Internet fidedignas. Puedes añadirlas así o avisar …   Wikipedia Español

  • Intel 8259 — The Intel 8259 is a family of Programmable Interrupt Controllers (PICs) designed and developed for use with the Intel 8085 and Intel 8086 8 bit and 16 bit microprocessors. The family originally consisted of the 8259, 8259A, and 8259B PICs, though …   Wikipedia

  • Intel 8259 — Pinbelegung des 8259 Der Intel 8259 ist ein programmierbarer Unterbrechungs Steuerbaustein (Programmable Interrupt Controller, PIC), der primär für den Intel 8080/8085 Prozessor entwickelt wurde. Später wurde der Chip auch zusammen mit dem Intel… …   Deutsch Wikipedia

  • Intel 8086 y 8088 — Intel 8088 Microprocesador Microprocesador Intel 8088 Producción 1979   1982 Fabricante(s) …   Wikipedia Español

  • Intel 8253 — Intel C8253 Temporizador programable de i …   Wikipedia Español

  • Intel 8255 — Intel D8255 Patillaje del i8255. El Intel 8255 (o i8255 …   Wikipedia Español

  • Intel APIC Architecture — The Intel APIC Architecture is a system of Advanced Programmable Interrupt Controllers (APICs) designed by Intel for use in Symmetric Multi Processor (SMP) computer systems. It was originally implemented by the Intel 82093AA and 82489DX, and is… …   Wikipedia

  • Intel 8089 — Coprocesador de entrada/salida Intel 8089 El Intel 8089 es un coprocesador de entrada/salida disponible para ser usado con el microprocesador Intel 8086 y el Intel 8088. Usaba las mismas técnicas de programación del coprocesador numérico Intel… …   Wikipedia Español

  • Intel 8284 — Generador de reloj Intel 8284 El Intel 8284 es un generador de reloj (clock generator) para los procesadores Intel 8086 e Intel 8088. Puede usar un circuito oscilador regulado por un cristal de cuarzo o una señal TTL como frecuencia de referencia …   Wikipedia Español

  • Intel 8237 — Controlador de DMA Intel 8237 El Intel 8237 es un crontrolador de acceso directo a memoria (DMA), una parte de la familia de microprocesadores MCS 85. Fue usado como el controlador DMA en IBM PC original y en el IBM XT. Posteriormente, los… …   Wikipedia Español


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»