打印
[Kinetis]

(转)玩转Kinetis之教你将K60主频超到200MHz以上

[复制链接]
914|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
energy1|  楼主 | 2015-2-9 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近忙碌的状态稍微缓解了些,终于可以甩开膀子干点自己一直想干的事了。说起来,自己还颇有点向往有充足的自由时间的时候,毕竟前段时间积压了好多东西,是该捡起来一件件的把它做了,趁着自己还年轻还有激情,所以撸胳膊抹袖子开整吧,呵呵~
    今天就先挑一件来说说吧。“超频”这个词估计大家都不会陌生,很多玩计算机的都会尝试去把自己电脑的CPU超频玩一些高端大型游戏(咳咳,当然玩的high的时候别忘了小心你的主板别烧了),而对我们这些搞嵌入式的IT男来说,估计就只能用这样的情怀去折磨MCU了(当然前提得是有PLL或者FLL的MCU)。记得那是2008年的第一场雪,比往年来的稍晚了些…(没收住,又开始整词儿了,呵呵),那一年我第一次接触飞思卡尔的9S12 16位的单片机(MC9S12DG128,搞过智能车的童鞋都懂的),额定主频是25MHz,我把它超到40MHz,后来又换了MC9S12XS128,额定主频是40MHz,我又把它超到80MHz(晕,敢情我有超频强迫症啊,呵呵),一直到如今的ARM K60,额定主频为100MHz(VLQ100),所以。。。咳咳。。。
    本来自己曾经试着把它超过120以上的,不过之后出现了系统不稳定而且也的确还不需要太高的主频,索性就放下了就没有再去管它。直到前几天,师弟过来跟我说超到200MHz以上了,我仔细问了问才恍然所悟,发现了之前主频超不上去的问题所在。

相关帖子

沙发
energy1|  楼主 | 2015-2-9 22:18 | 只看该作者
这里首先需要澄清几个概念,我们通常所说的主频一般是指内核时钟或者系统时钟(即core_clk或system_clk)。而对K60来说,其内部还有总线时钟(Bus_clk)、外部总线时钟(FlexBus_clk)、flash时钟(Flash_clk),而这几个时钟互相关联且每个都是有其频率限制的(如下图1所示),所以当我们要超频内核时钟的时候还不得不考虑其他时钟承受极限(姑且用这个词吧),颇有些捉襟见肘的感觉是吧,不过这点人家飞思卡尔帮咱想好了,呵呵。在我们用MCG模块内部的PLL将输入时钟超频到200MHz作为MCGOUTCLK输出的时候还需要一道关卡(如下图2),也就是说虽然这几个时钟属于同宗(都来自MCGOUTCLK),但是也可以通过不同的分频器(OUTDIV[1:4])约束不同的时钟范围,这里想起一个形象的例子(呵呵,不要嫌我俗)。MCGOUTCLK就类似以前的官家大老爷,娶了四房姨太太(OUTDIV[1:4]),分别生了四个少爷(即core_clk、Bus_clk、FlexBus_clk和Flash_clk),每个少爷都是老爷的儿子,不过在家中地位却是由姨太太的排序决定的,其中大房的大少爷(core_clk)地位最高(频率范围最大),四房的小少爷(flash_clk)地位最低(频率范围最小),不过他们的地位最高也不会超过老爷(其他clk<=MCGOUTCLK),呵呵,有点意思吧~

使用特权

评论回复
板凳
energy1|  楼主 | 2015-2-9 22:18 | 只看该作者

图1
图2

使用特权

评论回复
地板
energy1|  楼主 | 2015-2-9 22:19 | 只看该作者
经过上面的分析之后,就可以开始着手超频了。经过验证,其实系统频率超不上去就是“小少爷”(flash_clk)拖了后腿,当我们将MCGOUCLK超到200MHz的时候,OUTDIV1的分频可以设置为1分频,保证内核频率为200MHz,但却要同时保证其他几个时钟不要超过太多,尤其是Flash_clk的限制要严格(建议不要超过30MHz),因为flash_clk过高就代表取指令的频率过高,指令出错就会造成系统程序跑飞。
    说到这里,可能有些人会质疑,把主频超的那么高,但取指令的速度上不去有个啥用,岂不是颇有些大马拉小车的感觉吗,其实不然,这里我说两点。一个是通过RAM调试或者将函数声明成RAM执行函数的时候是可以加快执行速度的,另一个就是当做一些数**算的时候作用就很明显了,因为一般可能会单纯用到CPU内部的ALU和寄存器组,后者数据访问多一些(注意Cortex-M4是哈佛结构,数据与指令总线独立的),自然其运算速度就上去了,所以还是好处多多的,呵呵~

使用特权

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

本版积分规则

94

主题

422

帖子

10

粉丝