2812 adc 采集

[复制链接]
2032|9
 楼主| lzwxa 发表于 2014-5-21 15:33 | 显示全部楼层 |阅读模式
你好,用2812 内部AD采集,仿真器每次复位后第一次采集数据正确,后面能进中断,但采集数据为0,请多指点.
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时钟确认使能,求解决
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;
       
}
comeon201208 发表于 2014-5-25 18:46 | 显示全部楼层
还是好好的确认下你的Ad是否运行正常的,主要也还是时钟的
 楼主| 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;
 楼主| 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;
       
}
zhangmangui 发表于 2014-6-17 08:55 | 显示全部楼层
lzwxa 发表于 2014-6-16 15:59
时钟在如下程序中使能,请问问题处在那/
void InitSysCtrl(void)
{

使能了啊 ADCENCLK这个啊
kean0048 发表于 2017-6-23 12:04 | 显示全部楼层
zhangmangui 发表于 2014-6-17 08:55
使能了啊 ADCENCLK这个啊

搞定了吗?记得ADC使能后第一次采样数据不要使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部