Время ожидания прерывания

Время ожидания прерывания - общая задержка между временем, когда генерируется (не подтверждается) прерывание, и временем, когда устройство начинает выполнять подпрограмму обработки прерывания или цикл PTS. Задержка происходит между временем, когда прерывание обнаружено, и временем, когда оно подтверждается. Прерывание подтверждается, когда текущая команда заканчивает выполнение. Если прерывание происходит позже, чем за четыре временных состояния перед концом текущей команды, оно может быть не подтверждено, пока не закончится следующая команда. Такая дополнительная задержка происходит из-за механизма предвыборки команд. Таким образом, максимальная задержка между генерированием прерываний и их подтверждением - четыре временных состояния плюс время выполнения следующей команды.

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

Когда подтверждается прерывание PTS, обращение к PTSCB идет немедленно и начинает выполняться цикл PTS.

Выполнение любого из следующих условий откладывает подтверждение прерывания до окончания выполнения следующей команды:
- знаковый префиксный код операции (FE) для двухбайтового знакового умножения и деления;
- прерывание по невыполняемому коду операции;
- прерывание по программной ловушке;
- любая из следующих защищенных команд: DI, EI, DPTS, EPTS, POPA, POPF, PUSHA, PUSHF.

Время ожидания (для самого длительного случая) состоит из следующих элементов:
- время для окончания выполнения текущей команды (4 такта);
- если это защищенная команда, то следующая за ней команда должна выполниться раньше, чем прерывание может быть подтверждено. Поэтому следует добавить еще и время выполнения команды, которая следует за защищенной;
- время выполнения следующей команды (самая длинная команда NORML занимает 39 тактов);
- только для стандартных прерываний - время получения вектора и обращения к подпрограмме (11 тактов для внутреннего стека или 13 - для внешнего).

Максимальная задержка для стандартного прерывания - 56 тактов (4+39+13). Это время задержки не включает время, необходимое для выполнения первой команды в подпрограмме обработки прерывания.

Максимальная задержка для прерывания PTS - 43 такта (4+39). Это время задержки не включает дополнительную задержку при отключении PTS (PSW.2=0) или при обслуживании PTS c более высоким приоритетом.

Специальные прерывания

8XC196KC/KD поддерживает три специальных прерывания: несуществующий код операции (Unimplemented Opcode), программную ловушку (TRAP) и NMI. На эти прерывания не воздействует бит разрешения прерывания PSW.1 (I), и они не могут маскироваться. Все эти прерывания обслуживаются контроллером прерывания; они не могут быть назначены для обработки PTS.

Из этих трех только NMI идет через детектор перехода и приоритетный шифратор, а другие два специальных прерывания идут непосредственно для обслуживания в контроллер прерывания.

Прерывание по несуществующему коду операции

Если CPU пытается выполнить несуществующий код операции, происходит косвенное обращение по вектору в ячейке 2012H. Это предотвращает произвольное выполнение программ во время отказов программного обеспечения и аппаратных средств.

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

Прерывание по ловушке программного обеспечения

Команда TRAP (код операции 0F7H) выполняет вызов прерывания по вектору в ячейке 2010H. Она выполняет прерывание одиночной команды, которое используется при отладке программного обеспечения или при генерации программных прерываний. Команда TRAP запрещает подтверждение других прерываний, пока не выполнится следующая команда.

Немаскируемое прерывание

Внешний вывод NMI генерирует немаскируемое прерывание для реализации критических подпрограмм прерывания.

Прерывание NMI имеет самый высокий приоритет относительно всех располагаемых по приоритетам прерываний. Оно идет непосредственно от детектора перехода к приоритетному шифратору и оттуда к подпрограмме по вектору в ячейке 203EH.

Прерывание NMI генерируется в течение фазы 1 (CLKOUT=0). Если вывод удерживается в высоком состоянии, многократные прерывания не будут происходить. Если ваша система не использует прерывание NMI, то для предотвращения ложных прерываний заземлите вывод NMI. Хотя в регистре INT_MASK1 существует бит маскирования NMI, однако он не выполняет никакой функции; прерывание NMI разрешено и при установленном, и при сброшенном бите NMI в регистре INT_MASK1. Чтобы гарантировать совместимость с будущими изделиями (программами), всегда сбрасывайте на нуль бит маскирования прерывания NMI.

<<< Содержание >>>