Texas Instruments TMS320C2XX Calculator User Manual


 
Task-Specific Program Code
C-11
Program Examples
Example C–7. Implementing a HOLD Operation (hold.asm)
* File: hold.asm *
* Function: HOLD test code *
* Check for HOLDA toggle for HOLD requests in MODE 0 *
* Check for XF toggle on HOLD/INT1 requests in MODE 1 *
.title ” HOLD Test ” ; Title
.mmregs
icr .set 0FFECh ; Interrupt control register in I/O space
icrshdw .set 060h ; scratch pad location
* Interrupt vectors
.text
reset B main ; 0–reset , Branch to main program on reset
int1h B int1_hold ; 1–external interrupt 1 or HOLD
.space 40*16
*********Interrupt service routine ISR for HOLD logic*************************
main: splk #0001h,imr
clrc intm
wait: b wait
int1_hold:
; Perform any desired context save
ldp #0
in icrshdw, icr ; save the contents of ICR register
lacl #010h ; load ACC with mask for MODE bit
and icrshdw ; Filter out all bits except MODE bit
bcnd int1,neq ; Branch if MODE bit is 1, else in HOLD mode
lacc imr, 0 ; load ACC with interrupt mask register
splk #1, imr ; mask all interrupts except interrupt1/HOLD
idle ; enter HOLD mode, issues HOLDA
; and the busses will be in tristate
splk #1, ifr ; Clear HOLD/INT1 flag to prevent
; re–entering HOLD mode
sacl imr ; restore interrupt mask register
; Perform necessary context restore
clrc intm ; enable all interrupts
ret ; return from HOLD interrupt
int1: nop ; Replace this with desired INT1 interrupt
nop ; service routine
setc xf ; Dummy toggle to check the loop entry
clrc xf ; in MODE 1
splk #0001,ifr
clrc intm ; enable all interrupts
ret ; return from interrupts