发新帖我要提问
123
返回列表
打印
[资料分享与下载]

kinetis时钟模块MCG详解

[复制链接]
楼主: niuyaliang
手机看帖
扫描二维码
随时随地手机跟帖
41
niuyaliang|  楼主 | 2015-2-27 21:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
42
niuyaliang|  楼主 | 2015-2-27 21:53 | 只看该作者
FBE模式下,时钟的产生如图1.12所示。在FBE模式下,MCGOUTCLK来自外部参考时钟,此时,FLL仍正常工作,但是FLL的参考时钟输入从内部慢速时钟切换到外部时钟。此时FLL产生的时钟并不输出。

使用特权

评论回复
43
niuyaliang|  楼主 | 2015-2-27 21:53 | 只看该作者

使用特权

评论回复
44
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。

使用特权

评论回复
45
niuyaliang|  楼主 | 2015-2-27 21:54 | 只看该作者
  以4MHz外部晶振为例,首先设置MCG_C2寄存器,代码如下:

使用特权

评论回复
46
niuyaliang|  楼主 | 2015-2-27 21:54 | 只看该作者
使用4MHz晶振,RANGE设置为1;HGO置1,选择高增益;EREFS置1,选择外部晶振。在这段代码中,大量采用系统自带的宏定义,具体和查询头文件MK10X256VMD100.h。使用系统自带的宏定义可防止自己计算二进制出错,当然,也可以不使用,宏定义,而直接定义:

使用特权

评论回复
47
niuyaliang|  楼主 | 2015-2-27 21:55 | 只看该作者

使用特权

评论回复
48
niuyaliang|  楼主 | 2015-2-27 21:55 | 只看该作者
接下来设置,MCG_C1寄存器,代码如下:

使用特权

评论回复
49
niuyaliang|  楼主 | 2015-2-27 21:56 | 只看该作者
CLKS设为10,选择外部参考时钟输出到MCGOUTCLK;FRDIV置为3,对4MHz晶振256分频。注意分频后的时钟只需要小于32KHz即可,由于FBE只是过渡状态,所以不必详细计算。同样,上面的代码我们也使用了系统自带的宏定义。

使用特权

评论回复
50
niuyaliang|  楼主 | 2015-2-27 21:56 | 只看该作者
  当设置完毕后,需查询MCG_S中的几个状态位以确保状态切换完成,才能进行后面的操作,查询状态位的代码如下:

使用特权

评论回复
51
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两个寄存器。

使用特权

评论回复
52
quray1985| | 2015-2-28 10:31 | 只看该作者
谢谢楼主分享

使用特权

评论回复
53
peter1999| | 2016-1-1 23:24 | 只看该作者
很好很强大,希望继续

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则