// IIR_sos.c  IIR filter using cascaded second-order sections (biquads)
// Each biquad is coded as a Direct Form II transpose realization
/*1 */ #include "DSK6713_aic23.h"
/*2 */ #include "LPF1800.cof"     // LPF @ 1800 Hz coefficient file
/*3 */ Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;  // sampling frequency of codec
/*4 */ short state[Ns][2] = {0};    // filter states in each biquad
/*5 */ 
/*6 */ interrupt void c_int11()	 // ISR
/*7 */ {
/*8 */  short i, inpt, gs;
/*9 */  int un, yn;
/*10*/ 
/*11*/  inpt = input_left_sample();// input from codec
		gs=(short)G;
		un=inpt*gs;
/*12*/  un = un>>15;    // scale input
/*13*/  
/*14*/  for (i = 0; i < Ns; i++)    // repeat for each biquad
/*15*/   {
/*16*/    yn = un + state[i][0];    // output at current biquad
/*17*/                              // update states in current biquad
/*18*/    state[i][0] = ((b[i][0]*un)>>15) - ((a[i][0]*yn)>>15) + state[i][1];
/*19*/    state[i][1] = ((b[i][1]*un)>>15) - ((a[i][1]*yn)>>15);
/*20*/    un=yn;
/*21*/   }
/*22*/    output_left_sample((short)yn);// output final result for time n
/*23*/    return;		    // return from ISR
/*24*/ }
/*25*/ 
/*26*/ void main()
/*27*/ {
/*28*/   comm_intr();               // init DSK, on-board codec, SP0
/*29*/   while(1);		    // infinite loop
/*30*/ }

