打印
[DSP编程]

2812的ADC上电程序为何要放在CPUtimer0初始化之前

[复制链接]
1197|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qbchen|  楼主 | 2015-12-10 19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是我初始化ADC和CPUtimer0的程序,为何ADC上电程序为何要放在CPUtimer0初始化之前,即:
        AdcPowerUp();
        InitAdc();
        InitCputimer();
否则就不能进入CPUtimer0的中断?
写成这样的话CPU中断就进不去:
        InitCputimer();
        AdcPowerUp();
        InitAdc();
求大神们解答

void InitCputimer(void)
{        EALLOW;            
        CpuTimer0Regs.TPR.all = 149;
        CpuTimer0Regs.TPRH.all= 0;
        CpuTimer0Regs.PRD.all = 9999;
        CpuTimer0Regs.TCR.all =0xf000;
        EDIS;
}
void InitAdc(void)
{
        AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;   //双序列工作模式
        AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;  //顺序采样
        AdcRegs.ADCTRL1.bit.CONT_RUN = 0;   //启停方式
        AdcRegs.ADCTRL1.bit.CPS = 1;        //核时钟预定标器:ADC_CLK=ADCLKPS/2=3.125M
        AdcRegs.ADCTRL1.bit.ACQ_PS = 0xf;   //采样窗口为16
        AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x2; //核时钟分频:ADCLKPS=HSPCLK/4=6.25M ;
        AdcRegs.ADCMAXCONV.all = 0x0000;    //转换通道数:1
        AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0xf; //转换通道选择:ADCINB7
}
void AdcPowerUp(void)
{
        Uint32 i;
        AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;  //ADC带隙和参考电路加电
        for (i=0; i<1000000; i++){}           //至少5ms延时
        AdcRegs.ADCTRL3.bit.ADCPWDN = 1;      //ADC核模拟电路加电
        for (i=0; i<10000; i++){}             //至少20us延时
}

相关帖子

沙发
zhangmangui| | 2015-12-10 22:25 | 只看该作者
看着没有重复的寄存器    被修改的可能

使用特权

评论回复
板凳
qbchen|  楼主 | 2015-12-10 22:38 | 只看该作者
zhangmangui 发表于 2015-12-10 22:25
看着没有重复的寄存器    被修改的可能

什么意思?不是很能理解?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝