打印
[Kinetis]

学习心得+飞思卡尔K60学习心得(二)

[复制链接]
5575|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 mxj1005071012 于 2013-10-22 17:05 编辑

PLL 就是锁相环,作用就是提高总线的工作频率,通俗讲设置 PLL 锁相环就相当于超频。
概念:无源晶振为 crystal(晶体),而有源晶振则叫做 oscillator(振荡器)。

根据这三个公式设置总线频率
                          




公式说明:

压控振荡器 VCO


OSC、FOSC、OSCCLK:外加晶振频率(待确定)


SYNDIV SYNR 寄存器的 0-5 位设定:
                       

synthesizer :1.合成器,综合器 2.合成仪 3.频率合成器
注意其写入条件。PLLSEL=1,即在PLL启动后写无效了


SYNR寄存器的7、6位设定条件如下

                                 

Frequency:频率SYNR:CRG 合成器寄存器CRG:时钟及复位发
          REFDIVREVDV寄存器的0-5位决定:     
                                       
   Reference:n. 参考,参照;涉及,提及;参考书目;介绍信;证明书
Divider:分配器REFDV:CRG 参考分频寄存器
POSTDIV:快速分频控制寄存器
                                 
      
应该是控制FVCO 和PLLCLK 的分频比,一般设置为 0,这时FPLL= FVCO/1=FVCO,即当POSTDIV=0时,fPLL=fVCO FPLL、PLLCLK:锁相环频率(待确定)FBUS、Bus Clock:总线频率(待确定)
CLKSEL:时钟选择寄存器      
                                     
PLLSEL 位,选定锁相环(PLL Select)位,置为1 选定锁相环时钟。0:系统时钟来自晶振1:系统时钟来自锁相环PSTP 位,选定伪停止(PSEUDO Stop)模式下振荡器工作还是停止,置为1 则振荡器不停止。0:在停止模式下,震荡器停止1:在停止模式下,震荡器不停止XCLKS:显示震荡器配置状态0:闭环控制的皮尔斯振荡器被选择1:外部时钟/全速震荡的皮尔斯振荡器被选择
       PLLWAI:PLL 停止在等待模式下0:IPLL 保持运行在等待模式下1:IPLL 在等待模式下停止如果PLLWAI 的设置, S12XECRG 将清除PLLSEL 位在进入等待模式之前,PLLON 位将保持设置在等待模式中,但IPLL 将被关机。在退出等待模式时,PLLSEL 位不得不手动设置,如果PLL 时钟需要RTIWAI,置Wait 模式下内核时钟停止工作位置为l,则Wait 模式下内实时时钟停止工作。0:RTI 在等待模式下继续运行1:RTI 停止并初始化分配器COPWAI 位,置Walt 模式下看门狗时钟停止工作位置为1,则Wait 模式下看门狗时钟停止工作。CLKSEL //CLKSEL=0,选择外部晶振为时钟源CLKSEL_COPWAICLKSEL_RTIWAICLKSEL_PLLWAICLKSEL_XCLKSCLKSEL_PSTPCLKSEL_PLLSEL
PLLCTL:锁相环控制寄存器
                                             
CME 位,时钟监控允许位(Clock MonitorEnable),CME=1 时,时钟监控允许;CME;=0禁止PLLON 位,锁相环电路允许位,PLLON=1 时,锁相环电路允许;=0 时,禁止。FM1, FM0:IPLL 频率调制使能位  
                                              
这两位是用来减少躁声用的,任何时候都可以写,除了PLLSEL=1时FSTWKP:快速唤醒从完全停止位0:快速唤醒被禁止1:快速唤醒被允许,当允许后系统会立刻恢复到自时钟模式,SCMIF 将不会被置位,该系统将继续留在自我时钟模式,振荡器和时钟监控停用直到FSTWKP位清除,清理
       FSTWKP 将启动振荡器,时钟监测和时钟质量检查,如果时钟质量检查成功,将开起S12XECRG 所有系统时钟到OSCCLKPRE 位,CPU 伪停止状态时(Pseudo STOP),PRE=1(实时中断RTI)允许PRE=O 时,实时中断(RTI)禁止。PCE,CPU 虚拟停止时,看门狗(COP)允许位。PCE=1 时,允许看门狗:PCE=0 时,禁止看门狗。SCME 位,自时钟方式允许位(SEIF clock Mode Enable)*SCME=l 时,探测到外部晶振失效时产生复位信号;SCME;0 时,探测到外部晶振失效时进入自给时钟方式。通常,单片机的片内寄存器在CPU复位时都是清0的。在此,注意到,这个锁相环控制寄存器见PLLCTL在复位后有2位为1,在没有全面掌握某个CPU的特性之前,尽可能使用复位后的默认参数是一条原则,这可以使系统初始化的处理尽量简单。使用默认参数,可以不对PLLCTL寄存器做任何初始化。对于复位后清零的寄存器恐怕要想一想这些O 参数是否合理,是否能工作。PLLCTLPLLCTL_SCMEPLLCTL_PCEPLLCTL_PREPLLCTL_FSTW**LLCTL_FM0PLLCTL_FM1PLLCTL_PLLONPLLCTL_CMEPLLCTL_FM  
                                    
补充:中断配置(若需要)         实时时钟,锁相环和自时钟模式中断使能,当相应标志位置位时,中断发生。CRGINTCRGINT_SCMIECRGINT_RTIECRGINT_LOCKIE   CRG标志寄存器:
                                    
                   RTIF 位,实时中断标志位。RTIF=1 表示发生了实时中断超时中断,向该位写1 清中断标志位PORF 位,上电复位标志。0:没发生1:复位发生LVRF:低电压复位标志1:发生电压太低复位LOCKIF=1 表示锁相环锁定位发生变化产生中断请求。LOCK 位,锁相环频率锁定标志。LOCK=1 表示时钟频率已稳定锁相环频率已锁定。ILAF:不合法的地址复位标志1:地址不合法,发生复位的标记SCMIF 位,自给时钟中断标志。SCMIF;1 表示SCM 位发生了变化;SCM 位,自给时钟状态(Self Clock Mode)位SCM=1 表示系统靠自给时钟工作,外部晶振停振。与系统时钟初始化有关的是锁相环频率锁定标志LOCK,为1 表示时钟频率已稳定锁相环频率已锁定。CRG标志寄存器CRG标志寄存器_SCMCRG标志寄存器_SCMIFCRG标志寄存器_ILAFCRG标志寄存器_LOCKCRG标志寄存器_LOCKIFCRG标志寄存器_LVRFCRG标志寄存器_PORFCRG标志寄存器_RTIFCRGINTCRGINT_SCMIECRGINT_LOCKIECRGINT_RTIE     PLL初始化步骤:1. 设定总线频率由外部晶振频率决定


       2. 设置PLL相关参数,改变fBUS3. 等待PLL稳定4. 设定总线频率由fPLL决定 几点疑问:1.代码里while(!CRG标志寄存器_LOCK);这句是干什么的?答:时钟校正同步2.为什么代码中会有多多少少的几句空语句?答:锁相环从设定到最后稳定还是需要一点点时间的,所以需要加几条空指令 _asm(nop);执行一个空语句 null(无效的) opreation(操作) 延时3.PLL 锁相环怎么设置?答:通过写REFDV(CRG 参考分频寄存器)和SYNR(CRG 合成器寄存器)进行设置4.SYNR 和REFDV都是低6 位来设定所要超的频率,其高2 位是根据你要超的频率来配置,通过合理的配置VCOFRQ,REFFRQ 来提高系统时钟稳定性格式:VCOFRQ[7:6]=0b11;SYNDIV[5:0]=0b001001,,0b为二进制5.运算符 ‘丨’按位或

void pll_init()
{        
        /*  
        #define BIT_SET(x)     1<<x
        #define BIT_CLR(y)     ~(1<<y)
        */
        
        SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
        LLWU_CS |= LLWU_CS_ACKISO_MASK;
        
        //进入FBI
        MCG_C1|=BIT_SET(7);//选择外部时钟
        while(!(MCG_S&0x08));//确认在使用外部时钟
        //进入了FBI,准备进入FBE
        
        MCG_C1&=BIT_CLR(2);//给FLL选择外部参考时钟
        while(MCG_S&0x10);//确认FLL使用的是外部参考时钟
        //进入了FBE,准备进入PBE
        
        MCG_C6|=BIT_SET(6);
        MCG_C5=0x13;
        MCG_C6|=0x10;
        while(!(MCG_S&0x40));
        
        //进入了PBE,准备进入PEE
        
        MCG_C1=0;
        while((MCG_S&0x0c)!=0x0c);
        //进入了PEE
}

相关帖子

沙发
cxz_00| | 2013-10-22 19:11 | 只看该作者
写的好多阿,可惜我还没有收到书呢。

使用特权

评论回复
板凳
mxj1005071012|  楼主 | 2013-10-23 14:34 | 只看该作者
cxz_00 发表于 2013-10-22 19:11
写的好多阿,可惜我还没有收到书呢。

莫着急,应该会发的,联系一下飞思卡尔的负责人吧

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2013-10-23 14:55 | 只看该作者
cxz_00 发表于 2013-10-22 19:11
写的好多阿,可惜我还没有收到书呢。

应该快了,你可以先看看论坛我们给出的资料和官网资料,写的心得也算的。

使用特权

评论回复
5
123de7| | 2013-10-23 21:37 | 只看该作者
LZ ,K60 最大超频会多少?平时多少?
顶一个!!!

使用特权

评论回复
6
mxj1005071012|  楼主 | 2013-10-23 21:50 | 只看该作者
123de7 发表于 2013-10-23 21:37
LZ ,K60 最大超频会多少?平时多少?
顶一个!!!

K60目前可以倍频到180MHZ

使用特权

评论回复
7
xpu_ws| | 2016-4-10 11:34 | 只看该作者
想知道
LLWU_CS |= LLWU_CS_ACKISO_MASK;
中的LLWU_CS 寄存器是啥东西,
然后并没有在1700多页的参考找到!
请教楼主

使用特权

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

本版积分规则

20

主题

227

帖子

1

粉丝