laoshuhunya 发表于 2014-12-30 18:09:39

八个字搞定一切MCU时钟模块配置


用飞思卡尔单片机图得就是它的稳定可靠,如果因为时钟配置而影响稳定性,岂不是暴殄天物?那干脆用STM32好了~~~

时钟是数字器件的心脏,协调着整个器件的工作时序,器件上电后首要工作通常是配置时钟。
MK系列的时钟模块看起来显得较复杂,其实只要掌握了几个要点,就再也不用纠结于FEI、FEE、FBI、FBE、PBE、PEE、BLPI、BLPE。。。了。

MK时钟配置要点:
1、        设置OUTDIV1~4,确保所有步骤这四个时钟频率均处于安全范围。
2、        配置FLL/PLL,配置OSC,确保OSC输出频率在FLL/PLL规定范围内。
3、        启动OSC,启动FLL/PLL,等待它们稳定。
4、        切换到所设置的时钟源。

前面有网友发了MK60的时钟配置图,需要16个步骤,我觉得太复杂了。
原帖地址



这里来张清晰点的MK64时钟结构图:



说了一堆,还是纸上谈兵,下面来几个实例吧。

/**************************************************************
               使用外部50MHz时钟倍频为100MHz主频
**************************************************************/
    SIM_CLKDIV1 = 0x01130000u;    // 步骤1:设置输出时钟分频因数:1/2/2/4
    Delay();
   
    MCG_C5 = 0x0Fu;    //步骤2:设置PLL输入分频因数(16分频)
    MCG_C6 = 0x08u;    //步骤3:设置PLL倍频因数(32倍频)
   
    MCG_C5_PLLCLKEN0 = 1;    //步骤4:开启PLL
    Delay();
    while (!MCG_S_LOCK0) ;    //步骤5:等待PLL锁定
    Delay();
   
    MCG_C6_PLLS = 1;    //步骤6:切换到PLL时钟
    Delay();
    while (((MCG_S >> 2) & 0x03) != 0x03) ;    //步骤7:确认已切换到PLL时钟
    Delay();
    SIM_SOPT2_PLLFLLSEL0 = 1;    //步骤8:选择MCGPLLCLK时钟源
    Delay();
/****************** 简单而抽象,才是真正的美 *******************/

只要8条语句就可完成配置,现在是不是感觉简单得多?

下面是使用外部12MHz晶振倍频为120MHz主频的实例:

/**************************************************************
               使用外部12MHz晶振倍频为120MHz主频
**************************************************************/
    SIM_CLKDIV1 = 0x01240000u;    // 设置输出时钟分频因数:1/2/3/5
    Delay();
   
    MCG_C5 = 0x03u;    // 设置PLL输入分频因数(4分频)
    MCG_C6 = 0x10u;    // 设置PLL倍频因数(40倍频)
   
    MCG_C2 = 0x9Cu;    // 配置并启动OSC
    MCG_C5_PLLCLKEN0 = 1;    // 开启PLL
    Delay();
    while (!MCG_S_OSCINIT0) ;    // 等待OSC时钟就绪
    Delay();
    while (!MCG_S_LOCK0) ;    // 等待PLL锁定
    Delay();
   
    MCG_C6_PLLS = 1;    // 切换到PLL时钟
    Delay();
    while (((MCG_S >> 2) & 0x03) != 0x03) ;    // 确认已切换到PLL时钟
    Delay();
    SIM_SOPT2_PLLFLLSEL0 = 1;    // 选择MCGPLLCLK时钟源
    Delay();
/****************** 简单而抽象,才是真正的美 *******************/


如果用内部32KHz RC振荡器倍频为96MHz主频,那就更简单了:

/**************************************************************
            使用内部32KHz RC振荡器倍频为96MHz主频
**************************************************************/
    SIM_CLKDIV1 = 0x01130000u;    // 设置输出时钟分频因数::1/2/2/4
    Delay();
   
    MCG_C2_IRCS = 1;    // 选择内部4MHz RC振荡器
    Delay();
    MCG_C1_CLKS0 = 1;    // 切换到内部4MHz RC振荡器
    Delay();
   
    MCG_C4 |= 0x03u << 5;    // 设置DCO频率范围
    Delay();
   
    MCG_C1_CLKS0 = 0;    // 选择MCGFLLCLK时钟源
    Delay();
    while (((MCG_S >> 2) & 0x03) != 0x00) ;    // 确认已切换到FLL时钟
    Delay();
/****************** 简单而抽象,才是真正的美 *******************/


注意:上面的例子需要注意各步骤之间的延时。
虽然以上讲的是飞思卡尔MK单片机,但对所有其它MCU也同样适用。

所有这些,可以归结为简单的八个字:


laoshuhunya 发表于 2014-12-30 18:20:15

说来惭愧,老衲至今不知道“FEI、FEE、FBI、FBE、PBE、PEE、BLPI、BLPE”是何意思。。。

franki 发表于 2014-12-30 18:21:41

第一张图好像在论坛见过

bbstr 发表于 2014-12-30 18:22:27

哪八个字?

laoshuhunya 发表于 2014-12-30 18:24:17

bbstr 发表于 2014-12-30 18:22
哪八个字?

最后一张图片的最后八个字。

fengyunyu 发表于 2014-12-30 18:24:19

讲得很清楚。问下是哪八个字?

fengyunyu 发表于 2014-12-30 18:26:22

逆向配置,顺向切换。怎么理解?

laoshuhunya 发表于 2014-12-30 18:33:20

fengyunyu 发表于 2014-12-30 18:26
逆向配置,顺向切换。怎么理解?

一楼的第二张图,标出了相对于时钟流的配置方向和切换方向。

彼岸花开@ 发表于 2014-12-30 18:35:38

1、配置是一个逆向的,主要的任务是中间的一些分频或者倍频这些参数
2、切换是一个开关,有50mhz
到内核的时钟要经过重重关卡。需要顺向的配置这些具有开关性质的位吧。。有的还需要等待一段时间,才能维持稳定
3、顺向切换的时候,后边的关卡是不能够提前打开的吧。。也就是说,必须要由前到后,
如果先配置了后边会出现什么情况呢

彼岸花开@ 发表于 2014-12-30 18:41:45

1、一般的逻辑思维是正向配置 正向切换楼主提出正向切换 逆向配置   具体到代码里边,实际上是分为配置逻辑部分和切换逻辑部分的 。。
2、学到俩名词哈。

a136498491 发表于 2014-12-30 19:02:05

ls解释很清楚

AllEle 发表于 2014-12-30 19:11:51

多看手册
要么不用

qs6361036 发表于 2014-12-30 21:18:39

这图片画的挺炫的 ,八字总结的很好

swap2013 发表于 2014-12-30 21:30:18

这个从哪里来的,有什么根据吗?

swap2013 发表于 2014-12-30 21:32:15

laoshuhunya 发表于 2014-12-30 18:20
说来惭愧,老衲至今不知道“FEI、FEE、FBI、FBE、PBE、PEE、BLPI、BLPE”是何意思。。。 ...

这个在手册里很明确

swap2013 发表于 2014-12-30 21:32:30

laoshuhunya 发表于 2014-12-30 18:20
说来惭愧,老衲至今不知道“FEI、FEE、FBI、FBE、PBE、PEE、BLPI、BLPE”是何意思。。。 ...

这个在手册里很明确

仇先天 发表于 2014-12-30 22:29:12

我是来学习的。。。。。

FSL_TICS_ZP 发表于 2014-12-31 10:24:49

楼主做的很用心啊,谢谢!

johnlj 发表于 2014-12-31 11:22:18

总结的很好,有个大的概念了,不是乱糟糟啦

holts2 发表于 2014-12-31 11:34:51

是哪八个字,没看到啊

子鱼 发表于 2014-12-31 11:47:18

holts2 发表于 2014-12-31 11:34
是哪八个字,没看到啊


逆向配置,顺向切换。 图片上可以看到

子鱼 发表于 2014-12-31 11:47:59


逆向配置,顺向切换。 没理解这几个字的含义 一般都是使用库文件提供的配置不做太大的改动

gongngei 发表于 2014-12-31 12:00:09

分析的不错

holts2 发表于 2014-12-31 12:24:16

子鱼 发表于 2014-12-31 11:47
逆向配置,顺向切换。 图片上可以看到

为什么不可以顺向配置,顺向切换 ?

ijlc1314 发表于 2014-12-31 12:32:22

等待的时候是否加超时处理好一点

黄晨0410 发表于 2014-12-31 12:38:18

请看数据手册         我才6个字

mcucow 发表于 2014-12-31 13:07:16

是记住这8个么?

FEI、FEE、FBI、FBE、PBE、PEE、BLPI、BLPE

jiwx2011 发表于 2014-12-31 16:52:55

最后一张图,真牛逼

szpspike 发表于 2014-12-31 17:14:39

找了好久才找到那八个字

jinyi7016 发表于 2015-1-4 22:13:20

学习了,感谢分享

xianghaisha 发表于 2015-1-4 22:41:31

...最后的图片好喜感。。不过楼主做的的确还不错

heyueming0 发表于 2015-1-4 22:50:07

飞思卡尔的时钟管理真是强大啊

Ray______ 发表于 2015-1-5 00:44:01

这个方法太好了,本来不太名词飞思这些步骤,这一看明了了

liuzs09 发表于 2015-1-5 14:01:37

这八个字好难找,看了三遍才找到

zl_123 发表于 2015-1-5 22:07:27

不是很理解,慢慢消化了                           

Juggernaut 发表于 2015-1-5 22:10:43

八个字找不到

897152237 发表于 2015-1-5 22:12:04

本帖最后由 897152237 于 2015-1-5 22:13 编辑

楼主NC么?STM32很差么?FSL的稳定是体现在时钟上么?
ps:我不想骂人的,就是看不惯胡乱喷别的架构或芯片不行的人,吃透了再说,楼主修改楼主位措辞后,我修改评论,谢谢!

guanxiaomin 发表于 2015-1-5 22:45:57

技术也可以以那么快乐……{:biggrin:}{:biggrin:}
页: [1]
查看完整版本: 八个字搞定一切MCU时钟模块配置