SAM4S系统时钟的设置错误更正

之前有篇文章专门介绍了SAM4S系统时钟使用ASF初始化的问题(SAM4S系统时钟的设置分析),虽然一直工作没发现什么问题,定时、串口、中断什么都没有问题。但是今天当我打印 MCU 工作频率的时候发现,工作时钟竟然是12M!我设定的值可是按120M计算的,问题出在哪里呢?

重新查看时钟初始化那些宏定义,发现就一处跟示例程序不同:

  1. // ===== PLL0 (A) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
  2. // Use mul and div effective values here.
  3. #define CONFIG_PLL0_SOURCE          PLL_SRC_MAINCK_XTAL
  4. #define CONFIG_PLL0_MUL             60
  5. #define CONFIG_PLL0_DIV             1

就是倍频被我从20改到了60。因为我的板子上面晶振是4M的,开发板的晶振是12M的,我为了省事,就在这里把它放大了三倍,然后就不对劲了。为了进行测试,我把倍频改回到20倍,再查系统频率,果然,回到了40M!问题就在这里。我估计系统倍频参数有个上限,看了pll_config_init()这个函数,里面对倍频的的类型定义是 uint32_t,但是在倍频后,有个最大最小值的检验Assert(),应该是这里没有通过,然后系统就默认了时钟12M。

找到原因就好办,把倍频改到30倍,时钟分频从2改到1,再进行测试,可以输出系统频率是120M了。

打赏
原文链接:,转发请注明来源!

发表评论