F2812的时钟和控制系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

F2812的时钟和控制系统

众所周知,支撑我们身体四肢能够灵活运动的能量来源于心脏,正是心脏不停的有规律的跳动给身体的各个机能供血,我们才能去做任意我们想做的事情。如果我们的身体过度疲劳,或者感染了细菌病毒而生病了,这个时候就会有医生来给我们检查身体,并且进行治疗。其实DSP也一样,需要一个类似于心脏的模块来提供其正常运行的动力和节奏。在这一章里面,我们一起来学习F2812的“心脏”——F2812的振荡器、锁相环PLL和时钟机制。除此之外还要学习给DSP做“身体检查”,以维持其正常工作的看门狗模块。

1、振荡器OSC(Oscillator)和锁相环PLL(Phase Locked Logic)

为了能够让F2812能够按部就班的执行相应的代码,实现相应的功能,他需要不断的规律的时钟脉冲,而这一功能就由F2812内部的振荡器OSC和基于PLL 的时钟模块来实现。

让我们来看一下整体的图:

图1 2812芯片内的OSC和PLL模块

如上图所示,F2812上有基于PLL的时钟模块,为器件及各种外设提供时钟信号。锁相环中有4位倍频设置位,以此来提供各种速度的时钟信号。基于PLL 的时钟模块可以采用两种操作模式:

(1)内部振荡器:在PLL未被禁止的情况下,使用外部晶振给2812提供时钟信号,则必须使用X1/XCLKIN引脚和X2引脚,在这两引脚之间连接一个石英晶体,即外部晶振。

(2)外部时钟源:在PLL被禁止的情况下,旁路片内振荡器,由外部时钟源提供时钟信号,这时候讲外部振荡器的信号直接输入到X1/XCLKIN引脚上,此时X2引脚不使用。

外部XPLLDIS引脚可以选择系统的时钟源。当XPLLDIS为低电平时,系统直接采用时钟或晶振直接作为系统时钟;当XPLLDIS为高电平时,外部时钟经过

PLL倍频后,为系统提供时钟。系统可以通过锁相环控制寄存器来选择锁相环的工作模式和倍频的系数。

下面的表格列出了各种PLL的配置模式下,时钟输入信号XCLKIN和时钟模块输

锁相环PLL中有锁相环控制寄存器PLLCR,作用是用来选择锁相环的工作模式和倍频的系数。上面提到过锁相环中有4位倍频设置位DIV,即为0~3位,往里面写入0000~1010用来确定倍频的系数,其他为保留。锁相环控制寄存器

在PLL模式中,平常使用的是PLL使能模式,从图1可以看到,通常采用30M的晶振来给2812提供时基。当PLLCR的DIV位被置为最大值1010的时候,CPU的时钟将达到150MHz,是2812所能支持的最大时钟频率,这也是为什么

2、2812芯片中各种时钟信号的产生情况

2812芯片内各种时钟信号的产生情况如图2所示。CLKIN是经过PLL模块后送往CPU的时钟信号,进过CPU分发,作为SYSCLKOUT送至各个外设。因此,SYSCLKOUT=CLKIN。

图2 2812芯片内各种时钟信号的产生情况

我们在使用2812开发的时候,通常会用到一些外设,例如SCI,EV,AD 等,要使得这些外设工作,首先的就是向其提供时钟信号。因此,我们再系统初始化的时候,就需要对使用到的各个外设的时钟进行使能,在这里和时钟使能相关的寄存器是外设时钟控制寄存器PCLKCR。

PCLKCR控制各种时钟的工作状态,使能或禁止相关外设时钟,而PCLKCR

所需要的各个外设的时钟进行使能的呢?假设要做的项目中用到了EV A、SCIB、SPI、AD这4个外设,那么就需要按照下面的程序对这4个外设进行时钟的使

从图2中也能看到,SYSCLKOUT信号经过低速外设时钟预定标寄存器LOSPCP(取值范围0~7,即000~111)变成了LSPCLK,提供给低速外设SCIA、SCIB、SPI、McBSP;SYSCLKOUT信号经过高速外设时钟预定标寄存器HISPCP (取值范围0~7,即000~111)变成了HSPCLK,提供给高速外设EV A、EVB、

设自己的时钟预定标,如果外设自己的时钟预定标位的值为0的话,则外设实际

HSPCLK的值大?也就是说提供给低速外设的时钟频率反而比提供给高速外设的时钟频率来的快?从上面的LSPCLK和HSPCLK的计算公式可以看出,这两个时钟信号的频率是独立无关的,各自分别取决于LOSPCP或者HISPCP的值,和其他因素没有关系。当我们给LOSPCP寄存器所赋的值小于给HISPCP寄存器所赋的值时,LOSPCP的值就会大于HSPCP的值。虽然这完全取决于我们对于寄存器的初始化,但是一般情况下,也不会让这样的情况出现的,因为低速外设所需要的时钟毕竟要比高速外设所需要的时钟慢些,否则就没有必要区分高低速了,当然这些定义也都是相对而言的。

3、看门狗(Watch Dog)

在学习DSP看门狗之前,先让我们来了解一下MCU(Microprocessor Control Unit 微处理器单元)中看门狗的原理,以便我们能更好的理解DSP中看门狗,

图3 看门狗功能框图

2812中的看门狗原理和上面讲诉的MCU的看门狗原理是类似的,其作用是为DSP的运行情况进行“把脉”,一旦发现程序跑飞或者状态不正常便立即使DSP复位。

为了实现看门狗的各项功能,需要准备设置其内部的3个功能寄存器,而这3个功能寄存器分别是看门狗计数寄存器WDCNTR、看门狗复位寄存器WDKEY、看门狗控制寄存器WDCR。

256时,看门狗模块就会产生一个输出脉冲,脉冲宽度为512个振荡器时钟周期。

可能有疑问为什么要产生一个512倍振荡器时钟周期的宽脉冲信号?因为需要是内核复位的信号和要唤醒处理器的中断信号的有效时间远大于振荡器的时钟周期。

为了防止看门狗加法计数器WDCNTR溢出,不想产生脉冲信号,这里我们通常可以采用两种方法:

(1)禁止看门狗,也即为屏蔽计数器,使得计数器WDCNTR无效。则下面我

能看门狗。跟着我们介绍其他功能位的作用:看门狗复位状态标识位WDFLAG,如果置为1,则表示看门狗复位满足了复位条件;如果置为0,则表示外部器件或上电复位条件。WDCHK必须置为101,因为写其他任何值都会引起器件内核的复位,不过这一条件的实现要在看门狗已经使能的情况下。最后看门狗预定标器WDPS,这里跟上面所学到的高低速预定标器是相同的道理,作用是配置看门

(2)定期进行“喂狗”,即通过软件周期性地向看门狗复位寄存器中WDKEY 位写进“0x55+0xAA”,紧跟着0x55写入0xAA能够清除WDCNTR,写任何其

4、如何写系统初始化函数

要使得2812能够工作,我们在上电开始的时候就需要对2812进行系统初始化,以提供其正常运行的基本条件,例如分配时钟信号。

相关文档
最新文档