我声明了AD初始化的程序。在中断中实现AD采样。我设定的是级联模式,AINA0采集一路,AINA1采集另一路,但是两路采集都会对另一路产生影响。该怎么办。
下面是我AD初始化的程序,还有中断服务函数程序。
void AD_Init(void)
{
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;
InitAdc(); // For this example, initializes the ADC
// Specific ADC setup for this example:
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Sequential mode: Sample rate = 1/[(2+ACQ_PS)*ADC clock in ns]
// = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT) //ADC_SHCLK为1
// = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
// If Simultaneous mode(同时处理模式) enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // 预分频用 //ADC_CKPS为0,表示不分频 //P144
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode //// 1 级联模式 ,SEQ为16通道 //// 0双排序模式SEQ1和SEQ2各为8通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //选择通道ADCINA0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //选择通道ADCINA1
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run 连续模式
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1; // Enable Sequencer override feature
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x01; // convert and store in 8 results registers 因为只有A0转换//转换次数为1+1=2次
//一个序列内所完成的转换次数为MAX_CONVn+1
}
interrupt void ISRTimer0(void)//中断服务程序(Interrupt Service Routine) //中断服务程序,清零标志位,重新计时,//采样
{
CpuTimer0.InterruptCount++;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;/////打开AD采样//////不加的话,就不行,while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);看不到执行//////
while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);//为0表示没有INT_SEQ1,为1表示有INT_SEQ1,才能执行后面的程序
// AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//置位表示清除INT_SEQ1。
a= ((AdcRegs.ADCRESULT0)>>4);//AdcRegs.ADCRESULT0右移4位
b= ((AdcRegs.ADCRESULT1)>>4);
j++;
sum1=sum1+a;
sum2=sum2+b;
if(j>=512) //采样20次
{
dianya1=(sum1/512/4096)*2.94985;//i
dianya2=(sum2/512/4096)*2.94985;//u
sum1=sum1/512;//i
sum2=sum2/512;//u
sum_pwm_caiyang_i=sum1;//i ////////////AD0寄存器中的值,即采样值(0-4095)///////////
sum_pwm_caiyang_u=sum2;//u ////////////AD1寄存器中的值,即采样值(0-4095)///////////
sum_lcd1=sum1/2100/2;//实际的电流值
sum_lcd2=dianya2;//实际的电压值
AD0=sum1;//i ////////////AD0寄存器中的值,即采样值(0-4095)///////////
AD1=sum2;//i ////////////AD1寄存器中的值,即采样值(0-4095)///////////
j=0;
sum1=0;
sum2=0;
}
}
谢谢了,在线等。 |