2.5 Реализация прерываний
Микроконтроллер выполняет пять видов прерываний: одно программное и четыре аппаратных. При реализации прерывания в стек загружается содержимое основных регистров процессора в, следующей последовательности; CCR – A –X – PCh – PCl, где РСh, РСl – старший и младший байты содержимого PC. После этого в PC загружается адрес первой команды подпрограммы обслуживания из таблицы, которая размещается в ячейках ППЗУ с адресами, задаваемыми соответствующим вектором прерывания Ve (табл. 2.4). Выполнение подпрограммы обслуживания должно заканчиваться командой возврата из прерывания RTI, которая выбирает из стека и восстанавливает содержимое регистров PC, X, A, CCR, обеспечивая продолжение прерванной программы.
П
Таблица 2.4 –
Векторы
прерывания и сброса
Вектор
Ve
Вид прерывания
$1FF4
Запрос СПП
$1FF6
Запрос АПП
$1FF8
Запрос таймера
$1FFA
Внешний
сигнал IRQ#
$1FFC
Команда
SWI
$S1FFE
Установка
начального состояния (RESET)
Аппаратные прерывания вызываются запросами последовательных портов АПП, СПП, таймера и поступлением уровня 0 на вход внешнего прерывания IRQ#.
Аппаратные прерывания являются маскируемыми: их обслуживание не выполняется при установке признака I=1 в регистре CCR. Команда SWI выполняется при любом значении признака I.
Формирование внутренних запросов прерывания от АПП, СПП таймера рассмотрено в [1]. Внешним запросом прерывания может быть либо поступление отрицательного перепада потенциала на вход IRQ#, либо установка на этом входе уровня 0.Это зависит от значения бита IRQ в регистре конфигурации OR микроконтроллера: при IRQ=0 прерывание вызывается отрицательным перепадом, при IRQ=1 – уровнем 0. Если прерывание вызывается перепадом потенциала, то после его обслуживания следующее прерывание происходит только при поступлении нового перепада. Если прерывание вызывается уровнем, то при сохранении уровня сигнала IRQ#=0 микроконтроллер повторяет выполнение подпрограммы обслуживания, пока не установится значение сигнала IRQ#=1.
Поступление внешнего или внутренних запросов проверяется микроконтроллером после выполнения каждой команды программы. Если поступило несколько запросов, то в первую очередь обслуживается запрос с более высоким приоритетом. Запросы имеют фиксированные приоритеты: внешний запрос IRQ# (высший приоритет), затем запрос таймера, запрос АПП, запрос СПП (низший приоритет).
Обслуживание запросов выполняется в соответствии с их векторами Ve – адресами ячеек ППЗУ, из которых загружается новое содержимое PC (см. табл. 2.4). Это содержимое является адресом первой команды соответствующей подпрограммы обслуживания (входом в подпрограмму). При обслуживании внутренних запросов эта подпрограмма должна проанализировать содержимое регистров состояния запросившего устройства (таймера, АПП или СПП), чтобы выяснить причину запроса и обеспечить выполнение необходимой процедуры.