Номер
|
IRQN
|
Описание прерывания
|
8
|
IRQ0
|
Прерывание таймера, возникает с частотой 18.2 Гц.
|
9
|
IRQ1
|
Прерывание от клавиатуры. Генерируется при нажатии и отпускании клавиши. Используется для чтения данных от клавиатуры.
|
A
|
IRQ2
|
Каскадирование аппаратных прерываний.
|
70
|
IRQ8
|
Прерывание от часов реального времени.
|
71
|
IRQ9
|
Прерывание от контроллера видеоадаптера.
|
72
|
IRQ10
|
Зарезервировано.
|
73
|
IRQ11
|
Зарезервировано.
|
74
|
IRQ12
|
Зарезервировано.
|
75
|
IRQ13
|
Прерывание от математического сопроцессора.
|
76
|
IRQ14
|
Прерывание от контроллера жесткого диска.
|
77
|
IRQ15
|
Зарезервировано.
|
B
|
IRQ3
|
Прерывание асинхронного порта COM2.
|
C
|
IRQ4
|
Прерывание асинхронного порта COM1.
|
D
|
IRQ5
|
Прерывание от контроллера жесткого диска.
|
E
|
IRQ6
|
Прерывание контроллера флоппи-диска по завершении операции.
|
F
|
IRQ7
|
Прерывание принтера. Генерируется принтером,
когда он готов к выполнению очередной операции.
|
Микросхема 8259 имеет три однобайтовых регистра, которые управляют 8 линиями аппаратных прерываний (рис. 42). Регистр запроса на прерывание IRR (Interrupt Request Register) устанавливает соответствующий бит, когда линия прерывания сигнализирует о запросе. Затем проверяется, не обрабатывается ли другое прерывание. Для этого контроллер запрашивает информацию от регистра обслуживания ISR (Interrupt Service Register). Регистр использует адреса портов 20h и A0h для первого и второго контроллера 8259 соответственно.
Перед вызовом прерывания проверяется регистр маски прерываний (Interrupt Mask Register, IMR), чтобы узнать, разрешено ли в данный момент прерывание данного уровня. Проверка связана с тем, что некоторые программы нежелательно прерывать, и они могут запретить аппаратные прерывания. Запрещение всех аппаратных прерываний необходимо при выполнении критических участков программного кода, а также при изменении вектора прерывания, чтобы избежать выполнения прерывания, когда вектор изменен только наполовину.
Рис. 42. Схема обработки аппаратного прерывания.
Регистр IMR определен за адресами 21h или A1h и предназначен только для записи. Если бит в этом порту установлен в 1, то прерывание с соответствующим номером будет запрещено. Для запрета определенных аппаратных прерываний следует установить биты регистра IMR, соответствующие номерам прерываний, выбранным для маскирования.
По завершении подпрограммы обработки прерывания разряд ISR должен быть установлен в нулевое состояние, соответствующий последнему обслуженному запросу с тем, чтобы была разрешена обработка прерываний с более низкими приоритетами, чем только что обработанное. Для этого в регистр ISR должен быть передан код 20h.
Регистр ISR позволяет получить содержимое регистров ISR и IRR. Код команды чтения регистра ISR равен 0Ah, регистра IRR – 0Bh. После выполнения команд содержимое регистров ISR и IRR доступно из портов 20h и A0h соответственно. Для получения содержимого регистра IMR необходимо выполнить чтение портов с адресами 21h или A1h.
Do'stlaringiz bilan baham: |