
- •Системное программирование
- •Контрольные вопросы
- •2. Программная модель микропроцессора 8086
- •2.1. Представление информации
- •2.2. Регистры микропроцессора
- •2.3. Формат машинной команды
- •2.4. Способы задания операндов команды
- •Контрольные вопросы
- •3. Основные понятия языка ассемблера
- •3.1. Предложения
- •3.2. Директивы определения данных
- •3.3. Выражения
- •Контрольные вопросы
- •4. Сегментированная модель памяти
- •4.1. Сегментирование адресов
- •4.2. Директивы сегментации
- •4.3. Общая структура программы
- •4.4. Модели памяти
- •Контрольные вопросы
- •5. Основные группы команд
- •5.1. Соглашению по описанию команд
- •5.2. Команды пересылки данных
- •5.3. Арифметические команды
- •5.4. Логические команды
- •5.5. Команды переходов
- •5.6. Команды организации циклов
- •5.7. Команды обработки строк
- •5.8. Стековые команды
- •5.9. Команды ввода-вывода
- •5.10. Команды прерываний
- •5.11. Команды управления микропроцессором
- •Контрольные вопросы
- •6. Подпрограммы
- •Контрольные вопросы
- •7. Разработка одномодульной программы
- •7.1. Трансляция и компоновка программы
- •7.2. Отладка программы
- •Контрольные вопросы
- •8. Разработка многомодульных программ
- •8.1. Принципы разработки модулей
- •8.2. Расширенное применение директивы сегментации
- •9. Упражнения
- •Контрольные вопросы
- •Программирование микропроцессорных устройств
- •10. Программирование системного таймера
- •10.1. Описание таймера-счетчика 8254
- •10.2. Режимы работы таймера
- •10.3. Структура регистров таймера
- •10.4. Упражнения
- •Контрольные вопросы
- •11. Программирование контроллера прерываний
- •11.1. Механизм обработки прерываний
- •11.2. Типы прерываний
- •11.3. Приоритеты прерываний
- •11.4. Контроллер прерываний 8259
- •11.5. Идентификация прерываний
- •11.6. Прерывания bios и ms-dos
- •11.7. Упражнения
- •Контрольные вопросы
- •12. Программирование параллельного порта
- •12.1. Интерфейс Centronics
- •12.2. Работа с параллельным портом на низком уровне
- •12.3. Стандартные средства работы с параллельным портом
- •12.4. Упражнения
- •Контрольные вопросы
- •13. Программирование последовательного порта
- •13.1. Основы последовательной передачи данных
- •13.2. Последовательный интерфейс rs-232c
- •13.3. Универсальный асинхронный приемо-передатчик 8250
- •13.4. Порты асинхронного адаптера
- •13.5. Стандартные средства программирования последовательного порта
- •13.6. Упражнения
- •Контрольные вопросы
- •Литература
- •141 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета
11.3. Приоритеты прерываний
Одновременно может возникать несколько запросов на прерывание, поэтому микропроцессор должен обслуживать их в соответствии с приоритетом. Сначала обслуживаются прерывания с высоким приоритетом, а затем – с более низким. Максимальный приоритет соответствует уровню 0 и убывает с возрастанием номера.
Высший приоритет имеют исключения деления, точки останова и переполнения и программные прерывания. Они взаимно исключают друг друга, т.е. могут произойти при выполнении только определённых инструкций микропроцессора. Поэтому ситуации, когда необходимо обслужить одновременно несколько прерываний этих видов, возникнуть не может. Затем по приоритету следует немаскируемое внешнее прерывание, и потом маскируемые внешние прерывания. Самый низкий приоритет имеет трассировочное прерывание.
11.4. Контроллер прерываний 8259
Внешние устройства не выдают запросы прерываний напрямую микропроцессору, а передают их специальной микросхеме – контроллеру прерываний, который способен обслуживать запросы прерываний сразу от нескольких устройств и обеспечивает выдачу соответствующих векторов. Заметим, что микропроцессор не задает необходимость обязательного использования контроллера прерывания. Можно разработать систему, в которой каждое устройство будет самостоятельно выдавать определённый для него вектор прерывания. Однако при этом необходимо будет решать вопрос приоритетности прерываний.
В IBM PC совместимых устройствах используется микросхема программируемого котроллера прерываний Intel 8259 (отечественный аналог КР580ВН59 или КР1810ВН59А) для обслуживания запросов прерываний от различных устройств. Контроллер обеспечивает восемь векторов.
Запрос на прерывание обозначается как IRQ (Interrupt Request) с соответствующим порядковым номером. Для IBM PC XT существует 8 уровней приоритетов, а для IBM PC AT и последующих серий – 16. Обращения к соответствующим уровням обозначаются сокращениями от IRQ0 до IRQ7 (или от IRQ0 до IRQ15), что означает запрос на прерывание.
Микросхемы контроллера прерываний можно объединять (каскадировать) для увеличения количества уровней приоритетов. При этом общее число уровней прерываний будет достигать 64. Запросы на прерывание 0-7 соответствуют векторам прерываний от 8H до 0FH, запросы на прерывания 8-15 – векторами от 70H до 77H. В табл. 92 приведены назначения этих прерываний.
Табл. 92. Аппаратные прерывания в порядке приоритета.
Номер |
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.