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