16
R – read access (доступен для чтения);
W – write access (доступен для записи);
–0 – после RESET устанавливается в логический 0.
Прерывание запрещено, если соответствующий ему бит сброшен в 0 и
разрешено, если установлен.
1.5. Пример программы работающей по прерыванию периода таймера
Напишем программу, которая будет проверять содержимое 14-ого раз-
ряда программного счетчика и выводить его на светодиодный индикатор.
Один из элементов светодиодного индикатора может быть запрограм-
мирован с помощью вывода XF. Для этого необходимо установить или сбро-
сить флаг XF регистра состояния ST1.
Счетчик будет изменяться не в фоновой программе, а в процедуре об-
служивания прерывания по периоду таймера 2, который будет работать в за-
цикленном режиме снизу вверх.
; Пример 3
IMR .set 0004h ; Interrupt Mask Register
DP_EV .set 0E8h ; Data Page for EV
EV_BASE .set 7400h ; Event Manager Base Address (DP=E8h)
T2PR .set 07h + EV_BASE ; T2 Period Register
T2CON .set 08h + EV_BASE ; T2 Control Register
EVIMRB .set 2dh + EV_BASE ; Group B Interrupt Mask Register
B2_SADDR .set 00060h ; Block B2 Start Address
tpint2vec .set B2_SADDR+13h ; TPINT2 vector address
mon240 .equ 00109h
.bss _stop, 1
.bss _counter, 1
.global begin
.global _stop
.text
begin: setc INTM ; запрет прерываний
ldp #_stop
splk #0,_stop
ldp #DP_EV
splk #03F0h, T2PR ; период таймера 50 мкс
splk #0001000001000010b, T2CON
; ^^^------------------- зацикленный счет вверх
; ^^^---------------- входная частота не масштабируется
; ^--------------- использовать свой бит включения
; ^-------------- таймер включен
; ^^------------ внутренняя синхронизация таймера
; ^-------- использовать свой регистр периода
splk #1, EVIMRB ; разрешить прерывание по периоду таймера 2
ldp #0
splk #_t2per_ISR, tpint2vec ; загрузить в таблицу векторов
; адрес процедуры обработки
; прерывания по периоду таймера 2
ldp #0
lacc IMR
or #100b ; разрешить маскируемые прерывания
; третьего уровня
sacl IMR
clrc INTM ; разрешить маскируемые прерывания
m1: call mon240 ; вызов монитора
ldp #_stop