Texas Instruments TMS320C67X/C67X+ DSP Car Speaker User Manual

Programming Considerations
Interrupts5-26 SPRU733
5.6.4 Traps
A trap behaves like an interrupt, but is created and controlled with software.
The trap condition can be stored in any one of the conditional registers: A1,
A2, B0, B1, or B2. If the trap condition is valid, a branch to the trap handler
routine processes the trap and the return.
Example 515 and Example 516 show a trap call and the return code
sequence, respectively. In the first code sequence, the address of the trap
handler code is loaded into register B0 and the branch is called. In the delay
slots of the branch, the context is saved in the B0 register, the GIE bit is cleared
to disable maskable interrupts, and the return pointer is stored in the B1
register. If the trap handler were within the 21-bit offset for a branch using a
displacement, the MVKH instructions could be eliminated, thus shortening the
code sequence.
The trap is processed with the code located at the address pointed to by the
label TRAP_HANDLER. If the B0 or B1 registers are needed in the trap
handler, their contents must be stored to memory and restored before return-
ing. The code shown in Example 516 should be included at the end of the trap
handler code to restore the context prior to the trap and return to the
TRAP_RETURN address.
Example 515. Code Sequence to Invoke a Trap
[A1] MVK TRAP_HANDLER,B0 ; load 32-bit trap address
[A1] B B0 ; branch to trap handler
[A1] MVC CSR,B0 ; read CSR
[A1] AND -2,B0,B1 ; disable interrupts: GIE= 0
[A1] MVC B1,CSR ; write to CSR
[A1] MVK TRAP_RETURN,B1 ; load 32-bit return address
TRAP_RETURN: (post-trap code)
Note: A1 contains the trap condition.
Example 516. Code Sequence for Trap Return
B B1 ; return
MVC B0,CSR ; restore CSR
NOP 4 ; delay slots