/*FIRC.C - REAL-TIME FIR FILTER. CALLS AICCOMC.C */ #include "aiccomc.c" /*include AIC com routines */ #include "bp45coef.h" /*include coefficients file*/ float DLY[N]; /*delay samples */ int data_in, data_out; int AICSEC[4] = {0x162c,0x1,0x3872,0x67}; /*AIC data Fs =8 kHz*/ void filt(float *h,float *dly,int *IO_input,int *IO_output,int n) { int i, j, m, N1, N1_m, n_m, index = 0; float acc = 0; N1 = n-1; dly[0] = *IO_input; for (m = 0; m < n; m++) { asm(" idle"); /*wait for interrupt */ N1_m = N1-m; n_m = n-m; for (i = 0; i < n_m; i++) /*addr below new sample to 0*/ acc += h[i] * dly[N1_m-i]; for (j = m; j > 0; j--) /*from n to latest sample */ acc += h[n-j] * dly[N1_m+j]; /*latest sample last */ *IO_output = acc; /*output result */ acc = 0.0; /*clear accumulator */ dly[N1_m] = *IO_input; /*get new sample */ } } void c_int05() { data_in = UPDATE_SAMPLE(data_out); } main () { int *IO_INPUT, *IO_OUTPUT; IO_INPUT = &data_in; IO_OUTPUT = &data_out; AICSET_I(); for(;;) filt((float *)H,(float *)DLY,(int *)IO_INPUT,(int *)IO_OUTPUT,N); }