Вычислительное ядро начинает выполнять подпрограмму обработки прерывания.
В указатель команды заносится адрес подпрограммы обработки прерывания (содержавшийся в регистре вектора прерываний).
Бит INS устанавливается в единицу для подтверждения рекурсивного вызова по прерыванию.
Адрес возврата помещается в стек.
Отменяется вызов следующей команды.
Режим прерывания в микроконтроллерах MAXQ инициализируется конечным автоматом, формирующим команду вызова CALL. При вызове подпрограммы обслуживания прерывания вычислительное ядро временно берет контроль и выполняет следующую последовательность действий:
Если прерывание разрешено, то оно обслуживается аппаратно. Все запросы на прерывание выбираются по нарастающему фронту системного синхроимпульса и обслуживаются микроконтроллером в следующем цикле, даже если условие вызова прерывания уже закончилось. Задержка на один цикл связана с тем, что текущая команда также может осуществлять доступ к стеку. По этой причине вычислительное ядро должно позволить текущей команде завершить начатое действие и осуществить переход по вектору прерывания. Если прерывание формируется в момент выполнения команды, то следующая за ней команда также должна быть выполнена, так что вызов подпрограммы обработки прерывания будет задержан еще на один цикл.
Работа системы обработки прерываний
Регистр вектора прерываний (IV) определяет адрес подпрограммы обработки прерываний. В него может быть занесен любой адрес памяти программы. По умолчанию регистр вектора прерывания содержит нулевой адрес (0000h), который является адресом вектора сброса.
Так как все векторы прерываний имеют один адрес прерывания, содержащийся в регистре вектора прерываний (IV), то для идентификации модуля источника прерывания может использоваться регистр идентификации прерываний (Interrupt Identification Register - IIR). IIR содержит биты, соответствующие каждому модулю источников прерываний и один бит, соответствующий системным источникам прерываний. Если модуль способен формировать прерывания по различным условиям, то идентификацию можно обеспечить путем анализа битов соответствующего периферийного модуля.
Если выполняется условие прерывания, то устанавливается соответствующий ему флаг, даже если это прерывание запрещено на локальном, модульном или глобальном уровне. Для избежания повторных прерываний эти флаги после обслуживания должны быть программно сброшены.
Рисунок 10. Пример иерархии источников прерывания микроконтроллеров MAXQ
Бит локального разрешения прерывания для каждого конкретного источника находится в одном из периферийных регистров (для периферийных устройств) или в одном из системных регистров (для системных прерываний). Между глобальным и локальными битами разрешения прерываний могут быть промежуточные модульные биты маскирования прерываний. Эти биты маскирования находятся в системном регистре масок прерываний (Interrupt Mask). Управляя этими битами можно одной командой разрешать или запрещать прерывание от всех периферийных устройств одного модуля. Это упрощает реализацию системы приоритетов прерываний. Иерархия системы разрешения прерываний показана на рисунке 10.
Для того чтобы микроконтроллер MAXQ мог обслужить прерывание необходимо, чтобы было глобальное, модульное и локальное разрешения прерываний. Бит глобального разрешения прерываний (Interrupt Global Enable - IGE), расположенный в регистре контроля прерываний (Interrupt Control - IC), является глобальной маской прерываний. По умолчанию значение этого бита равно 0, поэтому для разрешения прерываний он должен быть установлен в 1.
Обслуживание прерываний
Микроконтроллеры семейства MAXQ имеют единственный вектор прерывания (IV), который может использоваться для обслуживания внешних и внутренних прерываний. Прерывания могут быть сгенерированы системными источниками (например, сторожевой таймер) или источниками, связанными с периферийными модулями, включенными в определенный микроконтроллер MAXQ. Одновременно может быть обслужено только одно прерывание, и все прерывания естественно имеют один и тот же приоритет. Программирование регистра маскирования прерываний позволяет программно обеспечивать приоритет прерываний.
object width="140" height="200"
Электромеханика
Главная страница
Комментариев нет:
Отправить комментарий