//two_tones.c Generates/adds two tones using difference equations short sinegen(void); //for generating tone short output; //for output short sinegen_buffer[256]; //buffer for output data const short bufferlength = 256; //buffer size for plot with CCS short i = 0; //buffer count index short y1[3] = {0,-15137,-11585}; //y1(0),y1(-1),y1(-2) for 1.5kHz const short A1 = 12540; //A1 = 2coswT scaled by 2^14 short y2[3] = {0,-16384,0}; //y2(0),y2(-1),y2(-2) for 2kHz const short A2 = 0; //A2 = 2coswT scaled by 2^14 interrupt void c_int11() //ISR { output = sinegen(); //out from tone generation function sinegen_buffer[i] = output; //output into buffer output_sample(output); //output result i++; //increment buffer count if (i == bufferlength) i = 0; //if buffer count = size of buffer return; //return to main } short sinegen() //function to generate tone { y1[0] =((((int)y1[1]*(int)A1))>>14)-y1[2]; //y1(n)= A1*y1(n-1)-y1(n-2) y1[2] = y1[1]; //update y1(n-2) y1[1] = y1[0]; //update y1(n-1) y2[0] =((((int)y2[1]*(int)A2))>>14)-y2[2]; //y2(n)= A2*y2(n-1)-y2(n-2) y2[2] = y2[1]; //update y2(n-2) y2[1] = y2[0]; //update y2(n-1) return (y1[0] + y2[0]); //add the two tones } void main() { comm_intr(); //init DSK, codec, McBSP while(1); //infinite loop }