Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Традиционный контроллер прерываний — PIC



Контроллер прерываний (PIC) 8259A является периферийным устройством, которое связано с процессором через ту или иную шину расширения ввода-вы­вода. По этой шине процессор может обращаться к регистрам контроллера, про­граммируя его режимы и управляя им, а также получать от контроллера 8-бит­ный вектор прерывания, для чего в интерфейсе системной шины процессора и шины расширения имеется специальная команда подтверждения прерывания (INTA). Контроллер 8259А имеет 8 входов запросов от источников и один вы­ход общего запроса. Каждому из входов соответствует свой вектор; программированием регистров контроллера задается номер вектора для входа 0, осталь­ным входам соответствуют последующие номера векторов. Каждый вход может быть программно замаскирован — тогда он не вызывает сигнал общего запроса. Контроллер занимает два адреса в пространстве ввода-вывода, программное об­ращение позволяет управлять режимами работы контроллера, а также приори­тетами и масками запросов. Кроме того, контроллер позволяет работать в ре­жиме опроса (poll mode), или полита (polling), обеспечивая идентификацию источника прерывания (с учетом приоритетов) без выработки общего запроса.

С каждым входом запроса в контроллере связано по одному биту в регистрах IRR, IMR и ISR; бит 0 каждого из этих регистров относится ко входу 0, бит 1 — ко входу 1, бит 7 — ко входу 7:

♦ IRR (Interrupt Request Register) — регистр запросов прерываний. В этом ре­
гистре бит устанавливается при обнаружении сигнала прерывания на соот­
ветствующем входе, независимо от маски.

♦ IMR (Interrupt Mask Register) — регистр масок прерываний. Единичное зна­
чение бита означает замаскированность данного входа — по запросу с замас­
кированного входа общий запрос прерывания не генерируется.

♦ ISR (Interrupt Service Register) — регистр обслуживаемого прерывания.

Контроллер прерываний позволяет программировать свои входы на чувстви­тельность к уровню или перепаду сигнала.

Чувствительность к уровню (level sensitive) означает, что контроллер пре­
рываний вырабатывает запрос прерывания процессора по факту обнаруже­
ния определенного уровня на входе IRQx. Если к моменту завершения обра­
ботки этого запроса (после записи команды EOI в регистр контроллера
прерываний) контроллер снова обнаруживает активный уровень на том же
входе DRQx, то он снова формирует запрос на прерывание процессора.

Чувствительность к перепаду (edge sensitive) означает, что контроллер пре­
рываний вырабатывает запрос прерывания процессора только по факту об­
наружения перепада (на ISA — положительного) на входе IRQx. Повторно за­
прос по этому входу возможен только по следующему такому же перепаду,
то есть сигнал предварительно должен вернуться в исходное состояние.

В любом случае сигнал запроса аппаратного прерывания IRQx должен удержи­ваться генерирующей его схемой, по крайней мере, до цикла подтверждения прерывания процессором — именно в этот момент PIC определяет самый при­оритетный незамаскированный запрос и по нему формирует вектор. Если к это­му моменту запрос окажется снятым, источник прерывания корректно иденти­фицирован не будет, и контроллер сообщит ложный вектор прерывания (spurious interrupt), соответствующий его входу с максимальным номером (IRQ7 для пер­вого контроллера и IRQ15 для второго). Обычно периферийные устройства строят так, что сигнал запроса сбрасывается при обращении программы обслу­живания прерывания к соответствующим регистрам адаптера, так что ложных прерываний возникать не должно.

Один контроллер PIC 8259A позволяет обслуживать 8 запросов прерываний; в PC/AT применяется каскадное соединение двух контроллеров, один из которых является ведущим, другой — ведомым. Ведущий контроллер 8259А#1 об­служивает запросы 0, 1, 3-7; его выход подключается ко входу запроса преры­ваний процессора. К его входу 2 подключен ведомый контроллер 8259А#2, который обслуживает запросы 8-15. При этом поддерживается вложенность приоритетов — запросы 8-15 со своим рядом убывающих приоритетов вклини­ваются между запросами 1 и 3 ведущего контроллера, приоритеты запросов ко­торого также убывают с ростом номера. В XT каскадирование не применялось, и один контроллер 8259 А обслуживал все 8 линий запросов.

В IBM PC/XT/AT используется специальный режим вложенных прерываний с фиксированным приоритетом и автоматическим неспецифическим заверше­нием. После инициализации (процедурой POST и при загрузке ОС) все неис­пользуемые входы контроллеров замаскированы (на запросы прерываний не реагируют), а их векторы прерываний указывают на «заглушку» — процедуру с единственной инструкцией IRET. Для подключения обработчика прерывания от устройства первым делом следует загрузить обработчик в память и устано­вить указатель на него в таблице прерываний. Далее следует демаскировать со­ответствующий ему вход в контроллере прерываний. Если обработчик преры­вания удаляется из памяти, предварительно должен быть замаскирован соот­ветствующий ему вход контроллера. Все изменения в таблице прерываний должны выполняться при замаскированных прерываниях, чтобы избежать по­пытки использования вектора в процессе его модификации (это приведет к «вылету» программы — обращению по некорректному адресу).

В современных системных платах функции контроллеров прерываний возлага­ются на чипсет, который может иметь и более гибкие средства управления, чем пара контроллеров 8259А. Процедура инициализации контроллеров может и отличаться от традиционной, но ею занимается тест POST, который «знает» особенности системной платы. Однако в операционном режиме всегда сохраня­ется программная совместимость с 8259А. При работе с контроллером прерыва­ний от программы требуется лишь управлять маской своего запроса (при ини­циализации программы нужно обнулить маску требуемого запроса) и корректно завершать обработку прерываний. Каждая процедура обработки аппаратного прерывания должна завершаться командой EOI (End Of Interruption), посылае­мой контроллеру:

♦ для 1-го контроллера — посылка байта 20h по адресу 020h;

♦ для 2-го контроллера — посылка байта 20h по адресу OAOh; программный
вызов прерывания OAh — завершение для ведущего контроллера; для неко­
торых старых версий BIOS был необходим явный сброс маски запроса в ре­
гистре 2-го контроллера.

Некорректно завершенная процедура не позволит повторно использовать дан­ный или другие запросы прерываний.

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.