Обработка прерываний на основе контроллера 8259A
Контроллер прерываний 8259A представляет собой устройство, реализующее до восьми уровней запросов на прерывания, с возможностью программного маскирования и изменения порядка обслуживания прерываний.
Контроллер прерываний (рис. 13.3) состоит из следующих блоков:
- RGI - регистр запретов прерываний; хранит все уровни, на которые поступают запросы IRQx.
- PRB - схема принятия решений по приоритетам; схема идентифицирует приоритет запросов и выбирает запрос с наивысшим приоритетом.
- ISR - регистр обслуживаемых прерываний; сохраняет уровни запросов прерываний, находящиеся на обслуживании контроллера прерываний.
- RGM - регистр маскирования прерываний; обеспечивает запрещение одной или нескольких линий запросов прерывания.
- BD - буфер данных; предназначен для сопряжения с системной шиной данных.
- RWCU - блок управления записью/чтением; принимает управляющие сигналы от микропроцессора и задает режим функционирования контроллера прерываний.
- CMP - схема каскадного буфера-компаратора; используется для включения в систему нескольких контроллеров.
- CU - схема управления; вырабатывает сигналы прерывания и формирует трехбайтовую команду CALL для выдачи на шину данных.
увеличить изображение
Рис. 13.3. Структура контроллера прерываний 8259А
Один контроллер 8259A способен обслуживать прерывания от 8 источников. Для обслуживания большего количества устройств используется каскадное включение контроллеров (рис. 13.4). В системах IBM PC AT каскадное включение позволяет до 15 устройствам сигнализировать о прерывании (табл. 13.1).
увеличить изображение
Рис. 13.4. Каскадное включение контроллеров прерываний
NMI | Ошибка памяти или другая неисправимая ошибка в системе | 02h | |
IRQ0 | Системный таймер | 1 | 08h |
IRQ1 | Клавиатура | 2 | 09h |
IRQ8 | Часы реального времени | 3 | 70h |
IRQ9 | Устройство на шине ISA | 4 | 71h |
IRQ10 | Устройство на шине ISA | 5 | 72h |
IRQ11 | Устройство на шине ISA | 6 | 73h |
IRQ12 | Устройство на шине ISA | 7 | 74h |
IRQ13 | Ошибка сопроцессора | 9 | 75h |
IRQ14 | IDE контроллер | 9 | 76h |
IRQ15 | Устройство на шине ISA | 10 | 77h |
IRQ3 | Последовательный порт (COM2 или COM4) | 11 | 0Bh |
IRQ4 | Последовательный порт (COM1 или COM3) | 12 | 0Ch |
IRQ5 | Параллельный порт (LPT2) или IDE контроллер (вторичный) | 13 | 0Dh |
IRQ6 | Контроллер дисковода | 14 | 0Eh |
IRQ7 | Параллельный порт (LPT1) | 15 | 0Fh |
Поскольку в каждый момент времени может поступить более чем один запрос на прерывание, контроллер прерываний имеет схему приоритетов. В основном режиме - режиме полного вложения, - до тех пор, пока установлен разряд в регистре ISR, соответствующий запрашиваемому прерыванию, все последующие запросы с таким же или более низким приоритетом игнорируются, подтверждаются лишь запросы с более высоким приоритетом.
В циклическом режиме используется круговой порядок использования приоритетов. Последнему обслуженному запросу присваивается низший приоритет, следующему по кругу - наивысший, что гарантирует обслуживание остальных устройств до очередного обслуживания данного устройства.
Контроллер допускает маскирование отдельных запросов прерываний, что позволяет устройствам с более низким приоритетом получить возможность генерировать прерывания. Режим специального маскирования разрешает прерывания всех уровней, кроме уровней, обслуживаемых в данный момент.
Кроме того, для каскадного включения возможен специальный режим полного вложения. Этот режим программируется любым ведущим контроллером при инициализации. В данном режиме игнорируются запросы с приоритетом более низким, чем приоритет обрабатываемого в данный момент запроса, и обслуживаются все запросы с равным или более высоким приоритетом.