MC9S12G128 PLL设置

2021-07-22来源: eefocus

对于一款单片机的使用,首先要知道的就是总线时钟,对于飞思卡尔单片机MC9S12G128而言,其时钟有下图所示:

如大多单片机那样,MC9S12G128单片机也有外部晶振和内部晶振,而总线时钟是经过各种分频和变频得到,总线时钟的设置,直接关系到定时器、串口波特率等,在这里选用的是外部晶振经过变换得到的总线时钟。


如下图所示,fbus为最后要得到的总线时钟频率,其等于fPLL/2,那么又要确定fPLL的频率,而fPLL跟fVCO以及分频有关,分频的在寄存器中中设置,一共5位。

而fVCO又可根据下图求得,fVCO跟fREF及倍频有关,倍频值SYNDIV可在寄存器中设置,一共6位。

最后,fREF可根据下图求得,其跟,fOSC和分频值REFDIV有关,fOSC是晶振频率,这里是用的外部晶振频率,REFDIV是可在寄存器中设置,一共4位。

到这里,我们就知道了总线时钟频率是怎么得到的,其初始化程序如下:


/********************************************************************

 

系统时钟配置参考表:

 

VCOCLK Frequency Ranges      VCOFRQ[1:0]

 

32MHz <= fVCO<= 48MHz            00

48MHz < fVCO<= 50MHz             01

Reserved                         10

Reserved                         11

 

REFCLK Frequency Ranges      REFFRQ[1:0]

(OSCE=1)

1MHz <= fREF <= 2MHz             00

2MHz < fREF <= 6MHz              01

6MHz < fREF <= 12MHz             10

fREF >12MHz                      11

 

 

 

If PLL has locked (LOCK=1)        fVCO = 2 × fREF × (SYNDIV + 1)

 

 

 

                                           fOSC            

 

If XOSCLCP is enabled (OSCE=1)    fREF= -------------

 

                                        (REFDIV + 1) 

 

                                                  

 

If XOSCLCP is disabled (OSCE=0)   fREF = fIRC1M

 

 

 

                                           fVCO

 

If PLL is locked (LOCK=1)         fPLL= -------------

 

                                       (POSTDIV + 1)

 

 

 

                                          fVCO

 

If PLL is not locked (LOCK=0)     fPLL= -------

 

                                           4

 

                                         

 

                                           fPLL

 

If PLL is selected (PLLSEL=1)     fbus= ----------

 

                                            2

 

***********************************************************************/

 

void SetBusClock()

 

{  

 

 

 

 CPMUPROT = 0x26;            //保护时钟配置寄存器 

 

 CPMUCLKS_PSTP = 0;          //禁用PLL 

 

 CPMUCLKS_PLLSEL = 1;        //选择PLL作为系统时钟源 

 

 CPMUOSC_OSCE = 1;           //外部晶振使能 

 

   

 

 CPMUSYNR = 0x07;           //fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)                       

 

 CPMUREFDIV = 0x01;         //16M:07,0F;32M:07,07;64M:07,03 

 

     

 

 CPMUPOSTDIV = 0x00;         // PLLCLOCK = VCO CLOCK / (POSTDIV + 1)  

 

                               

 

 _asm(nop); 

 

 _asm(nop); 

 

   

 

 CPMUPLL=0x10;               //锁相环调频启用,用以减少噪音 

 

     

 

 while(CPMUFLG_LOCK == 0);   //等待PLL稳定  

 

CPMUPROT = 0x00;            //关闭保护时钟                                    

 

}

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic542656.html

上一篇:飞思卡尔MC9S12G64串口发送接收驱动
下一篇:MC9S12G时钟配置

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MC9S12G128 SCI设置
以下代码SCI开启了接收中断。  /*************************************************************/  /*                        初始化SCI                          */  /********************
发表于 2021-07-30
freescale MC9S12G128 SCI,printf使用
; // PLLCLK:32M     BUSCLK:16M  //CPMUSYNR = 0x42; // PLLCLK:24M     BUSCLK:12M  CPMUSYNR = 0x01; // PLLCLK:16M    BUSCLK:8M  CPMUREFDIV = 0x81;//REFDIV基准分频器配置  #endif      CPMUPOSTDIV = 0x00;           // PLL
发表于 2021-07-21
freescale <font color='red'>MC9S12G128</font> SCI,printf使用
Freescale MC9S12G128 PLL,OSC
PLL OSC简述:S12CPMU Block Diagram:S12CPMU Synthesizer Register(CPMUSYNR)PLL相关主要寄存器:CPMUPROT:时钟配置寄存器保护Clock Configuration Registers Protection Bit — This bit protects the clock configuration registers fromaccidental overwrite (see list of affected registers above):Writing 0x26 to the CPMUPROT register clears the PROT bit
发表于 2021-07-21
Freescale <font color='red'>MC9S12G128</font> PLL,OSC
freescale MC9S12G128单片机概述
MC9S12G128MLL开发板实物图DBM下载器:飞翔科技DBM下载实物图:
发表于 2021-07-21
freescale <font color='red'>MC9S12G128</font>单片机概述
freescale MC9S12G128 中断代码实现方法
写法1:中断函数指明中断向量号:main.c#pragma CODE_SEG __NEAR_SEG NON_BANKEDinterrupt 中断向量号 void 中断服务函数名(void) {// 中断服务程序代码段}#pragma CODE_SEG DEFAULT中断向量号在mc9s12g128.h文件里有定义,如:/**************** interrupt vector numbers ****************/#define VectorNumber_Vportj 24U写法2:修改prm文件,在Project.prm文件声明中断函数:main.c:#pragma CODE_SEG __NEAR_SEG
发表于 2021-07-21
飞思卡尔s12x系列 pll设置
pll :Phase Locking Loop 在我使用的MC9S12XDP512 单片机中设置pll十分简单:CLKSEL = 0x00; //设置当前fBUS使用外部晶振PLLCTL = 0xe1; //设置进入pll设置模式//pll计算://fPLL= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1),// fBUS= fPLL/2//其中fOSC就是外部晶振的频率,fBUS是最后总线的频率SYNR = 0x01;REFDV = 0x01;PLLCTL = 0x60;asm NOP;asm NOP;asm NOP;while (0 == (CRGFLG & 0x08)); //JUDGE
发表于 2021-04-01
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved