Intel 8259A
Intel 8259A — это программируемый контроллер прерываний (Programmable Interrupt Controller, PIC), разработанный компанией Intel для использования в микропроцессорных системах на базе процессоров семейства x86. Предназначен для управления запросами на прерывание от внешних устройств, их приоритезации и передачи соответствующего вектора прерывания центральному процессору. Микросхема 8259A является усовершенствованной версией более ранней модели 8259 и стала стандартным компонентом в архитектуре IBM PC/AT и совместимых с ней компьютерах.
История
Разработка контроллера прерываний 8259 была начата компанией Intel в конце 1970-х годов в рамках создания набора микросхем поддержки для микропроцессора 8086. Первоначальная версия (8259) имела ряд ограничений, в частности, не поддерживала каскадное включение нескольких контроллеров. В 1980 году была выпущена модификация 8259A, которая устранила эти недостатки и обеспечила совместимость с новыми поколениями процессоров.
В 1981 году контроллер 8259A был использован в первой модели IBM PC на базе процессора 8088. В архитектуре IBM PC/AT (1984 год) применялась схема с двумя каскадно-соединёнными контроллерами 8259A, что позволяло обслуживать до 15 внешних прерываний (одно из 16 линий занималось каскадным подключением). Эта конфигурация оставалась стандартной для всех совместимых с IBM PC компьютеров вплоть до середины 1990-х годов, пока не была вытеснена более современными решениями, такими как Advanced Programmable Interrupt Controller (APIC), встроенный в чипсеты и процессоры.
Устройство и принцип работы
Микросхема 8259A представляет собой интегральную схему с 28 выводами, выполненную в корпусе DIP или PLCC. Основные функциональные блоки включают:
- Регистр запросов прерываний (IRR) — хранит состояние всех активных запросов на прерывание.
- Регистр обслуживания (ISR) — хранит информацию о прерываниях, которые в данный момент обрабатываются.
- Регистр маски прерываний (IMR) — позволяет программно блокировать отдельные линии запросов.
- Логика приоритетов — определяет, какой из поступивших запросов будет обработан первым.
- Логика управления — управляет последовательностью обработки прерываний и взаимодействием с процессором.
Основные характеристики
- Количество входов прерываний: 8 (IR0–IR7) для одного контроллера; при каскадном включении — до 64 (8 мастер-контроллеров × 8 слейв-контроллеров, но на практике в IBM PC/AT использовалось 2).
- Тип прерываний: аппаратные (маскируемые) прерывания.
- Режимы работы: фиксированный приоритет, циклический приоритет, режим специальной маски, режим опроса, режим вложенных прерываний.
- Совместимость: с процессорами Intel 8086, 8088, 80286, 80386, 80486 и ранними моделями Pentium.
Процесс обработки прерывания
- Внешнее устройство подаёт сигнал на один из входов IR0–IR7.
- Контроллер регистрирует запрос в IRR и, если соответствующая линия не замаскирована в IMR, передаёт сигнал INT (запрос прерывания) процессору.
- Процессор завершает текущую инструкцию и отвечает сигналом INTA (подтверждение прерывания).
- Контроллер выставляет на шину данных вектор прерывания — 8-битное число, которое процессор использует для поиска адреса обработчика в таблице векторов прерываний.
- Процессор переходит к выполнению обработчика прерывания.
- По окончании обработки программа подаёт команду End of Interrupt (EOI), после чего контроллер сбрасывает соответствующий бит в ISR и может обрабатывать новые запросы.
Режимы работы
Контроллер 8259A поддерживает несколько режимов, программируемых через регистры управления:
- Режим фиксированного приоритета: линия IR0 имеет наивысший приоритет, IR7 — наинизший.
- Режим циклического приоритета: приоритеты линий циклически сдвигаются после каждого прерывания, что обеспечивает равномерную обработку устройств.
- Режим специальной маски: позволяет временно разрешить прерывания от линий с более низким приоритетом, даже если обрабатывается прерывание от линии с более высоким приоритетом.
- Режим опроса: процессор периодически опрашивает контроллер на наличие ожидающих прерываний, вместо использования аппаратного сигнала INT.
- Режим вложенных прерываний: разрешает прерывание от линии с более высоким приоритетом во время обработки прерывания от линии с более низким приоритетом.
Каскадное включение
Для увеличения количества обслуживаемых прерываний несколько контроллеров 8259A могут быть соединены каскадно. В такой конфигурации один контроллер выступает в роли мастер-устройства, а остальные — слейв-устройства. Выход INT слейв-контроллера подключается к одному из входов IR мастер-контроллера. При поступлении прерывания от слейв-устройства мастер-контроллер передаёт процессору специальный код, указывающий, какой именно слейв-контроллер обработал запрос. В архитектуре IBM PC/AT использовалось два контроллера 8259A: мастер (IR0–IR7) и слейв (IR8–IR15), подключённый к линии IR2 мастера.
Программирование
Программирование контроллера 8259A осуществляется через порты ввода-вывода. Для IBM PC/AT стандартные адреса:
- Мастер-контроллер: порты 0x20 (команды) и 0x21 (данные).
- Слейв-контроллер: порты 0xA0 (команды) и 0xA1 (данные).
Инициализация контроллера включает запись последовательности управляющих слов (ICW1–ICW4), которые задают режим работы, базовый вектор прерываний, тип каскадного включения и другие параметры. После инициализации могут быть записаны операционные слова (OCW1–OCW3) для управления маскированием, приоритетами и другими функциями.
Применение
Контроллер 8259A широко использовался в персональных компьютерах на базе архитектуры x86, а также во встраиваемых системах, промышленных контроллерах и других устройствах, где требовалось управление аппаратными прерываниями. В IBM PC/AT и совместимых компьютерах он обслуживал прерывания от таких устройств, как:
- IR0: системный таймер
- IR1: клавиатура
- IR2: каскадное подключение слейв-контроллера
- IR3: последовательный порт COM2
- IR4: последовательный порт COM1
- IR5: параллельный порт LPT2 (или звуковая карта)
- IR6: контроллер гибких дисков
- IR7: параллельный порт LPT1
Слейв-контроллер обслуживал прерывания от:
- IR8: часы реального времени
- IR9: программное прерывание (переадресация на INT 0x0A)
- IR10: зарезервировано
- IR11: зарезервировано
- IR12: мышь (PS/2)
- IR13: математический сопроцессор
- IR14: первичный канал IDE
- IR15: вторичный канал IDE
Устаревание и замена
С развитием вычислительной техники возможности контроллера 8259A перестали удовлетворять требованиям многопроцессорных систем и высокопроизводительных устройств. В 1990-х годах на смену ему пришёл Advanced Programmable Interrupt Controller (APIC), который был интегрирован в чипсеты материнских плат и процессоры. APIC поддерживает до 255 прерываний, работает в многопроцессорных конфигурациях, обеспечивает более гибкое управление приоритетами и поддерживает сообщения о прерываниях через шину (Message Signaled Interrupts, MSI). Тем не менее, для обеспечения обратной совместимости с устаревшим программным обеспечением, в современных чипсетах и операционных системах (например, Windows, Linux) сохраняется эмуляция контроллера 8259A в режиме совместимости (Legacy PIC mode).
Интересные факты
- Контроллер 8259A был одной из первых микросхем, реализующих программируемую логику обработки прерываний, что позволило разработчикам гибко настраивать систему под конкретные задачи.
- В архитектуре IBM PC/AT вектор прерываний для мастер-контроллера был установлен на 0x08–0x0F, а для слейв-контроллера — на 0x70–0x77. Это вызывало конфликты с программными прерываниями BIOS, что потребовало переназначения векторов в защищённом режиме.
- В некоторых встраиваемых системах контроллер 8259A продолжает использоваться до сих пор благодаря своей простоте и низкой стоимости.
Источники
- Intel Corporation. 8259A Programmable Interrupt Controller Datasheet. 1988.
- IBM Corporation. IBM PC/AT Technical Reference. 1984.
- Shanley, T., Anderson, D. ISA System Architecture. Addison-Wesley, 1995.
- Messmer, H.-P. The Indispensable PC Hardware Book. Addison-Wesley, 2002.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →