花了一天整理和总结,有表达上或者技术理解上错误,希望指正。
联系邮箱lygofly@163.com

PLL作用就是对外部时钟进行倍频,降低产生高频时钟信号的成本。但是倍频配置的时候,需要在特定的条件下更改,因此需要检测PLL工作的各种状态信号,因此PLL有两个配置相关寄存器,PLL状态寄存器PLLSTS和PLL控制寄存器PLLCR。通过对状态寄存器PLLSTS的判断,可以判断PLL的工作状态,在特定的工作状态下,对PLL控制寄存器PLLCR进行配置,最后产生合适的时钟信号CLKIN输入给CPU,完成整个过程的倍频。本文详细介绍了PLL模块,并对初始化过程和初始化代码进行了分析。

1.OSC和PLL模块

OSC和PLL模块方框图如图1所示。

基于 PLL 的时钟模块提供两种操作模式:
• 晶振操作模式:允许使用一个外部晶振/谐振器来提供到器件的时基。
• 外部时钟源操作模式:允许旁通内部振荡器被,时钟由一个 X1 或者 XCLKIN 引脚上的外部时钟源输入生成。

三种输入时钟配置如图2、图3、图4所示

30MHz 外部石英晶振的典型技术规范如下:
• 基本模式、 并联谐振
• CL( 负载电容) =12pF
• CL1=CL2=24pF
• C并联=6pF
• ESR 范围 = 25 至 40Ω

2.基于 PLL 的时钟模块

TMS320F23885上有一个片载、基于PLL倍频器的时钟模块,它提供所有的时钟信号以及实现对低功耗模式的控制。

PLL作为DSP的时钟重要组成部分,它除了提高系统内部SYSCLKOUT的频率之外,还有一个重要的用途就是监视外部时钟是不是很好的为DSP内部提供系统时钟。
如果PLL处于使能状态,需要监视PPLSTS寄存器中的MCLKSTS位的状态。如果MCLKSTS被置位,则软件要采集恰当的措施保证系统不出现事故,该措施包括使系统停机、复位等。

与PLL配置相关的寄存器有两个:PLL状态寄存器PLLSTS和PLL控制寄存器PLLCR,两个寄存器具体的讲解参见第3节。

两个寄存器中最关键的位域分别为 2位的PLLSTS[DIVSEL]和4位的PLLCR[DIV]。
PLLSTS[DIVSEL]选择CPU时钟的分频系数(/4,/2,/1),PLLCR[DIV] 选择CPU时钟的倍频系数(*1,*2,……,*10)。

比如TMS320F23885最大工作时钟为150MHz,通常外部晶振频率为30MHz,先将30MHz进行10倍频变成300MHz,再对300MHz进行2分频得到150MHz的时钟。(官方例程里产生150MHz的方式)

PLL的设置如表1所示。

分频系数的选择如表2所示。

PLL可能的配置模式如表3所示。

注:
(1)默认情况下,分频系数为4
(2)在改变PLLCR[DIV]倍频系数前,必须满足两个条件:

  • PLLSTS[DIVSEL]必须为0,而PLLSTS[DIVSEL]改变时,PLL必须完成锁定状态,即PLLSTS[PLLOCKS]必须为1
  • DSP不能工作在limp mode下,即PLLSTS[MCLKSTS]必须为0

(3)一旦PLL稳定之后,会锁定在新的频率下工作,PLLSTS[PLLLOCKS] = 1,可以改变PLLSTS[DIVSEL]。
(4)在写入 PLLCR 寄存器之前, 安全装置模块(看门狗)应该被禁用。
(5)在 PLL 模块稳定后,重新启用安全装置模块(看门狗),重启的时间为 131072 个 OSCCLK 周期。
(6)在 PLL (VCOCLK) 的输出频率不超过300MHz 时候,选择输入时钟和 PLLCR[DIV] 位。
(7)当PLL激活时,即PLL不是旁路(PLLCR[DIV]!=0),必须需要分频器,即分频系数不能为1(PLLSTS[DIVSEL]!=3),这是因为确保反馈给内核的时钟具有正确的占空比。
(8)只有外部复位信号RST和安全装置(看门狗)产生复位信号时,PLLCR和PLLSTS才会复位到默认值,而调试器和Missing clock detect logic产生的复位信号不会使两者复位到默认值。
(9)PLLCR和PLLSTS是受ELLOW保护的。
特别注意:倍频时一定要分频,不倍频时才允许不分频。

3.PLL配置相关的寄存器

PLL控制寄存器PLLCR如表4所示。

PLL状态寄存器PLLSTS如表5所示。

PLLSTS各位的描述如表6所示

注:跛行模式(limp mode)系统出现问题的时候,控制逻辑能够根据对应的条件进行判断,安排另外的一套控制电平,使得必须控制的负载按照既定的逻辑运行。

4.PLL的初始化

PLL初始化流程图如图2所示。

根据流程图,大致可以描述PLL的初始化过程为:
(1)确保存在OSCCLK,系统能正常工作,即判断PLLSTS[MCLKSTS]==1?
(2)改变PLLCR[DIV]前,确保PLLSTS[DIVSEL]==0
(3)改变PLLCR[DIV]前,禁用主振荡器故障检测逻辑模块,即PLLCR[MCLKOFF]=1
(4)根据需要,改变PLLCR[DIV]
(5)判断PLL是否稳定锁定,即PLLSTS[PLLLOCKS]==1?
(6)使能主振荡器故障检测逻辑模块,即PLLCR[MCLKOFF]=0
(7)根据需要,改变PLLSTS[DIVSEL]

PLL初始化的代码如下(来自官方例程,主要对其注释分析和讲解)。

/** 函数名称:InitPll* 函数输入:倍频参数val,分频参数divsel*            val取值为0到10,表示倍频数;divsel取值0到4,0和1表示4分频,2表示2分频,3表示不分频* 函数输出:无* 函数调用:InitPll(10,2);* 先将外部时钟倍频10倍,在分频1/2,最后产生的时钟CLKIN输入CPU28x*/
void InitPll(unsigned short div, unsigned short divsel)
{// 确保PLL不是工作在limp mode下,即有外部时钟进入PLLif (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0){//检测到无外部时钟,软件要采集恰当的措施保证系统不出现事故,该措施包括//使系统停机、复位等//用适合的函数替换下面一行// SystemShutdown(); function.asm("        ESTOP0");}// PLLCR从0x0000改变前,PLLSTS[DIVSEL]必须为0// 外部RST复位信号会使PLLSTS[DIVSEL]复位// 此时分频为1/4if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0){EALLOW;SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;EDIS;}// 前面条件都满足后,可以改变PLLCR[DIV]if (SysCtrlRegs.PLLCR.bit.DIV != val){EALLOW;// 在设置PLLCR[DIV]前,要禁用主振荡器检测逻辑//Missing clock detect logicSysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;SysCtrlRegs.PLLCR.bit.DIV = div;EDIS;//等待PLL稳定且处于锁定状态,即PLLSTS[LOCKS]置位//等待稳定的时间可能略长,需要禁用看门狗或者循环喂狗//屏蔽注释,禁用看门够DisableDog();while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1){//屏蔽注释,喂狗// ServiceDog();}EALLOW;SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;EDIS;}// 如果需要分频1/2if((divsel == 1)||(divsel == 2)){EALLOW;SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel;EDIS;}//注意:下面代码只有在PLL是旁路或者关闭模式时,才可被执行,其他模式禁止。//倍频时一定要分频,不倍频时才允许不分频//如果需要切换分频到1/1// * 首先从默认1/4分频切换到1/2分频,让电源稳定//   稳定所需要的时间依赖于系统运行速度,此处延时50us只是作为一个特例// * 稳定后,再切换到1/1if(divsel == 3){EALLOW;SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;DELAY_US(50L);SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;EDIS;}
}

5.本章小结

本章介绍OSC和PLL模块,阐述了二种外部时钟输入的操作模式,然后对外部时钟进行倍频分析,即PLL模块,对PLL模块的寄存器和操作进行了详细的分析,最后给出了PLL初始化代码并对代码进行了注释分析。对基本设置特别要强调的是PLL倍频时一定要分频,不倍频时才允许不分频。

参考文献

官方资料《TMS320x2833x, 2823x System Control and Interrupts》
http://www.ti.com.cn/cn/lit/ug/sprufb0d/sprufb0d.pdf

TMS320F28335时钟(1) -----PLL倍频器的初始化详解相关推荐

  1. 初始化模型参数 python_pytorch 网络参数 weight bias 初始化详解_python_脚本之家

    权重初始化对于训练神经网络至关重要,好的初始化权重可以有效的避免梯度消失等问题的发生. 在pytorch的使用过程中有几种权重初始化的方法供大家参考. 注意:第一种方法不推荐.尽量使用后两种方法. # ...

  2. 电机标幺化、PI标幺化、锁相环PLL标幺化 详解电机模型相关标幺化处理

    电机标幺化.PI标幺化.锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理 观测器中PLL锁相环的标幺化处理 采样时间处理 这是文档,不是代码,文档中的代码均为引用举例子的 ...

  3. 电机标幺化、PI标幺化、锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理

    电机标幺化.PI标幺化.锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理 观测器中PLL锁相环的标幺化处理 采样时间处理 这是文档,不是代码,文档中的代码均为引用举例子的 ...

  4. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  5. RT1064学习笔记__函数初始化详解

    函数详解 一. systick_delay_ms() 毫秒级延时函数 二.zf_gpio.c函数 ① gpio_init() GPIO初始化 ② gpio_set() GPIO输出设置 ③ gpio_ ...

  6. App启动时Application初始化详解

    参考博文: http://www.jianshu.com/p/6037f6fda285 App的ActivityThread与Application详解 一个App的程序入口到底是什么? 是Activ ...

  7. 多功能时钟电路的设计框图_详解通用串行总线USB,工作原理、接口电路设计

    USB 的英文全称为 Universal Serial Bus,中文含义是通用串行总线,它是一种快速的,双向的,同步传输的廉价的并可以进行热拔插的串行接口.USB 接口使用方便,它可以连接多个不同的设 ...

  8. 十一、CSS初始化详解

    CSS初始化 不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容性,我们需要对CSS初始化. 简单理解:CSS初始化是指重设浏览器的样式.(也称为CSS ...

  9. php语言指针的初始化定义,指针变量的初始化,C语言指针变量初始化详解

    本节来解决如何给一个指针变量初始化.即怎样使一个指针变量指向另一个变量. 前面章节中的某些程序实际上已经使用了,即可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向该变量.比如: int ...

最新文章

  1. springboot项目输入打印日志文件到本地
  2. centos7 利用 crontab 执行 定时任务 计划任务
  3. 微服务资源springboot、springcloud、docker、dubbo项目实战等倾心分享
  4. frida hook so层方法大全
  5. android google map 标记,android google map添加标记和TipView
  6. ​Java面向对象的概念整理
  7. 树-堆结构练习——合并果子之哈夫曼树(是最优二叉树题目的缩影)
  8. TP笔记1、TP框架概述
  9. Wework和优客工场争相上市,共享办公第一股风云再起
  10. easyui datagrid checkbox使用
  11. 【微博简易爬虫】Python获取指定微博用户的发布文本
  12. 操作系统进程完成时间,周转时间,带权周转时间, 平均周转时间, 带权平均周转时间计算
  13. 自定义控件三部曲之绘图篇(十七)——为Bitmap添加阴影并封装控件
  14. 我用Python爬取了豆瓣影评,成功后居然发现了一个惊人的秘密.........
  15. 切比雪夫不等式例题讲解_排序不等式,切比雪夫不等式及伯努利不等式
  16. Problem B – Buggy ICPC——思维,找规律
  17. signature=fc7ecc5076a2f28da44d79a455e941f3,Secure efficient proxy blind signature schemes based DLP
  18. 税收完税证明模板图片_税收完税证明模板下载_税收完税证明模板设计素材
  19. python生成的图片保存成为pdf_python将图像保存为pdf及图片
  20. “马导”怒怼“小鲜肉”,当马儿遇到配音,短视频内容让人捧腹

热门文章

  1. 数据结构与算法课程设计——C语言《职员薪资查询系统》
  2. 关于可拓学-新兴的应用学科
  3. XML介绍之XML的语法与元素
  4. 正向代理与反向代理(squid)
  5. 电脑上的计算机教学反思,电脑网络教学反思
  6. mac使用Sourcetree托管代码流程
  7. note3+5.0+Android软件正在升级,波兰先行!三星为Note4推送Android 5.0升级
  8. 测试-1月22日--200集学完了
  9. Python大牛带你实现12306全自动抢票,学完后春运回家抢票无忧
  10. table.bootstrapTable() 之基本使用方法