飞思卡尔k60从零开始之PLL

在大学,参加过飞思卡尔比赛。当时校内赛都没有过,当时没有老师教,没有教学视频看,不知道怎么查找资料。仅仅学过一点51,就上手飞思卡尔的MK60DN512ZVLQ这款芯片,难度可想而知。现在毕业了,工作中也在用K60,STM32等芯片。K60和stm32总体差不多,会一个另一个也会很快上手。所以,今天就把我的经验和大家分享下,让新手好尽快上手这款芯片。本人是笨鸟中的菜鸟,如果有哪里讲的不对的地方,希望大家指出。

K60的时钟相比51复杂很多很多,但是我们一般常用的时钟就是经过锁相环(PLL)计算出来的时钟,因为他用的是外部晶振,比芯片内部的晶振要准确,长时间不会产生飘逸等等优点。建议新手对照手册,看一篇配置步骤即可,没有必要弄的很通透,知道分频是多少,倍频是多少,最后设置出来的内核时钟是多少即可。因为往后的其他所有的外围模块都会涉及到时钟,会让你一点点明白它的。

闲话少说,先上代码:

    MCG->C1 = MCG_C1_CLKS(2) ;//选择外部时钟
    MCG->C5 = MCG_C5_PRDIV(pll_prdiv);//分频后结果控制在2M`4M之间                
    ///设置系统分频器
    //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/3, Flash clock= MCG/8
    SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(1) 
                               | SIM_CLKDIV1_OUTDIV3(2) | SIM_CLKDIV1_OUTDIV4(7);       
    MCG->C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(pll_vdiv);                                                
    while (!(MCG->S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set    
    while (!(MCG->S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set     
    MCG->C1=MCG_C1_CLKS(0) ;//选择PLL时钟输出
    //等待时钟状态位更新
    while (((MCG->S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
   // 内核时钟(系统时钟)=外部时钟(50M晶振频率)/ (pll_prdiv+1)*(pll_vdiv+24);
    core_clk=50000000/(pll_prdiv+1)*(pll_vdiv+24);
    bus_clk =core_clk/2;

  以上两个红色的就是分频和倍频。手册上写分频后的频率要在2~4M之间。经我实际测试,可以有出入。

最后两句是我计算出来的内核时钟和总线时钟,和单片机寄存器配置无关,可以删掉,是为了给大家看看具体计算的过程用的。

为什么计算prdiv和vdiv都要加1和24,理由如下:


prdiv这个寄存器内,写入1,实际计算的是2,写2,实际计算的是3.

vdiv写0,实际用于计算的是24,写1,计算用的是25.依此类推。


以我用的是50M的外部晶振,要配置内核时钟为100M为例:

就是            pll_prdiv       = 24;//官方推荐频率100M
            pll_vdiv        = 26;

内核时钟=50M/(24+1)*(26+24)=100M;

K60官方推荐的频率是100M,很多同学喜欢超频,喜欢更高的频率,实际意义不大。首先超频会简短芯片寿命,其次,超频到到临界点时,频率是很快,但是会不稳定,比如震动,静电,会很容易让MCU复位或者程序跑飞。

本人实测:100脚的K60,大概能超频到180M。144引脚,DN系列K60能超频到200左右,FN系列能超频到220左右。

本人不是大神,可定有哪里讲的不好的,不对的地方,希望大家指出,指教。可以加 飞思卡尔智能车恩智浦 254833542这个群,大家一起讨论下。

  • 16
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值