Listing 2. Code Snippet at the Heart of the Control Module while (1) { // Read in new coefficients on control FIFO rtf_get(CONTROL_FIFO_ID,&coeffs,sizeof(coeffs)); rtf_flush(CONTROL_FIFO_ID); // This code places coeffs[] in A, B, C, D, E ... pd_ain_get_samples(AI_board_handle,NO_CHANNELS, adc_data, &samples); for (i = 0;i < (NO_CHANNELS);i++) volts[i+1]= ((float)(adc_data[i]^0x8000)*.00030518)-10.000; // Difference equation x0[0]=volts[1]; x1[0]=volts[2]; x2[0]=volts[3]; x3[0]=volts[4]; y0[0] =d1*x0[0]+stuff0; y1[0] =d2*x1[0]+stuff1; y2[0] =d1*x2[0]+stuff2; y3[0] =d2*x3[0]+stuff3; y4[0] = -y0[0]; y5[0] = -y1[0]; y6[0] = -y2[0]; y7[0] = -y3[0]; // output to AO board dac_data[0] = (y0[0]+10.0)*3276.6; dac_data[1] = (y1[0]+10.0)*3276.6; dac_data[2] = (y2[0]+10.0)*3276.6; dac_data[3] = (y3[0]+10.0)*3276.6; dac_data[4] = (y4[0]+10.0)*3276.6; dac_data[5] = (y5[0]+10.0)*3276.6; dac_data[6] = (y6[0]+10.0)*3276.6; dac_data[7] = (y7[0]+10.0)*3276.6; for (j = 0;j < 8 ;j++) pd_ao32_write(AO_board_handle,j,dac_data[j]); // Perform shift operations for (i = 3; i > 0; i--) { x0[i]=x0[i-1]; x1[i]=x1[i-1]; x2[i]=x2[i-1]; x3[i]=x3[i-1]; y0[i]=y0[i-1]; y1[i]=y1[i-1]; y2[i]=y2[i-1]; y3[i]=y3[i-1]; } // Setup difference equations stuff0 = A*y0[1]+B*y0[2]+C*y0[3] +E*x0[1]+F*x0[2]+G*x0[3]; stuff1 = A*y1[1]+B*y1[2]+C*y0[3] +E*x1[1]+F*x1[2]+G*x1[3]; stuff2 = A*y2[1]+B*y2[2]+C*y0[3] +E*x2[1]+F*x2[2]+G*x2[3]; stuff3 = A*y3[1]+B*y3[2]+C*y0[3] +E*x3[1]+F*x3[2]+G*x3[3]; // end this thread until next periodic call pthread_wait_np(); pd_ain_sw_cl_start(AI_board_handle); // multiplies for time test for (i = 0; i < 5000; i++) qq=a*b; }