查看: 3004|回复: 3

AD采样的问题

[复制链接]

该用户从未签到

发表于 2013-8-29 16:59:12 | 显示全部楼层 |阅读模式
分享到:
我用青风的那个板,运行ADC_OUT例程,没有问题,
原来程序
SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);   //
我改的程序
  SysCtlClockSet(SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ | SYSCTL_SYSDIV_1);                       

运行到这里就异常停止了
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
  
  ADCReferenceSet(ADC0_BASE,ADC_REF_INT  );
  

原来程序是用PLL,我想改成不启用PLL作为主时钟,直接用外面的晶振源作为时钟,结果程序在AD单元初始化的时候就异常了。很奇怪,有哪位知道如何处理么?
我看了一下,如果是用PLL,系统频率在20M,我用晶振,16M,应该满足AD模块对时钟的要求,而且我还过24M晶振,再配置也是一样的。只有把SYSCTL_USE_PLL 选择才行。错误的情况下,我把AD部分屏蔽,只运行串口发数据是正常的。
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-8-29 16:59:57 | 显示全部楼层
QF-LM4F232 cortex m4开发板
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-9-2 21:11:07 | 显示全部楼层
本帖最后由 housping 于 2013-9-2 21:20 编辑

Most of the ADC control logic runs at the ADC clock rate of 16 MHz. The internal ADC divider is configured for 16-MHz operation automatically by hardware when the system XTAL is selected with the PLL.
                                                                                                                                                [size=10.000000pt]Touse the MOSC to clock the ADC, first power up the PLL and then enable the clock to the ADCmodule, then disable the PLL and switch to the MOSC for the system clock.  
                               
                       
               
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-9-3 14:58:39 | 显示全部楼层
FPUEnable();              
  FPULazyStackingEnable();         
    SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);         
         TheSysClock = SysCtlClockGet();   
        UART5Init(115200);            
        ADInit();ADValueGet();ADValueGet();
        SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);        
          TheSysClock = SysCtlClockGet();                    
   
                UART5Init(115200);            
                printf("TheSysClock:%.6fM\r\n", (float)TheSysClock/1000000);           //         
    ResetCauseGet();        
        ADValueGet();ADValueGet();

貌似按照先启用PLL,然后AD初始化,这个时候AD采样成功
再停用PLL,启用XTAL,再采样,AD就失败了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-11-19 20:43 , Processed in 0.150631 second(s), 22 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.