This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好:
我尝试在定时器0中断触发ADC采样,但是结果寄存器ADCRESULT全是0;请帮我看一下哪里错了
interrupt void ISRTimer0(void)
{
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//软件启动方式
}
ADC配置如下:
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;//开时钟
ADC_cal();
EDIS;
EALLOW;
SysCtrlRegs.HISPCP.all = 3; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)
// ADC_cal();
EDIS;
AdcRegs.ADCTRL3.all = 0x00E0;
DELAY_US(10000L);
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;//ADC工作模式 //1为级联模式
AdcRegs.ADCTRL1.bit.CONT_RUN = 0; //非连续运行(0),连续运行(1)//完成一次转换继续下一次转换//!!!!!!!!!!
AdcRegs.ADCTRL1.bit.CPS= 0;//预分频
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xf;//采样时间
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x2;//25MHz不分频
AdcRegs.ADCTRL3.bit.SMODE_SEL=0; //顺序采样
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //
AdcRegs.ADCTRL1.bit.SUSMOD = 0;
AdcRegs.ADCTRL1.bit.RESET = 1;//复位ADC
AdcRegs.ADCTRL1.bit.RESET = 0;//完成复位
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0xB; // 采样ADCA0//12-ad13
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0xA; // 采样ADCA1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x9; // 采样ADCA2//13-ad14
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // 采样ADCA3//14-ad15
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // 采样ADCA4
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // 采样ADCA5
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // 采样ADCA6
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // 采样ADCA7
PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //开启INT1.6中断
IER |= M_INT1; // 开启第一组中断
EINT;
ERTM;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; //允许SEQ1发送中断申请
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 0; //禁止SEQ2发送中断申请
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0; //每个SEQ2序列转换完成后发送一次中断申请
}
中断服务函数如下:
while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);
sampleTable[0] = (AdcRegs.ADCRESULT0) >> 4;
sampleTable[1] = (AdcRegs.ADCRESULT1) >> 4;
sampleTable[2] = (AdcRegs.ADCRESULT2) >> 4;
sampleTable[3] = (AdcRegs.ADCRESULT3) >> 4;
sampleTable[4] = (AdcRegs.ADCRESULT4) >> 4;
sampleTable[5] = (AdcRegs.ADCRESULT5) >> 4;
sampleTable[6] = (AdcRegs.ADCRESULT6) >> 4;
sampleTable[7] = (AdcRegs.ADCRESULT7) >> 4;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
for(i = 0; i < 8; i++)
{
ADCbuf[i] = (float)sampleTable[i] * 3.0 / 4095.0;
}
没有解决,我尝试使用EPWM触发ADC,然后AD结果寄存器是可变化的了,但是结果一直为0.1V左右,与我实际给的电压不符
完整的工程文件如下:
链接:pan.baidu.com/.../1ZYIOuAvqE4QElBhWEmg9tQ
提取码:k46o
文件很小的,麻烦下载一下,帮我看看哪里错了,谢谢您