beautypg.com

Texas Instruments MSP50C614 User Manual

Page 157

background image

Special Filter Instructions

4-65

Assembly Language Instructions

Important note about setting the STAT register

It is very important to consider the initial value of the filterSTAT_tag variable.
Failure to set up the filterSTAT_tag variable can cause incorrect results in FIR/
COR operations. Overflow mode must always be reset. The overflow bit of the
STAT register may not be set.

For samples or filter coefficients that are signed, the sign extension mode bit
must also be set. Use the following set up for the filterSTAT_tag variable,

rovm

; Mandatory

; –– Any addition modes can be set hereafter ––

sxm

; For signed samples, coefficients, filter output

mov

*filterSTAT_tag,STAT

The FIRK/CORK instructions are almost identical to the FIR/COR instructions.
The main difference is that the filter coefficients are placed in ROM instead of
RAM. In other words, the filter coefficients are in a look-up table. As a result,
the R1 register is not used. Before a FIRK/CORK instruction executes, the
data pointer register, DP, must be set by the following code,

rovm

;reset overflow mode

mov

R5, –2 * N

;circular buffer length (3 words)

mov

A0,FIRK_COEFFS

; Loads address of lookup table

mov

A0,*A0

; Loads first coefficient to A0 and
sets DP

mov

MR,A0

; Load first coefficient in to MR
register

In the sequence of code above, the DP register points to the first filter coeffi-
cient (in program memory located at FIRK_COEFFS). This happens during
the mov A0,*A0 instruction. In addition, the DP register automatically incre-
ments to the next address. It should be pointing to the second filter coefficient
in program memory. If the contents of the DP register are used somewhere
else in the program, a context save and restore must be performed on the DP
register for each FIRK/CORK instruction. See the chapter 4 section called,
Lookup Instructions. During FIRK/CORK execution, the MR register is loaded
with the contents of the DP register, the DP register increments, pointing to the
next filter coefficient, and the multiply-accumulate is performed.

The remaining FIRK/CORK code is almost the same as the FIR/COR code.

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