打印

2812 adc 采集

[复制链接]
1645|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzwxa|  楼主 | 2014-5-21 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhangmangui| | 2014-5-21 23:03 | 只看该作者
看看ADC的时钟有没有使能   我感觉是ADC的时钟没有使能

使用特权

评论回复
板凳
zhangmangui| | 2014-5-21 23:05 | 只看该作者
void InitSysCtrl(void)
{
   Uint16 i;
   EALLOW;
   
// On TMX samples, to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 internal
// control registers bit have to be enabled. The bits are in Device emulation registers.
   DevEmuRegs.M0RAMDFT = 0x0300;
   DevEmuRegs.M1RAMDFT = 0x0300;
   DevEmuRegs.L0RAMDFT = 0x0300;
   DevEmuRegs.L1RAMDFT = 0x0300;
   DevEmuRegs.H0RAMDFT = 0x0300;
   
           
// Disable watchdog module
   SysCtrlRegs.WDCR= 0x0068;

// Initalize PLL
   SysCtrlRegs.PLLCR = 0xA;
   // Wait for PLL to lock
   for(i= 0; i< 5000; i++){}
      
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
   SysCtrlRegs.HISPCP.all = 0x0001;
   SysCtrlRegs.LOSPCP.all = 0x0002;       
// Peripheral clock enables set for the selected peripherals.   
   SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
   SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
//   SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;
// SysCtrlRegs.PCLKCR.bit.SCIENCLKB=1;
   SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
                               
   EDIS;
       
}

看看系统初始化中的SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;   ADC时钟是否使能

使用特权

评论回复
地板
lzwxa|  楼主 | 2014-5-22 10:06 | 只看该作者
ADC时钟确认使能,求解决

使用特权

评论回复
5
zhangmangui| | 2014-5-22 23:17 | 只看该作者
lzwxa 发表于 2014-5-22 10:06
ADC时钟确认使能,求解决

那应该是配置的问题了
void InitAdc(void)
{
        unsigned int i;
       
        AdcRegs.ADCTRL1.bit.RESET=1;
        NOP;
        AdcRegs.ADCTRL1.bit.RESET=0;
        AdcRegs.ADCTRL1.bit.SUSMOD=3;
        AdcRegs.ADCTRL1.bit.ACQ_PS=0;
        AdcRegs.ADCTRL1.bit.CPS=0;
        AdcRegs.ADCTRL1.bit.CONT_RUN=0;
        AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
       
        AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;
        for(i=0;i<10000;i++)        NOP;
        AdcRegs.ADCTRL3.bit.ADCPWDN=1;
        for(i=0;i<5000;i++)        NOP;
        AdcRegs.ADCTRL3.bit.ADCCLKPS=10;
        AdcRegs.ADCTRL3.bit.SMODE_SEL=1;
       
        AdcRegs.MAX_CONV.bit.MAX_CONV=7;//15;
       
        AdcRegs.CHSELSEQ1.bit.CONV00=0;
        AdcRegs.CHSELSEQ1.bit.CONV01=1;
        AdcRegs.CHSELSEQ1.bit.CONV02=2;
        AdcRegs.CHSELSEQ1.bit.CONV03=3;
       
        AdcRegs.CHSELSEQ2.bit.CONV04=4;
        AdcRegs.CHSELSEQ2.bit.CONV05=5;
        AdcRegs.CHSELSEQ2.bit.CONV06=6;
        AdcRegs.CHSELSEQ2.bit.CONV07=7;
/*       
        AdcRegs.CHSELSEQ3.bit.CONV08=8;
        AdcRegs.CHSELSEQ3.bit.CONV09=9;
        AdcRegs.CHSELSEQ3.bit.CONV10=10;
        AdcRegs.CHSELSEQ3.bit.CONV11=11;
       
        AdcRegs.CHSELSEQ4.bit.CONV12=12;
        AdcRegs.CHSELSEQ4.bit.CONV13=13;
        AdcRegs.CHSELSEQ4.bit.CONV14=14;
        AdcRegs.CHSELSEQ4.bit.CONV15=15;
*/       
        AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
        AdcRegs.ADC_ST_FLAG.bit.INT_SEQ2_CLR=1;       
       
        AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0;
        AdcRegs.ADCTRL2.bit.RST_SEQ1=0;
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;
        AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;
        AdcRegs.ADCTRL2.bit.EXT_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;
        AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
       
}

使用特权

评论回复
6
comeon201208| | 2014-5-25 18:46 | 只看该作者
还是好好的确认下你的Ad是否运行正常的,主要也还是时钟的

使用特权

评论回复
7
lzwxa|  楼主 | 2014-6-16 15:54 | 只看该作者
我用TMS320C2812 的内部ADC,用仿真器调试发现如下问题:
将程序装入RAM中,复位后程序第一次有数据,以后每次都能进中断,但读回数据为0.检查了程序ADC初始化,同其它资料上提供的ADC例程对比也未发现问题,将程序在合众达的2812用户板上结果也一致.我的初始文件如下,请给予指导.谢谢.
                      AdcRegs.ADCTRL1.bit.RESET=1;
        NOP;
        AdcRegs.ADCTRL1.bit.RESET=0;
        AdcRegs.ADCTRL1.bit.SUSMOD=3;
        AdcRegs.ADCTRL1.bit.ACQ_PS=0;
        AdcRegs.ADCTRL1.bit.CPS=0;
        AdcRegs.ADCTRL1.bit.CONT_RUN=0;
        AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
        AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;
        for(i=0;i<10000;i++)        NOP;
        AdcRegs.ADCTRL3.bit.ADCPWDN=1;
        for(i=0;i<5000;i++)        NOP;
        AdcRegs.ADCTRL3.bit.ADCCLKPS=15;
        AdcRegs.ADCTRL3.bit.SMODE_SEL=0;
        AdcRegs.MAX_CONV.bit.MAX_CONV=0;
        AdcRegs.CHSELSEQ1.bit.CONV00=6;
        AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
        AdcRegs.ADC_ST_FLAG.bit.INT_SEQ2_CLR=1;       
        AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0;
        AdcRegs.ADCTRL2.bit.RST_SEQ1=0;
        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;
        AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;
        AdcRegs.ADCTRL2.bit.EXT_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;
        AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;

使用特权

评论回复
8
lzwxa|  楼主 | 2014-6-16 15:59 | 只看该作者

时钟在如下程序中使能,请问问题处在那/
void InitSysCtrl(void)
{
   Uint16 i;
   EALLOW;
   
// On TMX samples, to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 internal
// control registers bit have to be enabled. The bits are in Device emulation registers.
   DevEmuRegs.M0RAMDFT = 0x0300;
   DevEmuRegs.M1RAMDFT = 0x0300;
   DevEmuRegs.L0RAMDFT = 0x0300;
   DevEmuRegs.L1RAMDFT = 0x0300;
   DevEmuRegs.H0RAMDFT = 0x0300;
   
           
// Disable watchdog module
   SysCtrlRegs.WDCR= 0x0068;

// Initalize PLL
   SysCtrlRegs.PLLCR = 0xA;
   // Wait for PLL to lock
   for(i= 0; i< 5000; i++){}
      
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
   SysCtrlRegs.HISPCP.all = 0x0001;
   SysCtrlRegs.LOSPCP.all = 0x0002;       
// Peripheral clock enables set for the selected peripherals.   
   SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
   SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
//   SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;
// SysCtrlRegs.PCLKCR.bit.SCIENCLKB=1;
   SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
                               
   EDIS;
       
}

使用特权

评论回复
9
zhangmangui| | 2014-6-17 08:55 | 只看该作者
lzwxa 发表于 2014-6-16 15:59
时钟在如下程序中使能,请问问题处在那/
void InitSysCtrl(void)
{

使能了啊 ADCENCLK这个啊

使用特权

评论回复
10
kean0048| | 2017-6-23 12:04 | 只看该作者
zhangmangui 发表于 2014-6-17 08:55
使能了啊 ADCENCLK这个啊

搞定了吗?记得ADC使能后第一次采样数据不要使用

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝