[资料分享与下载] kinetis时钟模块MCG详解

[复制链接]
4779|52
 楼主| niuyaliang 发表于 2015-2-27 21:52 | 显示全部楼层
 楼主| niuyaliang 发表于 2015-2-27 21:53 | 显示全部楼层
FBE模式下,时钟的产生如图1.12所示。在FBE模式下,MCGOUTCLK来自外部参考时钟,此时,FLL仍正常工作,但是FLL的参考时钟输入从内部慢速时钟切换到外部时钟。此时FLL产生的时钟并不输出。
 楼主| niuyaliang 发表于 2015-2-27 21:53 | 显示全部楼层
 楼主| niuyaliang 发表于 2015-2-27 21:53 | 显示全部楼层
从FEI到FBE的转换,主要改变的是MCGOUTCLK的来源从FLL切换到外部晶振,即MCG_C1寄存器的CLKS从00切换到10。同时FLL的参考时钟也从内部32K慢速时钟切换到晶振分频后的时钟,即MCG_C2寄存器中RANGE、HGO和EREFS都需要设置,而且MCG_C1寄存器中的FRDIV也需要合理设置以保证外部晶振分频后得到不大于32KHz的参考时钟提供给FLL。
 楼主| niuyaliang 发表于 2015-2-27 21:54 | 显示全部楼层
  以4MHz外部晶振为例,首先设置MCG_C2寄存器,代码如下:
QQ图片20150227215417.png
 楼主| niuyaliang 发表于 2015-2-27 21:54 | 显示全部楼层
使用4MHz晶振,RANGE设置为1;HGO置1,选择高增益;EREFS置1,选择外部晶振。在这段代码中,大量采用系统自带的宏定义,具体和查询头文件MK10X256VMD100.h。使用系统自带的宏定义可防止自己计算二进制出错,当然,也可以不使用,宏定义,而直接定义:
 楼主| niuyaliang 发表于 2015-2-27 21:55 | 显示全部楼层
 楼主| niuyaliang 发表于 2015-2-27 21:55 | 显示全部楼层
接下来设置,MCG_C1寄存器,代码如下:
QQ图片20150227215547.png
 楼主| niuyaliang 发表于 2015-2-27 21:56 | 显示全部楼层
CLKS设为10,选择外部参考时钟输出到MCGOUTCLK;FRDIV置为3,对4MHz晶振256分频。注意分频后的时钟只需要小于32KHz即可,由于FBE只是过渡状态,所以不必详细计算。同样,上面的代码我们也使用了系统自带的宏定义。
 楼主| niuyaliang 发表于 2015-2-27 21:56 | 显示全部楼层
  当设置完毕后,需查询MCG_S中的几个状态位以确保状态切换完成,才能进行后面的操作,查询状态位的代码如下:
QQ图片20150227215642.png
 楼主| niuyaliang 发表于 2015-2-27 21:57 | 显示全部楼层
2. FBE切换到PBE
       PBE模式下,MCGOUTCLK输出时钟不变,仍然是外部晶振直接输出,所以MCG_C1中的CLKS不必改变。也就是PBE下的时钟产生和图1.2是一样的。但是,在这一步,我们开始启用PLL工作,并计算好我们需要超频的倍率。在PBE模式下,PLL虽然已正常工作,PLL的时钟并不输出。在这一步,我们只要设置MCG_C5和MCG_C6两个寄存器。
quray1985 发表于 2015-2-28 10:31 来自手机 | 显示全部楼层
谢谢楼主分享
peter1999 发表于 2016-1-1 23:24 | 显示全部楼层
很好很强大,希望继续
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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