77 lines
2.6 KiB
NASM
77 lines
2.6 KiB
NASM
/************************************************************************
|
|
File Name: Fir_test.asm
|
|
|
|
Date Modified: 6/22/01 BM
|
|
|
|
|
|
Purpose: Demonstrate initialization and operation of
|
|
FIR.asm on the ADSP-2192. FIR.asm is a
|
|
single precision direct form FIR filter. All
|
|
coefficients and data values are assumed to
|
|
be in 1.15 format.
|
|
|
|
************************************************************************/
|
|
|
|
#define Num_Samp 512 /* NUmber of Input samples */
|
|
#define Taps 31 /* Number of filter taps */
|
|
#define Shift 2 /* Number of shifts */
|
|
#define Samps_per_Bin 40 /* Number of Input samples in each bin */
|
|
#define Num_Bins (Num_Samp/Samps_per_Bin) /* Number of bins */
|
|
|
|
.EXTERN fir;
|
|
|
|
/* DM data */
|
|
.section/data data1;
|
|
.VAR IN[Num_Samp] = "input_dec.dat"; /* Input buffer */
|
|
.VAR OUT[Num_Samp]; /* Output buffer */
|
|
.VAR Delay_Line[Taps]; /* Delay line */
|
|
|
|
|
|
/* PM data */
|
|
.section/pm data2;
|
|
.VAR COEFF[Taps] = "coeff_l.dat";
|
|
|
|
/* PM interrupt vector code */
|
|
.section/pm IVreset;
|
|
JUMP start; NOP; NOP; NOP;
|
|
|
|
/* Program memory code */
|
|
.section/pm program;
|
|
start:
|
|
I0=Delay_Line; /* Initialize delay line pointer */
|
|
M1 = 1;
|
|
I1 = IN; /* Initialize Input pointer */
|
|
I2 = OUT; /* Initialize Output pointer */
|
|
L1=0; /* Initialize for modulo addressing */
|
|
L2=0; /* Initialize for modulo addressing */
|
|
M3=-1;
|
|
M4=1;
|
|
SE = Shift;
|
|
DMPG2=page(COEFF);
|
|
|
|
L0=LENGTH (Delay_Line); /* Initialize delay line circular buffer */
|
|
ax0 = Delay_Line;
|
|
REG(b0) = ax0; /* Initialize pointer to delay line */
|
|
|
|
L4=length(COEFF); /* Initialize coeficient circular buffer */
|
|
ax0 = COEFF;
|
|
reg(b4) = ax0; /* Initialize pointer to coeficient */
|
|
|
|
CNTR=Taps; /* 'Taps' location delay line */
|
|
DO zero UNTIL CE;
|
|
zero: dm(I0,M1)=L0; /* Delay_line = 0 */
|
|
|
|
|
|
CNTR = Num_Bins; /* Num_Bins to process Num_Samp */
|
|
do per_bin until CE;
|
|
call fir (db);
|
|
I4=COEFF; /* Load Coeff buffer pointer */
|
|
nop;
|
|
per_bin:
|
|
nop;
|
|
|
|
looping: JUMP looping; /* Loop upon itself */
|
|
|
|
/************************************************************************/
|
|
|