// IIR_directI.c  IIR filter using Direct Form I
// assume M=N
/*1 */ #include "DSK6713_aic23.h"
/*2 */ #include "IIR_LPF1800.cof"     // LPF @ 1800 Hz coefficient file
/*3 */ Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;// sampling frequency of codec
/*4 */ short x[N+1] = {0};             // input samples 
/*5 */ short y[N+1] = {0};             // output samples 
/*6 */ int yn;
/*7 */ 
/*8 */ interrupt void c_int11()        // ISR
/*9 */ {
/*10*/   int i;
/*11*/   yn=0;
/*12*/   x[0] = input_left_sample();   // input sample
/*13*/   yn += (b[0]*x[0]>>15);        // b[0]*x[n]
/*14*/   
/*15*/   for (i = 1; i <= N; i++)
/*16*/     yn += ((b[i]*x[i]>>15) - (a[i]*y[i]>>15));
/*17*/   for (i = N; i > 0; i--)
/*18*/     {
/*19*/       x[i]=x[i-1];              // update buffers
/*20*/       y[i]=y[i-1];
/*21*/     }
/*22*/   y[1]=yn;                      // store current output as y[n-1]
/*23*/   // for next output
/*24*/   output_left_sample((short)yn);// output final result for time n
/*25*/   return;                       // return from ISR
/*26*/ }
/*27*/ 
/*28*/ void main()
/*29*/ {
/*30*/   comm_intr();                  // init DSK, codec, SP0
/*31*/   while(1);                     // infinite loop
/*32 */ }
