<< Chapter < Page | Chapter >> Page > |
As the list of operations indicates, bit-reversal and FFT
computation are to be done in both C and assembly. For theassembly version, make sure that the line defining
C_FFT
is commented out in
lab4.c
.
We are providing you with a shell assembly file, available at
v:\ece420\55x\lab4\c_fft_given.asm
and shown
in
Appendix B , containing many
useful declarations and some code. The code for performingbit-reversal and other declarations needed for the FFT
routine are also provided in this section.
However, we would like you to enter this code
manually, as you will be expected to understand itsoperation.
The assembly file
c_fft_given.asm
contains two main parts, the data section
starting with
.sect ".data"
and the
program section starting with
.sect ".text"
. Every function and
variable accessed in C must be preceded by a single underscore
_
in assembly and a
.global _name
must be placed in the
assembly file for linking. In this example,
bit_rev_fft
is an assembly function called from
the C program with a label
_bit_rev_fft
in the
text portion of the assembly file and a
.global _bit_rev_fft
declaration. In each
assembly function, the macro
ENTER_ASM
is
called upon entering and
LEAVE_ASM
is
called upon exiting. These macros are defined in
v:\ece420\55x\macro.asm
. The
ENTER_ASM
macro saves the status registers
and
AR1
,
AR6
, and
AR7
when entering a function as required
by the register use conventions. The
ENTER_ASM
macro also sets the status registers to the assembly conventions we
have been using (i.e,
FRCT
=1 for fractional
arithmetic and
CPL
=0 for
DP
referenced addressing). The
LEAVE_ASM
macro just restores the saved
registers.
The parameter passing convention between assembly and C places the parameters into registers depending on the size of the parameters. Data pointers (16 or 23 bit) will be placed in (X)AR0 through (X)AR4 in that order. 16-bit data will be placed in T0, T1, and AR0 through AR4 in that order. 32-bit data will be placed in accumulators AC0 through AC2. If there are no available registers of the correct type, the parameters will be passed onto the stack. For more details, see page 6-16 of the Optimizing C/C++ Compiler User's Guide ( spru281e ).
When entering and leaving an assembly function, the
ENTER_ASM
and
LEAVE_ASM
macros ensure that certain registers are saved and restored.
Since the C program may use any and all registers, the state ofa register cannot be expected to remain the same between calls to
assembly function(s).
Therefore, any information that
needs to be preserved across calls to an assembly function must besaved to memory!
Now, we explain how to use the FFT routine provided by TI
for the C55x. TI provides a library of commonly used functions. These functions include FFT, FIR, IIR, and some math operations. More information can be found in the
DSP Library Programmer's Reference . The
CFFT
function will be used for the DSPLIB implementation. Refer to the reference guide to figure out the correct syntax in calling the function.
Notification Switch
Would you like to follow the 'Digital signal processing laboratory (ece 420 55x)' conversation and receive update notifications?