2624|0

59

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

2812 AD采样 [复制链接]

我用CpuTimer0定时采样,采样256点,AD工作于级联模式,输入信号在通道1,输入的是正弦波,采样数据全都一样,是什么问题,哪位大神帮一下忙?!

主程序:

  1. #include"DSP281x_Device.h"
  2. #include"DSP281x_Examples.h"
  3. #include"DSP281x_GlobalPrototypes.h"
  4. float AdcData[256];
  5. Uint16 index=0;
  6. void main(void)
  7. {
  8.         InitSysCtrl();
  9.         DINT;
  10.         IER=0x0000;                //禁止CPU中断
  11.         IFR=0x0000;                //清除CPU中断标志
  12.         InitPieCtrl();        //初始化PIE控制寄存器
  13.         InitPieVectTable();//初始化PIE中断向量表
  14.         InitCpuTimers();        //初始化定时器相关配置
  15.         InitAdc();                        //初始化ADC相关配置
  16.         PieCtrlRegs.PIEIER1.bit.INTx7=1;//使能CPU定时器0 PIE中断
  17.         PieCtrlRegs.PIEIER1.bit.INTx6=1;//使能PIE中断中ADC中断
  18.         ConfigCpuTimer(&CpuTimer0,150,156.25);
  19.         IER|=M_INT1;                                //开CPU中断
  20.         EINT;                                                //使能全局中断
  21.         ERTM;                                                //使能实时中断
  22.         StartCpuTimer0();                        //启动定时器0
  23. //        AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//启动转换
  24.         while(1);
  25. }
复制代码
AD初始化程序:


  1. void InitAdc(void)
  2. {
  3.         extern void DSP28x_usDelay(Uint32 Count);
  4.        
  5.     // To powerup the ADC the ADCENCLK bit should be set first to enable
  6.     // clocks, followed by powering up the bandgap and reference circuitry.
  7.     // After a 5ms delay the rest of the ADC can be powered up. After ADC
  8.     // powerup, another 20us delay is required before performing the first
  9.     // ADC conversion. Please note that for the delay function below to
  10.     // operate correctly the CPU_CLOCK_SPEED define statement in the
  11.     // DSP28_Examples.h file must contain the correct CPU clock period in
  12.     // nanoseconds. For example:

  13.         AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;        // Power up bandgap/reference circuitry
  14.         DELAY_US(ADC_usDELAY);                  // Delay before powering up rest of ADC
  15.         AdcRegs.ADCTRL3.bit.ADCPWDN = 1;                // Power up rest of ADC
  16.         DELAY_US(ADC_usDELAY2);                 // Delay after powering up ADC

  17.         AdcRegs.ADCTRL1.bit.RESET=1;                        //ADC复位
  18.         asm("NOP");
  19.         AdcRegs.ADCTRL1.bit.RESET=0;
  20. /*************ADC控制寄存器1设置***************/
  21. //        AdcRegs.ADCTRL1.bit.SUSMOD=3;                        //仿真挂起时,序列发生器和其它轮询程序逻辑立即停止
  22.         AdcRegs.ADCTRL1.bit.ACQ_PS=2;                        //ADC采样窗口大小为3个ADCLK
  23.         AdcRegs.ADCTRL1.bit.CPS=0;                                //核时钟预定标器,未进行2分频
  24.         AdcRegs.ADCTRL1.bit.CONT_RUN=0;                        //运行于启动/停止模式
  25.         AdcRegs.ADCTRL1.bit.SEQ_CASC=1;                        //选择级联模式
  26. /*************ADC控制寄存器3设置**************/
  27.         AdcRegs.ADCTRL3.bit.ADCCLKPS=15;                //ADCLK=HSPCLK/30=75MHz/30=2.5MHz
  28.         AdcRegs.ADCTRL3.bit.SMODE_SEL=0;                //采用顺序采样模式


  29. //        AdcRegs.ADCMAXCONV.bit.MAX_CONV1=1;                //选择使用一个通道
  30.         AdcRegs.ADCCHSELSEQ1.bit.CONV00=0;                //选择ADCINA0通道作为采样通道
  31.         AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;                //清除SEQ1中断标志位
  32. //        AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;                //清除SEQ2的中断标志

  33. /************ADC控制寄存器2设置**************/
  34.         AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;                //启动SEQ1中断
  35.         AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;                //每个SEQ1序列结束产生一个中断
  36. //        AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;                //SEQ1不能由EVA触发启动

  37. }       
复制代码
AD中断程序:


  1. interrupt void  ADCINT_ISR(void)     // ADC
  2. {
  3.   // Insert ISR Code here
  4.         AdcData[index]=((float)AdcRegs.ADCRESULT0)*3.0/65520.0;
  5.         index++;
  6. //        if(index>=256)
  7. //        {index=0;}
  8. /******************用于调试程序用******************/
  9. #if 1
  10.         if(index>=256)
  11.         {
  12.                 StopCpuTimer0();
  13.                 while(1);
  14.         }
  15. #endif
  16. /********************************************/
  17.         AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;        //清除AD中断标志位
  18.         PieCtrlRegs.PIEACK.bit.ACK1=1;                //响应PIE同组中断

  19. //        AdcRegs.ADCTRL2.bit.RST_SEQ1=1;                //复位序列发生器
  20.         //EINT;                //使能全局中断
  21.   // To receive more interrupts from this PIE group, acknowledge this interrupt
  22.   // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
  23.   
  24.   // Next two lines for debug only to halt the processor here
  25.   // Remove after inserting ISR Code
  26.   // asm ("      ESTOP0");
  27.    //for(;;);
  28. }
复制代码
定时器0中断程序:

  1. interrupt void  TINT0_ISR(void)      // CPU-Timer 0
  2. {
  3.   // Insert ISR Code here
  4.         StopCpuTimer0();
  5.         AdcRegs.ADCTRL2.bit.RST_SEQ1=1;                //复位序列发生器
  6.         AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;                        //进入定时器0一次,启动一次定时器中断
  7.         CpuTimer0Regs.TCR.bit.TIF=1;                        //清除定时器中断标志
  8.         CpuTimer0Regs.TCR.bit.TRB=1;                        //重新装载定时器数值
  9.         StartCpuTimer0();                                                //开定时器定时
  10.         PieCtrlRegs.PIEACK.bit.ACK1=1;                        //允许响应同组其他中断
  11.   // To receive more interrupts from this PIE group, acknowledge this interrupt
  12.   // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
  13.   
  14.   // Next two lines for debug only to halt the processor here
  15.   // Remove after inserting ISR Code
  16.   //   asm ("      ESTOP0");
  17.   //   for(;;);
  18. }
复制代码


点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表