最近在公司做项目,用到飞思卡尔S12系列芯片,为了让自己养成良好习惯,以后每做一部分,都会总结出来,方便自己和他人。

今天讲讲飞思卡尔锁存器部分。

CRG时钟合成寄存器(SYNR

读:任何时刻;写:除CLKSEL 寄存器中的PLLSEL=1时的任何时刻。

VCOFRQ1,VCOFRQ0: 这2位用于确定压控振荡器VCO的增益以获得频率最佳稳定性并锁定。为了IPLL正常工作,必须根据表2-7中的实际VCO时钟频率配置这2位值。

PLL时钟频率以及由PLL产生的MCU总线时钟频率由下列公式计算:

式中,SYNDIV的值由SYNR寄存器中的BIT5~BIT0确定,REFDIV值由REFDV寄存器中的BIT5~BIT0确定,POSTDIV值由POSTDIV寄存器中的BIT4~BIT0确定。

2.6.2  CRG时钟参考分频寄存器(REFDV

读:任何时刻;写:除CLKSEL 寄存器中的PLLSEL=1时的任何时刻。

REFFRQ1,REFFRQ0:这2位用于配置PLL内部滤波器以获得频率最佳稳定性并锁定。为了IPLL正常工作,必须根据表2-8中的实际REF时钟频率设置这2位值。

REFDV5~REFDV0:这6位用于确定前述公式中的REFDV值。

2.6.3  CRG时钟后分频寄存器(POSTDIV

读:任何时刻;写:除CLKSEL寄存器中的PLLSEL=1时的任何时刻。

如果POSTDIV=0x00,则fPLL= fVCO。如果POSTDIV≠0,则PLLCLK频率fPLL和VCOCLK频率fVCO之间关系由下列公式计算:

fPLL = fVCO/(2×POSTDIV)

POSTDIV4~POSTDIV0:这5位用于确定公式中的POSTDIV值。

2.6.4  CRG标志寄存器(CRGFLG

读:任何时刻;写:参考每位各自的写条件。

RTIF:实时中断标志位。在实时时钟周期最后,置位RTIF。该位通过写1清除,写0无效。如果CRGINT寄存器中的实时中断使能(RTIE=1),则RTIF置位将产生中断请求。

•  0表示未发生RTI超时;

•  1表示已发生RTI超时。

PORF:上电复位标志位。当上电复位发生时, 置位PORF。该位通过写1清除,写0无效。

•  0表示上电复位未发生;

•  1表示上电复位已发生。

2.6.5  CRG时钟选择寄存器(CLKSEL

读:任何时刻;写:参考每位各自的写条件。

以下仅介绍和PLL相关位,其他位请读者参考MC9S12XS128数据手册。

PLLSEL:PLL选择位。任何时刻可写。当LOCK=0时,该位写1无效,这能够防止选择不稳定的PLLCLK作为系统时钟。当MCU进入自时钟模式、停止模式或者PLLWAI置位且进入等待模式时,则PLLSEL位清除。

•  0表示系统时钟由OSCCLK分频(fBUS = fOSC/2);

•  1表示系统时钟由PLLCLK分频(fBUS = fPLL/2)。

PLLWAI:等待模式下PLL停止控制位。任何时刻可写。如果PLLWAI置位,进入等待模式前,CRG将清除PLLSEL位;在等待模式期间,PLLON位保持置位,但IPLL模块断电。退出等待模式,如果使用PLL时钟,需要软件置位PLLSEL。

•  0表示等待模式下IPLL继续工作;

•  1表示等待模式下IPLL停止工作。

2.6.6  CRG IPLL控制寄存器(PLLCTL

读:任何时刻;写:参考每位各自的写条件。

以下仅介绍和PLL相关位,其他位请读者参考MC9S12XS128数据手册。

CME:时钟监控使能位。除SCM=1时的任何时刻可写。

•  0表示禁止时钟监控功能;

•  1表示允许时钟监控功能。时钟变慢或停止将引起时钟监控复位或自时钟模式。

PLLON:锁相环启动位。除PLLSEL=1时的任何时刻可写。PLLON置位启动IPLL电路。自时钟模式下,启动IPLL,读取PLLON位为最近一次写入值。

•  0表示关闭IPLL;

•  1表示启动IPLL。

FM1,FM0:IPLL频率调制使能位。除PLLSEL=1时的任何时刻可写。这2位允许选择VCOCLK的附加频率调制模块以降低VCO噪声。调制频率是fREF除以16。表2-9列出频率调制幅值选择。

SCME:自时钟模式使能位。正常模式下可以写一次,特殊模式下任何时刻可写。当工作在自时钟模式下(SCM=1)时,SCME不能被清除。

•  0表示检测到晶振时钟失效 ,引起时钟监控复位;

•  1表示检测到晶振时钟失效,MCU进入自时钟模式。

2.6.7  CRG中断使能寄存器(CRGINT

读:任何时刻;写:任何时刻。

RTIE:实时中断(RTI)使能位。该位使能允许RTIF产生中断请求。

•  0表示禁止RTI中断请求;

•  1表示允许RTIF中断请求。

LOCKIE:锁定中断(LOCKI)使能位。该位使能允许LOCKIF产生中断请求。

•  0表示禁止LOCKI中断请求;

•  1表示允许LOCKIF中断请求。

SCMIE:自时钟模式中断(SCMI)使能位。该位使能允许SCMIF产生中断请求。

•  0表示禁止SCMI中断请求;

•  1表示允许SCMIF中断请求。

在程序中配置锁相环的步骤如下:
1、禁止总中断;
2、寄存器CLKSEL的第七位置0,即CLKSEL_PLLSEL=0。选择时钟源为外部晶振OSCCLK,在PLL程序执行前,内部总线频率为OSCCLK/2.
   CLKSEL_PLLSEL=0时,系统时钟由外部晶振直接提供,系统内部总线频率=OSCCLK/2(OSCCLK为外部晶振频率)。
   CLKSEL_PLLSEL=1时,系统时钟由锁相环提供,此时系统内部总线频率=PLLCLK/2 (PLLCLK为锁相环倍频后的频率)。                
3、禁止锁相环PLL,即PLLCTL_PLLON=0。当PLLCTL_PLLON=0时,关闭PLL电路。当PLLCTL_PLLON=1时,打开PLL电路。                 
4、根据想要的时钟频率设置SYNR和REFDV两个寄存器。SYNR和REFDV两个寄存器专用于锁相环时钟PLLCLK的频率计算
   计算公式是: PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)  
   其中,PLLCLK为PLL模块输出的时钟频率;OSCCLK为晶振频率;SYNR、REFDV分别为寄存器SYNR、REFDV中的值。
   这两个寄存器只有在PLLSEL=0时才能够写入(这里就是第二步的设置原因所在了)。 
5、打开PLL,即PLLCTL_PLLON=1。                 
6、CRGFLG_LOCK位,确定PLL是否稳定。
   当锁相环PLL电路输出的频率达到目标频率的足够小的误差范围内时,LOCK位置1,此时说明PLLCLK已经稳定,可以作为系统的时钟了。该位在正常情况下为只读位。
7、PLLCLK稳定后,允许锁相环时钟源PLLCLK为系统提供时钟,即CLKSEL_PLLSEL=1。

/*
********************************************************************************
* File:    mcu.c
* By  :    Clark
* Version:   V1.0
* Date:     2018.10.17
* History: 2018.10.17  V1.0      1.the base version         初始版本
********************************************************************************
* 软件版本: CodeWarrior IDE version 5.9.0
* 芯片: MC9S12XET256Maa
* 晶振:  8MHZ
* 锁相环时钟: 16MHZ
* 总线时钟:8.000MHz
* 备注: fbus是总线频率,fpll是锁相环频率,fvco是压控振荡器频率,fosc是晶振频率if(PLLSEL==0) fbus=fosc/2;if(PLLSEL==1) fbus=fpll/2;    fpll=fosc* (SYNDIV+1)/(POSTDIV*(REFDIV+1));fpll=fvco/(2*POSTDIV);fvco=2*fosc* (SYNDIV+1)/(REFDIV+1);若POSTDIV=0,fpll=fvco,若POSTDIV!=0, fpll=fvco/(2*POSTDIV);从板晶振为8M,即fosc=8M,设置总线时钟频率fbus=8M, fpll=16M,fvco=32M,fref=8M
********************************************************************************
*/#include "derivative.h" /*包括外围声明 */
#include "mcu.h"  //包含除锁相环之外的其他函数声明等,与本函数无关/*
********************************************************************************
*                                                        MCU_BusClock_Init
* 输入:无
* 输出:无
* 时钟源:外部晶振8MHz
* 备注: fbus是总线频率,fpll是锁相环频率,fvco是压控振荡器频率,fosc是晶振频率if(PLLSEL==0) fbus=fosc/2;if(PLLSEL==1) fbus=fpll/2;    fpll=fosc* (SYNDIV+1)/(POSTDIV*(REFDIV+1));fpll=fvco/(2*POSTDIV);fvco=2*fosc* (SYNDIV+1)/(REFDIV+1);若POSTDIV=0,fpll=fvco,若POSTDIV!=0, fpll=fvco/(2*POSTDIV);从板晶振为8M,即fosc=8M,设置总线时钟频率fbus=8M, fpll=16M,fvco=32M,fref=8M
********************************************************************************
*/
void MCU_BusClock_Init(void)
{  CLKSEL=0x00;          //关锁相环PLLCTL_PLLON=1;       //开启锁相环// 配置#1 fosc:8MHz  fref:8MHz  fvco:32MHz fpll:16MHz fbus = 8MHz;SYNR = 0x01;         //SYNDIV=1REFDV = 0x80;         //fref=8MHZ,REFDIV=0,POSTDIV = 0x01;        //POSTDIV=1;// 间隔两个时钟周期,等待PLL稳定_asm(nop);       //空指令,等待PLL稳定_asm(nop);// 开启PLLwhile( CRGFLG_LOCK ==0 ) ;    // 等待锁相环稳定CLKSEL_PLLSEL=1;        //PLL启用}

飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)锁存器资料总结和分享相关推荐

  1. 飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)中断PIT资料总结和分享

    核心内容就在这张图上: 相信大家都明白总线的概念,在图中可以看到6个定时器模块,Micro Timer 0.Micro Timer 1.Timer 0.Timer 1.Timer 2.Timer 3, ...

  2. 关于飞思卡尔S12系列单片机SPI通信MODRR配置

    MODRR为模块路径选择寄存器,作为CAN0/4与SPI0/1/2映射引脚. 例如选择CAN0为PM0/1引脚,则配置MODRR_MODRR0&1=0.当MODRR_MODRR4=0时,SPI ...

  3. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置

    Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到 ...

  4. 飞思卡尔imx7 html5,i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor...

    i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor Freescale飞思卡尔即将于7月份发布全新的基于ARM Cor ...

  5. ftm模块linux驱动,飞思卡尔k系列_ftm模块详解.doc

    飞思卡尔k系列_ftm模块详解 1.5FTM模块1.5.1 FTM模块简介FTM模块是一个多功能定时器模块,主要功能有,PWM输出.输入捕捉.输出比较.定时中断.脉冲加减计数.脉冲周期脉宽测量.在K1 ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...

  7. 飞思卡尔XS128系列(三) PIT

    刚报名参加了第五届飞思卡尔智能车竞赛的时候,知道要用飞思卡尔的16位单片机,当时也没在意,就随便买了本这方面的书,记得书名是:<基于HCS12的嵌入式系统设计>,我是因为这本书各模块后面的 ...

  8. 飞思卡尔MKL系列单片机用jlink烧写程序出现的Kinetis (connect): Timeout while halting CPU. CPU does not stop.问题

    最近用Jlink烧写飞思卡尔MKL16Z128单片机时发现经常出现不能连接成功的情况,用的是SWD接口,排查了好久后来发现问题在单片机的RESET脚上,因为之前用SWD接口的时候只接4线(SWD.SC ...

  9. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(三)之Flash控制器指令执行

    前面我们介绍了Flash主要的几个寄存器,如果还有其他的疑问可以再返回去看看或者直接查阅S12系列单片机的手册中相关的内容.这一节我将介绍Flash控制器指令执行的过程,并举出相关的例子,希望能够起到 ...

最新文章

  1. python 非线性回归_机器学习入门之菜鸟之路——机器学习之非线性回归个人理解及python实现...
  2. 预产期计算器在线计算生男生女计算机,预产期计算器生男生女的四种算法
  3. matlab中的cellstr的用法,matlab中的cell array, cellstr()和char()的用法
  4. Android 使用PDF.js浏览pdf
  5. sklearn自学指南(part18)--多项式回归-用基函数扩展线性模型
  6. “三行代码,确实需要耗上一整天!”
  7. AcWing 1922. 懒惰的牛(前缀和 or 双指针)
  8. 难道我们就是那0.0000001%
  9. Three.js视频教程
  10. Python获取国内股票数据下载数据api接口
  11. java 纯真ip数据库_纯真IP数据库格式读取方法(JAVA/PHP/Python)
  12. iOS原生二维码扫描白屏问题
  13. ICCV2021会议论文列表(可下载)
  14. 遍历vad二叉树来遍历进程里的模块
  15. 【代码实践】使用CLIP做一些多模态的事情
  16. 统计推断(一) Hypothesis Test
  17. Spring Boot入门到精通(超详细)
  18. (六)区块的生成、验证及挖矿
  19. Tensorflow③ Keras的LSTM和TF的LSTM实现的源码剖析
  20. HashMap扩容全过程

热门文章

  1. OneNote 2007 无法启动的问题
  2. STM32驱动W5500动态分配IP
  3. 一文深度剖析扩散模型究竟学到了什么?
  4. 概率论与数理统计(一)习题
  5. 很多计算机资料高速下载,有目录(转)
  6. 字符编码的产生缘由及发展
  7. 《大话设计模式》总结 (更新ing)
  8. 计算机毕业设计springboot晋中学院失物招领系统的设计与实现unst3源码+系统+程序+lw文档+部署
  9. matlab改consolas字体+微软雅黑的完美解决方法
  10. Linux内核-进程管理