//Firbuf.c FIR filter with output in buffer plotted with CCS

#include "bp41.cof"		     //BP @ 1 kHz coefficient file

int yn = 0;				     //initialize filter's output
short dly[N];                      //delay samples
short buffercount = 0; 			     //init buffer count
const short bufferlength = 1024;   //buffer size
short yn_buffer[1024];             //output buffer

interrupt void c_int11()	     //ISR
{
	short i;
 
   	dly[0] = input_sample();     //newest input @ top of buffer
	yn = 0;                      //initialize filter's output
	for (i = 0; i< N; i++)        
	   yn +=(h[i]*dly[i]) >> 15; //y(n)+=h(i)*x(n-i)
      for (i = N-1; i > 0; i--)    //start @ bottom of buffer
   	   dly[i] = dly[i-1];        //data move to update delays 

      output_sample(yn);	     //output filter

	yn_buffer[buffercount] = yn;    	     //filter's output into buffer
	buffercount++;                  	     //increment buffer count
	if(buffercount==bufferlength)   	     //if buffer count = size
	   buffercount = 0;          	     //reinitialize buffer count
      return;			     //return from interrupt
}

void main()
{
    comm_intr();                   //init DSK, codec, McBSP
    while(1);                      //infinite loop
}