搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 2013-8-4 11:32:52 | 显示全部楼层 |阅读模式
我写了一个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.请问为什么读不出数据呢?

出0入0汤圆

 楼主| 发表于 2013-8-4 11:34:31 | 显示全部楼层
还有接上信号线给ADC,ADC有些发热,怀疑ADC某个部分是不是烧了,我给的信号低于2.5V

出0入0汤圆

发表于 2013-8-10 09:12:06 | 显示全部楼层
代码好多啊,看得眼疼,建议楼主先采一个通道看看结果,别整这么复杂,都不好调试了

出0入0汤圆

发表于 2013-8-13 15:59:53 | 显示全部楼层
定点的F2812,你在中断里面用浮点运算,1,2,3,。。。哥都数不过来了。只能说,楼主奇人,膜拜!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 00:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表