Texas Instruments MSP50C614 User Manual
Page 154
Special Filter Instructions
4-62
After the FIR or COR instruction executes, the new
startOfBuff
will be the
last location in the circular buffer. After another FIR/COR instruction, the new
startOfBuff
will be the second to last location in the circular buffer, and so
on.
The second detail is the STAT register. The STAT register must be saved im-
mediately after every FIR or COR instruction. Consequently, this saved value
must be loaded before every FIR or COR instruction. If the tag bit in the STAT
register is set before an FIR or COR instruction, this tells the processor two
things. First, it knows that it must
wrap around to the first RAM location of the
circular buffer. Second, it knows that the
startOfBuff
(and R0) currently
points to the last location in the circular buffer. Thus, R0 will increment by R5
after the first multiply. This will become more clear after examining the next ex-
ample code.
The third detail is that the filter coefficients take up only N RAM locations, but
the circular buffer takes up N+1 RAM locations.
Below is an example of the FIR or COR execution inside a DAC interrupt ser-
vice routine.
; FIR Filtering routine (N = 3)
––––––––––––––––––––––––––––––––––––––––––
rovm
;reset overflow mode
mov
R5, –2 * N
;circular buffer length (3 words)
mov
R1,coeffs
;R1 points to first of N filter
coefficients
mov
MR,*R1++
;must increment R1
mov
R0,*startOfBuff
;R0 points to start of circular
buffer
mov
AP0,0
;set up room for the
mov
STR,0
; 32 bit output sample (AC0
and AC1)
zacs
A0
; STR should be 1 for COR/CORK
instructions
mov
STAT,*filterSTAT_tag
;load STAT with last filter
tag status
rpt
N–2
fir
A0,*R0++
;Do one sample ––> 32 bit result
mov
*filterSTAT_tag,STAT
;save STAT with last filter
tag status
;R0 now points to the last/oldest
sample
movs
*ySampleOut,A0
;FIR outputs bits 0–15 in AC0,
16–32 in AC1