# Include "MyApp. H"
# Include "ICETEK-VC5509-EDU.h"
# Include "scancode. H"
# Include <math. h>
# Define PI 3.1415926
# Define sample number 128
Void initforfft ();
Void makewave ();
Int input [samplenumber], data [samplenumber];
Float fwaver [samplenumber], fwavei [samplenumber], W [samplenumber];
Float sin_tab [samplenumber], cos_tab [samplenumber];
Main ()
{
Int I;
Initforfft ();
Makewave ();
For (I = 0; I <samplenumber; I ++)
{
Fwaver [I] = input [I];
Fwavei [I] = 0.0f;
W [I] = 0.0f;
}
FFT (fwaver, fwavei );
For (I = 0; I <samplenumber; I ++)
{
Data [I] = W [I];
}
While (1); // break point
}
Void FFT (float DATAR [samplenumber], float datai [samplenumber])
{
Int x0, x1, x2, X3, X4, X5, X6, xx;
Int I, J, K, B, P, L;
Float TR, Ti, temp;
/********* Following code invert sequence ************/
For (I = 0; I <samplenumber; I ++)
{
X0 = x1 = x2 = X3 = X4 = X5 = X6 = 0;
X0 = I & 0x01; X1 = (I/2) & 0x01; x2 = (I/4) & 0x01; X3 = (I/8) & 0x01; X4 = (I/16) & 0x01; X5 = (I/32) & 0x01; X6 = (I/64) & 0x01;
Xx = x0 * 64 + X1 * 32 + x2 * 16 + X3 * 8 + X4 * 4 + X5 * 2 + X6;
Datai [XX] = DATAR [I];
}
For (I = 0; I <samplenumber; I ++)
{
DATAR [I] = datai [I]; datai [I] = 0;
}
/************* Following code FFT *******************/
For (L = 1; L <= 7; l ++)
{/* For (1 )*/
B = 1; I = L-1;
While (I> 0)
{
B = B * 2; I --;
}/* B = 2 ^ (L-1 )*/
For (j = 0; j <= B-1; j ++)/* For (2 )*/
{
P = 1; I = 7-l;
While (I> 0)/* P = POW (2,7-l) * j ;*/
{
P = p * 2; I --;
}
P = p * J;
For (k = J; k <128; k = K + 2 * B)/* For (3 )*/
{
Tr = DATAR [k]; Ti = datai [k]; temp = DATAR [K + B];
DATAR [k] = DATAR [k] + DATAR [K + B] * cos_tab [p] + datai [K + B] * sin_tab [p];
Datai [k] = datai [k]-DATAR [K + B] * sin_tab [p] + datai [K + B] * cos_tab [p];
DATAR [K + B] = tr-DATAR [K + B] * cos_tab [p]-datai [K + B] * sin_tab [p];
Datai [K + B] = Ti + temp * sin_tab [p]-datai [K + B] * cos_tab [p];
}/* End for (3 )*/
}/* End for (2 )*/
}/* End for (1 )*/
For (I = 0; I <samplenumber/2; I ++)
{
W [I] = SQRT (DATAR [I] * DATAR [I] + datai [I] * datai [I]);
}
}/* End FFT */
Void initforfft ()
{
Int I;
For (I = 0; I <samplenumber; I ++)
{
Sin_tab [I] = sin (pI * 2 * I/samplenumber );
Cos_tab [I] = cos (pI * 2 * I/samplenumber );
}
}
Void makewave ()
{
Int I;
For (I = 0; I <samplenumber; I ++)
{
Input [I] = sin (pI * 2 * I/samplenumber * 3) * 1024;
}
}
Some header files may not be found. This is a reference program provided by our teacher. Here is just a reference. I will comment it out next time.
# Include "MyApp. H"
Void clk_init ()
{
Ioport unsigned int * clkmd;
Clkmd = (unsigned int *) 0x1c00;
* Clkmd = 0x2033; // 0x2033; // 0x2413; // 200 MHz = 0x2513
}
Void setdsppll (unsigned int upll)
{
Ioport unsigned int * clkmd;
Clkmd = (unsigned int *) 0x1c00;
* Clkmd = upll;
}
Void tmcr_reset (void)
{
Ioport unsigned int * tmcr_mgs3 = (unsigned int *) 0x07fe;
Ioport unsigned int * tmcr_mm = (unsigned int *) 0x07ff;
* Tmcr_mgs3 = 0x510;
* Tmcr_mm = 0x000;
}