Texas Instruments MSP50C6xx User Manual

Page 148

Advertising
background image

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

Advertising