维尼写诗 发表于 2013-8-4 11:32:52

DSP2812 AD转换的问题,欢迎指教

我写了一个AD采样的程序,用定时器1的周期中断启动ADC,可是结果寄存器就是读不出来数据,ADC的中断函数已经进入,
这是ADC中断函数
interrupt void ADCINT_ISR(void)
{
        i=i+1;
        a=((float)AdcRegs.ADCRESULT0)*3.0/65520.0;
        b=((float)AdcRegs.ADCRESULT1)*3.0/65520.0;
        c=((float)AdcRegs.ADCRESULT2)*3.0/65520.0;
        d=((float)AdcRegs.ADCRESULT3)*3.0/65520.0;
        e=((float)AdcRegs.ADCRESULT4)*3.0/65520.0;
        f=((float)AdcRegs.ADCRESULT5)*3.0/65520.0;
        g=((float)AdcRegs.ADCRESULT6)*3.0/65520.0;
        h=((float)AdcRegs.ADCRESULT7)*3.0/65520.0;
        u=((float)AdcRegs.ADCRESULT8)*3.0/65520.0;
        j=((float)AdcRegs.ADCRESULT9)*3.0/65520.0;
        k=((float)AdcRegs.ADCRESULT10)*3.0/65520.0;
        l=((float)AdcRegs.ADCRESULT11)*3.0/65520.0;
        m=((float)AdcRegs.ADCRESULT12)*3.0/65520.0;
        n=((float)AdcRegs.ADCRESULT13)*3.0/65520.0;
        o=((float)AdcRegs.ADCRESULT14)*3.0/65520.0;
        p=((float)AdcRegs.ADCRESULT15)*3.0/65520.0;

        PieCtrlRegs.PIEACK.all=0x0001;                               
        AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;                       
        AdcRegs.ADCTRL2.bit.RST_SEQ1=1;                               
        EINT;                                                                                //使能全局中端
}
这是初始化ADC的函数
void InitAdc(void)
{
        unsigned int i;
        AdcRegs.ADCTRL1.bit.RESET=1;
    for(i=0;i<100;i++);
        AdcRegs.ADCTRL1.bit.RESET=0;
        AdcRegs.ADCTRL1.bit.SUSMOD=3;                                //仿真暂停时,序列发生器和其他数字电路辑立即停止1
        AdcRegs.ADCTRL1.bit.ACQ_PS=0;                                //采样窗口大小,soc脉冲宽度为一个ADCLK        AdcRegs.ADCTRL1.bit.CPS=0;
        AdcRegs.ADCTRL1.bit.CPS=0;                                        //核时钟预定标器,等于0,未将时钟进行二分频
        AdcRegs.ADCTRL1.bit.CONT_RUN=0;                                //运行于启动/停止模式
        AdcRegs.ADCTRL1.bit.SEQ_CASC=1;                        //0:双序列发生器模式1:级联模式
        AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;
        for(i=0;i<5000;i++);
        AdcRegs.ADCTRL3.bit.ADCPWDN=1;
        for(i=0;i<10000;i++);
        AdcRegs.ADCTRL3.bit.ADCCLKPS=15;                        //ADCLK=HSPCLK/30
        AdcRegs.ADCTRL3.bit.SMODE_SEL=0;              //采用顺序采样模式
        AdcRegs.ADCMAXCONV.all=0x0077;                          //总共采样16路

        AdcRegs.ADCCHSELSEQ1.bit.CONV00=0;
        AdcRegs.ADCCHSELSEQ1.bit.CONV01=1;
        AdcRegs.ADCCHSELSEQ1.bit.CONV02=2;
        AdcRegs.ADCCHSELSEQ1.bit.CONV03=3;
       
        AdcRegs.ADCCHSELSEQ2.bit.CONV04=4;
        AdcRegs.ADCCHSELSEQ2.bit.CONV05=5;
        AdcRegs.ADCCHSELSEQ2.bit.CONV06=6;
        AdcRegs.ADCCHSELSEQ2.bit.CONV07=7;
       
        AdcRegs.ADCCHSELSEQ3.bit.CONV08=8;
        AdcRegs.ADCCHSELSEQ3.bit.CONV09=9;
        AdcRegs.ADCCHSELSEQ3.bit.CONV10=10;
        AdcRegs.ADCCHSELSEQ3.bit.CONV11=11;
       
        AdcRegs.ADCCHSELSEQ4.bit.CONV12=12;
        AdcRegs.ADCCHSELSEQ4.bit.CONV13=13;
        AdcRegs.ADCCHSELSEQ4.bit.CONV14=14;
        AdcRegs.ADCCHSELSEQ4.bit.CONV15=15;
       
        AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;                                //清除SEQ1中的中端标志位INT_SEQ1
        AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;                                //清除SEQ2中的中端标志位INT_SEQ2

        AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0;                        //0:不起作用1:允许事件管理器B的信号启动级联的序列发生器,可以通过对事件管理器EVB进行编程,实现EVB的多种事件转换启动
        AdcRegs.ADCTRL2.bit.RST_SEQ1=0;                          //不起作用
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;                        //使能SEQ1的中断请求
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;                        //每个SEQ1序列转换结束时,置位SEQ1中断标志位
        AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;                        //允许EVA触发启动SEQ1
        AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;                       
        AdcRegs.ADCTRL2.bit.SOC_SEQ1=0;                               

        AdcRegs.ADCTRL2.bit.RST_SEQ2=0;       
        AdcRegs.ADCTRL2.bit.SOC_SEQ2=0;                 
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0;                       
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0;                       
        AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0;                       

}
仿真查看结果寄存器,一直没有数据。显示0.请问为什么读不出数据呢?

维尼写诗 发表于 2013-8-4 11:34:31

还有接上信号线给ADC,ADC有些发热,怀疑ADC某个部分是不是烧了,我给的信号低于2.5V

woshisangao 发表于 2013-8-10 09:12:06

代码好多啊,看得眼疼,建议楼主先采一个通道看看结果,别整这么复杂,都不好调试了

steaven2000 发表于 2013-8-13 15:59:53

定点的F2812,你在中断里面用浮点运算,1,2,3,。。。哥都数不过来了。只能说,楼主奇人,膜拜!
页: [1]
查看完整版本: DSP2812 AD转换的问题,欢迎指教