此程序仅做参考之用 //setup clocking mclkset ( 10.24 ); mclkmode ( MCLK_CH0, MCLK_CLOCK, 128, 0.0 ); //1KHZ //80k=10240/128 mclkmode( MCLK_CH1, MCLK_CLOCK, 70, 0.0 ); mclksequence ( MCLK_CH0, " 4000, ON" );//APU to Input mclksequence( MCLK_CH1, "1000,OFF,1024, ON" ); //VIN AWG loading mclkchannel ( MCLK_CH0, GP_MCLK_AUDIO_INPUT ); mclkchannel( MCLK_CH1, GP_MCLK_AUDIO_OUT ); double Vinp=0; int i=0; //2V Vinp=2; for (i =0;i <4000; i++ ) AUDIO_IN[i] = Vinp/2*sin(2.0*PI*i/80); //creat a sin wave and f=1k vop-p=2.2v apuawgloader ( GP_AUDIO_INPUT, "Vinp4000", APU_FV, APU_10V, APU_100MA,AUDIO_IN, 4000); namearray ( "Vinp4000", NAMEARRAY_APUAWG, GP_AUDIO_INPUT, 1 ); mclkchannel ( MCLK_CH0, "OFF" ); // Test Function: OP_SH ETS_PRGFLOW_FUNC OP_SH( int DSIndex, LPCTSTR TestLabel ) { ////////////////////////////////////// // Update test numbering information SetTestNumber( TestNmbr[DSIndex] ); SetSubTestNumber( SubTestNmbr[DSIndex] ); RESULTS_STR Result1[2]; int site; fssset( GP_VCC, FSS_FV, 0, FSS_10MA, FSS_NOCLAMP , FSS_NOCLAMP ); lwait(5000); for(int i=0;i<10;i++) { switch(i) { case 0: { apuset( GP_INP, APU_FI, -0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(2000); apumv( GP_INP, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_INP, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 1: { apuset( GP_VI4, APU_FI, -0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_VI4, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_VI4, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 2: { apuset( GP_SD, APU_FI, -0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(2000); apumv( GP_SD, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_SD, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 3: { apuset( GP_VO2, APU_FI, -0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_VO2, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_VO2, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 4: { apuset( GP_VO1, APU_FI, -0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_VO1, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_VO1, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 5: { apuset( GP_INP, APU_FI, 0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_INP, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_INP, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 6: { apuset( GP_VI4, APU_FI, 0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_VI4, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_VI4, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 7: { apuset( GP_SD, APU_FI, 0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(2000); apumv( GP_SD, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_SD, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 8: { apuset( GP_VO2, APU_FI, 0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_VO2, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_VO2, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } case 9: { apuset( GP_VO1, APU_FI, 0.1, APU_10V, APU_1MA, PIN_TO_VI ); lwait(3000); apumv( GP_VO1, 10, 10 ); groupgetresults(Result1,NUM_SITES); apuset( GP_VO1, APU_VIOFF, 0, APU_10V, APU_1MA, PIN_TO_VI ); break; } } FOR_EACH_SITE(site,NUM_SITES) { msLogResult(site, DSIndex+i, Result1[site].value); } } return( msSiteStat( MS_ALL ) ); // Return w/status } // END_ETS_PRGFLOW_FUNC // Test Function: IQ ETS_PRGFLOW_FUNC IQ( int DSIndex, LPCTSTR TestLabel ) { ////////////////////////////////////// // Update test numbering information SetTestNumber( TestNmbr[DSIndex] ); SetSubTestNumber( SubTestNmbr[DSIndex] ); RESULTS_STR Result1[2]; double Icc[NUM_SITES]; int site; //VCC=3.6V apuset( GP_SD, APU_FV, 0, APU_10V, APU_1MA, PIN_TO_VI ); lwait(5000L); fssset( GP_VCC, FSS_FV, 3.6, FSS_1MA, FSS_NOCLAMP , FSS_NOCLAMP ); //SD=0V lwait(5000L); fssset( GP_VCC, FSS_FV, 3.6, FSS_100UA, FSS_NOCLAMP , FSS_NOCLAMP ); lwait(5000L); fssmi( GP_VCC, 50, 50); groupgetresults ( Result1,NUM_SITES ); FOR_EACH_SITE(site,NUM_SITES) { Icc[site]=Result1[site].value*1e3f; msLogResult(site, DSIndex, Icc[site]); } apuset( GP_SD, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); fssset( GP_VCC, FSS_OFF, 0.0, FSS_10MA, FSS_NOCLAMP , FSS_NOCLAMP ); return( msSiteStat( MS_ALL ) ); // Return w/status } // END_ETS_PRGFLOW_FUNC // Test Function: ICC ETS_PRGFLOW_FUNC ICC( int DSIndex, LPCTSTR TestLabel ) { ////////////////////////////////////// // Update test numbering information SetTestNumber( TestNmbr[DSIndex] ); SetSubTestNumber( SubTestNmbr[DSIndex] ); RESULTS_STR Result1[2]; double Icc[NUM_SITES]; int site; cbitclose(GP_CB_K3); //VCC=3.6V fssset( GP_VCC, FSS_FV, 3.6, FSS_10MA, FSS_NOCLAMP , FSS_NOCLAMP ); //SD=0V apuset( GP_SD, APU_FV, 3.6, APU_10V, APU_10MA, PIN_TO_VI ); lwait(10000L); fssmi( GP_VCC, 50, 20); groupgetresults ( Result1,NUM_SITES ); FOR_EACH_SITE(site,NUM_SITES) { Icc[site]=Result1[site].value; msLogResult(site, DSIndex, Icc[site]); } apuset( GP_SD, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); fssset( GP_VCC, FSS_OFF, 0.0, FSS_10MA, FSS_NOCLAMP , FSS_NOCLAMP ); lwait(5000L); return( msSiteStat( MS_ALL ) ); // Return w/status } // END_ETS_PRGFLOW_FUNC // Test Function: VCOM ETS_PRGFLOW_FUNC VCOM( int DSIndex, LPCTSTR TestLabel ) { ////////////////////////////////////// // Update test numbering information SetTestNumber( TestNmbr[DSIndex] ); SetSubTestNumber( SubTestNmbr[DSIndex] ); RESULTS_STR Result1[2],Result2[2]; double VCOM[NUM_SITES]; int site; cbitclose(GP_CB_K1,GP_CB_K3); apuset( GP_AUDIO_INPUT, APU_FV, 0, APU_10V, APU_100MA, PIN_TO_VI ); lwait(2000L); //VCC=3.6V fssset( GP_VCC, FSS_FV, 3.6, FSS_1A, FSS_NOCLAMP , FSS_NOCLAMP ); //SD=0V apuset( GP_SD, APU_FV, 3.6, APU_10V, APU_10MA, PIN_TO_VI ); lwait(10000L); apuset( GP_BYPASS, APU_FI, 0, APU_10V, APU_1MA, PIN_TO_VI ); lwait(200000L); apumv( GP_BYPASS, 40, 10); groupgetresults ( Result1,NUM_SITES ); apuset( GP_BYPASS, APU_VIOFF, 0, APU_10V, APU_10MA, PIN_TO_VI ); FOR_EACH_SITE(site,NUM_SITES) { VCOM[site]=Result1[site].value; msLogResult(site, DSIndex, VCOM[site]); } apuset( GP_VO1, APU_FI, 0, APU_10V, APU_1MA, PIN_TO_VI ); apuset( GP_VO2, APU_FI, 0, APU_10V, APU_1MA, PIN_TO_VI ); lwait(50000L); apumv( GP_VO1, 10, 20); groupgetresults ( Result1,NUM_SITES ); apumv( GP_VO2, 10, 20); groupgetresults ( Result2,NUM_SITES ); apuset( GP_VO1, APU_VIOFF, 0, APU_10V, APU_10MA, PIN_TO_VI ); apuset( GP_VO2, APU_VIOFF, 0, APU_10V, APU_10MA, PIN_TO_VI ); FOR_EACH_SITE(site,NUM_SITES) { VCOM[site]=Result1[site].value; msLogResult(site, DSIndex+1, VCOM[site]); VCOM[site]=Result2[site].value; msLogResult(site, DSIndex+2, VCOM[site]); VCOM[site]=(Result1[site].value-Result2[site].value)*1e3f; msLogResult(site, DSIndex+3, VCOM[site]); } return( msSiteStat( MS_ALL ) ); // Return w/status } // END_ETS_PRGFLOW_FUNC // Test Function: GAIN ETS_PRGFLOW_FUNC GAIN( int DSIndex, LPCTSTR TestLabel ) { ////////////////////////////////////// // Update test numbering information SetTestNumber( TestNmbr[DSIndex] ); SetSubTestNumber( SubTestNmbr[DSIndex] ); // RESULTS_STR thd_t[NUM_SITES]; // int i; int state[NUM_SITES]; state[0]=0; state[1]=0; RESULTS_STR Result1[2],Result2[2],results3[2]; double Vout[NUM_SITES]; int site; //load OPEN cbitclose(GP_CB_K1,GP_CB_K2,GP_CB_K3); lwait(5000L); //VCC=3.6V apuset( GP_AUDIO_INPUT, APU_FVAWG, 0, APU_10V, APU_100MA, PIN_TO_VI ); apuawgselect ( GP_AUDIO_INPUT, "Vinp4000", 1, 4000, 0 ); mclkchannel ( MCLK_CH0,GP_MCLK_AUDIO_INPUT ); fssset( GP_AUDIO_OUT, FSS_FI, 0.0, FSS_1A, FSS_NOCLAMP, FSS_NOCLAMP ); fssadcmode( GP_AUDIO_OUT, FSS_MV, 1 ); mclkchannel ( MCLK_CH1,GP_MCLK_AUDIO_OUT ); lwait(3000l); mclkstart ( MCLK_SGL, 0 ); lwait(3000l); mclkstop (); blockread ( GP_AUDIO_OUT, 1024 ); namearray ( "AUDIO_OUT", NAMEARRAY_FSSADC, GP_AUDIO_OUT, 1 ); peak("AUDIO_OUT",500,1000,PEAK_LO); groupgetresults ( Result1,NUM_SITES ); peak("AUDIO_OUT",500,1000,PEAK_HI); groupgetresults ( Result2,NUM_SITES ); FOR_EACH_SITE(site,NUM_SITES) { Vout[site]=Result2[site].value-Result1[site].value; msLogResult(site, DSIndex, Vout[site]); } ////////////////////thd/////////////////////////////////////////////////// psd( "AUDIO_OUT", "GP_PSD", 1, 1024 ); thd( "GP_PSD", 8, 15, 20, 0 ); groupgetresults(results3,NUM_SITES ); FOR_EACH_SITE( site, NUM_SITES) { Vout[site]= results3[site].value; msLogResult( site, DSIndex+1, Vout[site]); } mclkchannel ( MCLK_CH0, "OFF" ); mclkchannel ( MCLK_CH1, "OFF" ); fssset( GP_VCC, FSS_OFF, 0.0, FSS_10MA, FSS_NOCLAMP , FSS_NOCLAMP ); fssset( GP_AUDIO_OUT, FSS_OFF, 0.0, FSS_10MA, FSS_NOCLAMP , FSS_NOCLAMP ); apuset( GP_AUDIO_INPUT, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); apuset( GP_BYPASS, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); apuset( GP_INP, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); apuset( GP_SD, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); apuset( GP_VI4, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); apuset( GP_VO2, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); apuset( GP_VO1, APU_VIOFF, 0, APU_30V, APU_100MA, PIN_TO_VI ); return( msSiteStat( MS_ALL ) ); // Return w/status } // END_ETS_PRGFLOW_FUNC 功率测试未列出,请读者参考上一项进行编写