Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KOMAROV.DOC
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.32 Mб
Скачать

1.9.3. Конфигурирование прерываний.

Для конфигурирования прерываний используются следующие регистры:

  • ICNTL – разрешает/запрещает вложенные прерывания, конфигурирует внешние запросы IRQ2#… IRQ0# как фронт- или уровень-чувствительные (см. п. П1.14);

  • IMASK – индивидуально разрешает/запрещает (маскирует) все запросы на прерывания как внешние, так и внутренние (см. п. П1.15);

  • IFC – программно формирует запрос на прерывание (форсирует прерывание) или сбрасывает текущий фронт-чувствительный запрос (см. п. П1.16).

Запросы на прерывание IRQ2#… IRQ0# могут быть как фронт-чувствительные, так и уровень-чувствительные, т.е. доступны для конфигурирования через регистр ICNTL. Запрос IRQE# всегда фронт-чувст­ви­тель­ный, IRQL1#, IRQL0# – уровень-чувствительные.

Фронт-чувствительные запросы всегда запоминаются во внутренних триггерах процессора, когда формируется срез (переход из высокого уровня в низкий) запроса. Запрос сохраняется до тех пор, пока не будет обслужен. Он автоматически сбрасывается, когда происходит выход из обработчика. Может быть программно сброшен раньше (внутри обработчика) с помощью регистра IFC. Фронт-чувствительные запросы требуют меньшей аппаратуры для своего формирования чем уровень-чувствительные запросы.

Уровень-чувствительные запросы должны оставаться активными до начала их обслуживания, после чего должны быть сброшены, чтобы исключить рекурсивный вызов обработчика. Достоинством таких запросов является простота расширения числа источников запросов на прерывания. Эти источники можно объединять с помощью логического элемента ИЛИ для формирования одного запроса на прерывание. Уровень-чувст­ви­тель­ные запросы не сохраняются внутри процессора.

Если вложенные прерывания запрещены, то после перехода на обработчик любого запроса все оставшиеся запросы маскируются. В противном случае разрешено прерывание обработчика с меньшим приоритетом запросом на прерывание с большим приоритетом.

Работа с регистром ICNTL. Регистр ICNTL (см. п. П1.14) является 5-битным регистром, который конфигурирует внешние запросы на прерывания (IRQx#). После сброса процессора значение всех битов этого регистра не определено.

Биты ICNTL2…ICNTL0 содержат признак чувствительности запросов IRQ2#…IRQ0#. Причем, единица определяет чувствительность к фронту, а нуль – к уровню. Бит ICNTL4 содержит признак разрешения(1)/запрета(0) вложенных прерываний. Изменения содержимого регистра ICNTL вступают в силу через один машинный цикл после завершения команды, которая эти изменения вызвала.

Работа с регистром IMASK. Каждый бит регистра IMASK (см. п. П1.15) разрешает (если содержит 1) или запрещает (если содержит 0) соответствующий запрос на прерывание. После сброса процессора этот регистр обнулен. Изменения содержимого регистра IMASK вступают в силу через один машинный цикл после завершения команды, которая эти изменения вызвала. Это не относится к автобуферизации последовательного порта и ПДП передачам.

Замаскированные фронт-чувствительные запросы запоминаются, но не обслуживаются. Они могут быть распознаны программой и обслужены позднее. Содержимое регистра IMASK автоматически сохраняется в стеке состояния при входе в обработчик прерывания и считывается при выходе из обработчика. После сохранения содержимое регистра IMASK зависит от состояния бита разрешения вложенных прерываний ICNTL4. Если вложенный режим запрещен, то после сохранения регистр IMASK заполняется нулями, в противном случае нули появляются в битах, соответствующих запросам с приоритетом равным или меньшим чем обрабатываемый. Биты с большим приоритетом остаются без изменения. Это позволяет запросам с большим приоритетом, чем обслуживаемый, прерывать выполнение программы.

Глобальное разрешение/запрещение прерываний. Глобально разрешить прерывания можно командой ENA INTS;, а запретить – DIS INTS;. (INTS – седьмой бит регистра MSTAT, см. табл. 1.12). После сброса процессора все прерывания глобально разрешены. Глобальное запрещение прерываний вызывает маскирование всех запросов, включая powerdown, независимо от содержимого регистра IMASK.

Глобальное разрешение прерываний позволяет процессору обслуживать все незамаскированные запросы на прерывания. Глобальный запрет прерываний не влияет на запрос от автобуферизации последовательного порта.

Работа с регистром IFC. Сформировать фронт-чувствительный запрос на прерывание можно программно с помощью регистра IFC (см. п. П1.16). Для этого необходимо установить бит формирования соответствующего запроса. Если установленный запрос не замаскирован, то он будет обслуживаться, как если бы был внешним.

С помощью регистра IFC может быть также сброшен запрос незавершенного прерывания (при завершении прерывания бит запроса сбрасывается автоматически). Для этого необходимо установить соответствующий бит очистки запроса прерывания. Изменения содержимого только для записи регистра IFC вступают в силу через один машинный цикл после завершения команды, которая эти изменения вызвала.

Временные задержки. Для запросов на прерывания от таймера, IRQx#, и SPORT задержка между моментом времени появления запроса и выполнением первой команды обработчика составляет три машинных цикла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]