/*BP45HEX.C-REAL-TIME FIR BANDPASS FILTER IN C.CALLS AICCOM */ #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,0x4892,0x67}; /*AIC config data*/ 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; unsigned int *pAddr; pAddr = (unsigned int *) 0x808064; *pAddr= 0x1018; pAddr = (unsigned int *) 0x808038; *pAddr= 0x100000; pAddr = (unsigned int *) 0x808030; *pAddr= 0x03C1; IO_INPUT = &data_in; IO_OUTPUT = &data_out; AICSET_I(); for(;;) filt((float *)H, (float *)DLY, (int *)IO_INPUT, (int *)IO_OUTPUT, N); }