На начало страницы
| Главная страница | Обмен с внешними устройствами | Системная шина ISA | Платы расширения для шины ISA |
| Пример системы сбора данных | Система виртуальной отладки | Справочная информация |
Построение систем сбора и обработки 
информации
Системная шина ISA
Особенности использования прерываний

Для организации обмена процессора с внешними устройствами, размещенными на системной плате и на платах расширения системной шины, используются линии аппаратных прерываний (запросов маскируемых внешних прерываний) и два программируемых контроллера прерываний: ведущий (первый) и ведомый (второй). Часть линий запросов прерываний жестко закреплена за определенными устройствами ПК, некоторые можно освободить и использовать для нужд пользователя, а часть вообще свободна (не используется в стандартном наборе ПК). В основу всех контроллеров в ПК положена микросхема 8259А, которая теперь входит в состав СБИС на системной плате. В РС АТ-совместимых компьютерах выход ведомого контроллера подсоединен внутри СБИС ко входу IRQ2 ведущего. Назначение сигналов шины
Особенности использования
прерываний
После получения запроса прерывания контроллер, если это прерывание в контроллере не замаскировано, и процессором не обслуживается прерывание более высокого приоритета, посылает в процессор сигнал запроса на прерывание - INT. Если процессор на выполняет обработки какого-либо прерывания с более низким приоритетом или если прерывание в процессоре не запрещено, то он входит в машинный цикл подтверждения прерывания - записывает в стек содержимое регистра флагов, сбрасывает разряд IF, записывает в стек содержимое кодового сегмента (CS) и указателя команды (IP), затем выдает контроллеру два сигнала подтверждения прерывания INTА#. Первым сигналом в контроллере сбрасывается в "0" триггер соответствующего запроса прерывания в регистре IRR и устанавливается в "1" разряд регистра ISR, соответствующий уровню обслуживаемого прерывания. После получения второго сигнала INTА# контроллер (ведущий или ведомый) выдает на шину данных 8-разрядный код типа прерывания, который позволяет процессору обратиться к таблице векторов прерываний и далее перейти на программу-обработчик прерывания. Распределение аппаратных
прерываний между
устройствами ПК

СИГНАЛЫ ЗАПРОСОВ ПРЕРЫВАНИЙ
Аппаратное прерывание может быть запрошено ресурсами как на системной плате, так и на платах расширения активизацией соответствующего сигнала IRQ. Запрос прерывания может генерироваться контроллером при изменении состояния входа IRQ (из низкого в высокий) и удержании его высоким (режим триггерного фронта) или при высоком уровне сигнала IRQ (режим триггерного уровня). В компьютерах IBM РС, РС/ХТ, РС/АТ используется распознавание запросов всех прерываний по фронту.
Внешнее устройство сигнал IRQ должно поддерживать на низком уровне в пассивном состоянии и переводить в высокий уровень для активации запроса. Длительность этого высокого состояния не может быть сколь угодно малой. Нет никакой гарантии, что сформированный короткий импульс положительной полярности дойдет до контроллера прерываний, будет им воспринят и корректно идентифицирован. Для правильной идентификации источника запроса высокий уровень сигнала IRQ должен сохраняться до подтверждения прерывания процессором - до фронта 0/1 первого импульса INTА#.
Тем не менее, если запрос прерывания будет отменен (установлен в "0") до окончания первого импульса INTА# и контроллер его зафиксирует, то результат будет всегда одинаков.
Проверьте свои знания контроллера прерываний.
На выполнение какого обработчика прерывания перейдет процессор?
На выполнение какого обработчика прерывания перейдет процессор?
Щелкните левой кнопкой мыши на изображении сигнала запроса прерывания и веберите вариант вызова обработчика прерывания.

Режим запуска по фронту включает в себя также метод блокировки фронта. Это значит, что после переднего фронта запроса прерывания и после подтверждения прерывания положительный уровень входа IRQ блокирует защелкивание в регистре IRR любых новых запросов. Только после того, как вход IRQ станет низким, IRR будет готов к приему нового запроса прерывания (в режиме распознавания по уровню защелкивание в IRR всегда разрешено). Следовательно после подтверждения прерывания как можно раньше соответствующий вход IRQ должен стать неактивным. Сигналы INTА# на системную шину не передаются, поэтому сброс в исходное состояние сигнала запроса прерывания на шине должен программироваться в программе-обработчике. Это действие может заключаться даже просто в обращении процессора к ресурсу, запросившему прерывание.
NB:
Казалось, что можно было бы использовать в качестве запросов прерываний инверсные импульсные сигналы. В таком случае фронт 0/1 импульса возбуждал бы прерывание, а оставшийся положительный уровень всегда присутствовал бы до фронта 0/1 первого сигнала INTА#. Однако уровень останется единичным и после этого, блокируя тем самым прием новых прерываний в регистр IRR.

РАЗДЕЛЯЕМЫЕ ПРЕРЫВАНИЯ
Шина ISA не предусматривает специальных средств для организации разделенной системы прерываний, когда к одной линии запроса прерывания может подключаться несколько источников. В таких случаях при отклике на прерывание процессор вызывает драйвер, который опрашивает соответствующие внешние устройства, чтобы определить, какое из них вызвало запрос прерывания. Разумеется, при этом происходит потеря производительности системы. Ясно, что такие внешние устройства должны иметь какие-то порты, по которым можно идентифицировать источник запроса. Разместить на плате некоторый регистр, фиксирующий флаг запроса прерывания платой расширения может сам изготовитель платы. У последовательного порта ПК такая возможность тоже есть, у параллельного порта - нет. Кроме того, необходимость сохранения высокого уровня сигнала запроса прерывания до подтверждения прерывания процессором затрудняет разделяемое использование линии запроса прерывания. Построение такой системы с реакцией контроллера по фронту сигнала облегчается с источниками запросов, имеющих трехстабильный выход или выход с открытым коллектором. Выход сигнала запроса прерывания должен активизироваться при этом только на время выдачи импульса.
В рамках выполнения домашнего задания запрещается проектировать платы расширения в расчете на разделение линии запроса прерывания с другой платой или внешним устройством ПК. Однако вариантами заданий предусматриваются случаи, когда у платы расширения имеются несколько внешних или внутренних источников запросов прерываний, а сама плата может использовать только одну линию IRQ. В таком случае на плате расширения должен быть обязательно порт для идентификации источника запроса прерывания, а обработчик прерывания должен выполнять те или иные действия в соответствии с определенными приоритетами входных запросов.

УПРАВЛЕНИЕ ПРЕРЫВАНИЯМИ
Существует несколько способов управления прерываниями - их разрешения или запрещения:
Управление на уровне процессора
При входе в программу-обработчик автоматически устанавливается в "0" разряд IF регистра состояния, чем запрещается выполнение любых иных прерываний. Для того, чтобы не нарушать работу ПК (обработку прерываний от таймера, клавиатуры и т.п.) желательно как можно раньше разрешить выполнение прерываний с более высокими приоритетами командой Sti.
Часто при выполнении критических участков программ для того, чтобы гарантировать выполнение определенной последовательности команд целиком приходится запрещать прерывания. Это можно сделать командой Cli. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду Sti, разрешающую процессору воспринимать прерывания. Команда Cli запрещает только маскируемые прерывания.
Проверьте свои знания
Структура обработчика прерывания
Управление на уровне контроллера прерываний
Контроллер прерываний обладает большими возможностями по настройке на тот или иной режим работы, на тот или иной тип используемого микропроцессора. Однако в IBM PC используются обычно вполне определенная настройка, реализуемая BIOS. Программирование контроллеров заключается в посылке в определенной последовательности по определенным адресам слов инициализации ISW1-ISW4 и командных слов OSW1-OSW3 причем последние после инициализации можно подавать в любом порядке и количестве. Контроллер обслуживает многие устройства ПК, поэтому перепрограммировать его следует осторожно и обычно для работы с платами расширения бывает достаточным использование маскирования прерываний от плат расширения и использование стандартной процедуры завершения прерывания.
При необходимости изменения текущего режима работы (запрет или разрешение прерываний определенного или всех уровней) используется посылка в регистр маски (IMR) контроллера командного слова OSW1. Разряды регистра маски прерываний соответствуют номерам IRQ. Для того чтобы замаскировать аппаратное прерывание какого-либо уровня, надо заслать в регистр маски байт, в котором бит, соответствующий этому уровню, установлен в "1".
До завершения выполнения программы-обработчика контроллер должен быть извещен об окончании обработки прерывания, чтобы обновить содержимое регистра ISR. Пользователю доступны 3 формата команды конца прерывания EOI: обычный конец прерывания, специальный конец прерывания, автоматический конец прерывания. Выбор команд определяется пользователем для конкретных применений. Базовой для архитектуры IBM РС является обычная команда EOI, при получении которой контроллер автоматически определяет уровень самого приоритетного прерывания, находящегося в обслуживании, и сбрасывает соответствующий разряд в регистре ISR. После этого разрешается обработка прерываний с более низким приоритетом, чем то, которое только что обрабатывалось.
NB:
Для того, чтобы предотвратить возможность входа еще в один обработчик прерывания в момент, когда корректно не завершена обработка другого (не восстановлены регистры из стека) перед командой EOI реакция на возможные запросы прерываний запрещается командой Cli.
Управление на уровне платы расширения
При эксплуатации систем сбора и обработки данных часто требуется разрешать работу по прерываниям только начиная с некоторого момента времени. Маскирование тех или иных прерываний в контроллере не запрещает, а только откладывает исполнение этих прерываний. Поэтому более правильным решением является запрещение программным или иным образом выработки платой запроса прерывания. На уровне самого внешнего источника запроса прерывания (датчика, пульта управления) это сделать не всегда возможно.

| На главную страницу | На начало раздела | На начало страницы | © КСиТ МИФИ, 2001 г.