Special Filter Instructions

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

4-62

Page 148
Image 148
Texas Instruments MSP50C6xx manual STR,0