<< Chapter < Page | Chapter >> Page > |
Assemble your code, set
PMST
to
0xFFE0
, reset the DSP, and run. Ensure that it
is has the correct frequency response. After you have verifiedthat this code works properly, proceed to the next step.
First, make a copy of your modified
filter.asm
file from
Part 1 . Work from this
copy; do not modify your working filter from the previouspart. You will use that code again later.
Next, modify your code so that in addition to sending the
output of your first filter (with a 4 kHz to 8 kHz passband)to output channel 1 and the unfiltered input to output channel
2, it sends the output of your second filter (with a 8 kHz to12 kHz passband) to output channel 3. To do this, you will
need to use the
.align
and
.copy
directives to load the second set of coefficients into data
memory. You will also need to add instructions to initializea pointer to the second set of coefficients and to perform the
calculations for the second filter.
Can you implement the dual-channel system without usingthe auxiliary registers
AR4
and
AR5
? Why is this more difficult? Renaming
AR4
and
AR5
using the
.asg
directive does not count!
Using the techniques introduced in DSP Development Environment: Introductory Exercise for TITMS320C54x , generate an appropriate test vector and expected outputs in MATLAB. Then, using the test-vector corefile also introduced in DSP Development Environment: Introductory Exercise for TITMS320C54x , find the system's output given this test vector. In MATLAB, plot the expected and actual outputs ofthe both filters and the difference between the expected and actual outputs. Why is the output from the DSP system notexactly the same as the output from MATLAB?
An alternative method of implementing symmetric FIR filters
uses the
firs
instruction. Modify
your code from
Part 1 to implement
the filter with a 4 kHz to 8 kHz passband using the
firs
.
Two differences in implementation between your code from
Part 1 and the code you will write for
this part are that (1) the
firs
instruction
expects coefficients to be located in program memory insteadof data memory, and (2)
firs
requires the states
to be broken up into two separate circular buffers. Refer tothe
firs
instruction on
page 4-59 in
the
Mnemonic
Instruction Set manual, as well as a description and
example of its use on
pages 4-5 through 4-8 of
the
Applications
Guide for more information (
Volumes 2 and
4 respectively of the
TMS320C54x DSP Reference
Set ).
AR0
needs to be set to -1 for this code to work properly. Why?
COEFF
is a label to the
coefficients now expected to be in program memory. Refer to the
firs
description for more
information).1 mvdd *AR2,*AR3+0% ; write x(-N/2) over x(-N)
2 sth A,*AR2 ; write x(0) over x(-N/2)
3 add *AR2+0%,*AR3+0%,A ; add x(0) and x(-(N-1))
4 ; (prepare for first multiply)
5
6 rptz B,#(FIR_len/2-1)
7 firs *AR2+0%,*AR3+0%,COEFF
8 mar ??????? ; Fill in these two instructions
9 mar ??????? ; They modify AR2 and AR3.
10
11 ; note that the result is now in the
12 ; B accumulator
Because states and coefficients are now treated differently than in your previous FIR implementation, you will need tomodify the pointer initializations to
1 stm #(FIR_len/2),BK ; initialize circular buffer length
2 stm #firstate_,AR2 ; initialize location containing first
3 ; half of states
4
5 stm #-1,AR0 ; Initialize AR0 to -1
6
7 stm #firstate2_,AR3 ; initialize location containing last half
Use the test-vector core file to find the output of this
system given the same test vector you used to test thetwo-filter system. Compare the output of this code against the
output of the same filter implemented using the
mac
instruction. Are the results the same? Why or
why not? Ensure that the filtered output is sent to outputchannel 1, and that the unmodified output is still sent to
output channel 2.
Notification Switch
Would you like to follow the 'Dsp laboratory with ti tms320c54x' conversation and receive update notifications?