int main(void)
{
	int nsamp, i;
 	float *input, *output1, *output2;
 	initialize(FS_48K, MONO_IN, STEREO_OUT); 	// Set up the DAC/ADC interface
 	
 	// Allocate Required Memory
 	nsamp = getblocksize();
	
 	input = (float *)malloc(sizeof(float)*nsamp);
 	output1 = (float *)malloc(sizeof(float)*nsamp);
 	output2 = (float *)malloc(sizeof(float)*nsamp);
  
 	if (input==NULL || output1==NULL || output2==NULL) {
 		flagerror(MEMORY_ALLOCATION_ERROR);
 		while(1);
 	}

 	// Filter coefficients
	// float b[5][3] = {{1, 2, 1},{1, -2, 1},{1, 0.851559, 1},{1, -1.90211, 1},{1, 1.17557, 1}};
	// float a[5][3] = {{1, 2, 1},{1, -2, 1},{1, 0.851559, 1},{1, -1.90211, 1},{1, 1.17557, 1}};
	// float g = 0.0264722;

    // Biquad structure initialization
	BIQUAD_T *f1;
	f1 = init_biquad(num_stages, g, a_coef, b_coef, nsamp);

	// Infinite Loop to process the data stream, "nsamp" samples at a time	
	while(1){
    	/*
    	 * Ask for a block of ADC samples to be put into the working buffer
    	 *   getblock() will wait until the input buffer is filled...  On return
    	 *   we work on 	the new data buffer.
    	 */
    	getblock(input);	// Wait here until the input buffer is filled... Then process	
    	
    	// signal processing code to calculate the required output buffers
    	// copy input to output2 for reference
    	for(i=0;i<nsamp;i++) {
    		output2[i] = input[i];
    	}
    	DIGITAL_IO_SET(); 	// Use a scope on PC4 to measure execution time
    	// Call the biquad filter routine
    	calc_biquad(f1,input,output1);
    	
    	DIGITAL_IO_RESET();	// (falling edge....  done processing data )
    	
    	// pass the processed working buffer back for DAC output
    	putblockstereo(output1, output2);
	}
}
void config_biquad_filter( // Configure BiQuad filter 
	BIQUAD_PARAM_S * cur_param_ps // Pointer to structure containing current biquad filter parameters
)
{
	// Check if BiQuad filter initialised
	if (0 == biquad_gs.init_done)
	{ // Initialse BiQuad filter
  	init_biquad( &biquad_gs );	// Initialise biquad data structure

		biquad_gs.init_done = 1; // Signal Bi-Quad filter initialised
	} // if (0 == biquad_gs->init_done)

// printstr("FM= "); printintln( (int)cur_param_ps->filt_mode ); // MB~

	/* When coefficients are re-calculated mid-stream timing may be broken, but works so far!
   * Audio clicks can be heard, but I assume normally this would only occur at a program change,
	 * so this would mask the click.
	 */

	// recalculate filter coefficiants based on new sample frequency
  init_common_coefs( &(biquad_gs.common_coefs_s) ,cur_param_ps );

	biquad_gs.params_set = 1; // Signal BiQuad filter parameters configured
} // config_biquad_filter