28335 AD采集的代码为:
void Ad_init(void)
{
InitAdc();
AdcRegs.ADCTRL1.bit.ACQ_PS =1;
AdcRegs.ADCTRL1.bit.CPS = 0;
AdcRegs.ADCTRL3.bit.ADCCLKPS =0; //25Mhz
AdcRegs.ADCTRL1.bit.SUSMOD=3; //3:仿真器停立即停
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 级联
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //不(覆盖由MAX_CONV1设置的最大通道数,在整个模块通道内循环转换 )
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
AdcRegs.ADCCHSELSEQ1.all = 0x0; //初始化所有的ADC同通道到A0
AdcRegs.ADCTRL3.bit.SMODE_SEL=1; //同步采样
AdcRegs.ADCMAXCONV.bit.MAX_CONV1=1;
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//采样 ADCINA0
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
}
void InitAdc(void)
{
extern void DSP28x_usDelay(Uint32 Count);
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
ADC_cal();
EDIS;
AdcRegs.ADCTRL3.all = 0x00E0; // Power up bandgap/reference/ADC circuits
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
}
void main(void)
{
InitSysCtrl();
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3;
EDIS;
Ad_init();
while(1)
{
ADResult0 = (AdcRegs.ADCRESULT0 >>4);
ADResult1 = (( ADResult0 * 3) / 4096);
DELAY_US(5000L);
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
}
}
我把第一通道接了GND。调试时,在主程序的while中的 AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;加了断点,发现前两次采集到的ADResult为0,后面再采集时,值逐渐增到,直到为2.99999V。
请问大师们,我是哪里错了? |