/*FIRDMOVE.C - FIR FILTER MOVING THE DATA AND NOT POINTERS*/ #include "aiccomc.c" /*include AIC com routines */ #include "bp45coef.h" /*include coefficient file */ float DLY[N]; /*delay samples */ int data_in, data_out; int AICSEC[4]={0x162c,0x1,0x3872,0x67}; /*AIC config data*/ void filt(float *h,float *dly,int *IO_input,int *IO_output,int n) { int i, t; float acc; for (t = 0; t < n; t++) { asm(" idle"); /*wait for interrupt */ acc = 0.0; dly[0] = *IO_input; /*newest input sample*/ for (i = 0; i < n; i++) acc += h[i] * dly[i]; for (i = n-1; i > 0; i--) dly[i] = dly[i-1]; /*update samples */ *IO_output = acc; } } 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); }