28 / 35 page

Revision 1.6
-28-
02/28/2000
5.6
Timer Interrupt
Because CPU may enter timer interrupt routine at any time, the timer interrupt routine should backup all
special registers at its entry point and restore them before return.
(Address 0x004)
TIMER_ENTRY: MOV
A_TEMP, A
SWAPR
A, STATUS
BCR
STATUS, BS
MOV
S_TEMP, A
MOV
A, INDAR
MOV
I_TEMP, A
;
; Execute interrupt service routine
;
MOV
A, I_TEMP
MOV
INDAR, A
SWAPR
A, S_TEMP
MOV
STATUS, A
SWAPR
A_TEMP
SWAPR
A, A_TEMP
BCR
INTEN, TMROF
RETI
5.7
Conditional Branch
Example: Conditional branch can be according to value of Accumulator. Firmware can use this method to
return value for lookahead table. Because Accumulator is only 8 bits wide, the higher 5 bits of Program
Counter should be load into PCHBUF before the conditional branch executed.
(Address 0x540)
LOOKAHEAD:
MOVIA
0x05
MOV
PCHBUF, A
MOVIA
LOOKAHEAD_VAL
ADDAR
PCL, A
RETIA
0
; Acc = 0
RETIA
1
; Acc = 1
RETIA
2
; Acc = 2
.
.
.
.
.
.
5.8
Change Register Bank
Usually keeps BS = 0. If firmware want to access register address 0x80 to 0x8F, set BS = 1. After process
register address 0x80 to 0x8F complete, clear BS = 0 to address 0x00 to 0x7F.
BSR
STATUS, BS
MOV
PORT1CON, A
BCR
STATUS, BS
5.9
Change Code Bank
Because PCL is only 11 bits wide, Program Counter can only jump in 2K boundary directly. If Program
Counter want to jump over 2K boundary, firmware should set PCHBUF to correct bank first.