F2812的时钟和控制系统.docx

上传人:b****8 文档编号:30478989 上传时间:2023-08-15 格式:DOCX 页数:9 大小:22.90KB
下载 相关 举报
F2812的时钟和控制系统.docx_第1页
第1页 / 共9页
F2812的时钟和控制系统.docx_第2页
第2页 / 共9页
F2812的时钟和控制系统.docx_第3页
第3页 / 共9页
F2812的时钟和控制系统.docx_第4页
第4页 / 共9页
F2812的时钟和控制系统.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

F2812的时钟和控制系统.docx

《F2812的时钟和控制系统.docx》由会员分享,可在线阅读,更多相关《F2812的时钟和控制系统.docx(9页珍藏版)》请在冰豆网上搜索。

F2812的时钟和控制系统.docx

F2812的时钟和控制系统

F2812的时钟和控制系统

众所周知,支撑我们身体四肢能够灵活运动的能量来源于心脏,正是心脏不停的有规律的跳动给身体的各个机能供血,我们才能去做任意我们想做的事情。

如果我们的身体过度疲劳,或者感染了细菌病毒而生病了,这个时候就会有医生来给我们检查身体,并且进展治疗。

其实DSP也一样,需要一个类似于心脏的模块来提供其正常运行的动力和节奏。

在这一章里面,我们一起来学习F2812的“心脏〞——F2812的振荡器、锁相环PLL和时钟机制。

除此之外还要学习给DSP做“身体检查〞,以维持其正常工作的看门狗模块。

1、振荡器OSC〔Oscillator〕和锁相环PLL〔PhaseLockedLogic〕

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

在这里简单的介绍一下终究振荡器OSC和锁相环PLL是什么:

振荡器OSC:

一种能量转换装置,将直流电能转换为具有一定频率的交流电能。

锁相环PLL:

锁相环也叫一样步逻辑,用途是在收、发通信双方建立载波同步或位同步。

因为它的工作过程是一个自动频率〔相位〕调整的闭合环路,所以叫环。

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

图12812芯片的OSC和PLL模块

如上图所示,F2812上有基于PLL的时钟模块,为器件及各种外设提供时钟信号。

锁相环中有4位倍频设置位,以此来提供各种速度的时钟信号。

基于PLL的时钟模块可以采用两种操作模式:

〔1〕部振荡器:

在PLL未被制止的情况下,使用外部晶振给2812提供时钟信号,则必须使用*1/*CLKIN引脚和*2引脚,在这两引脚之间连接一个石英晶体,即外部晶振。

〔2〕外部时钟源:

在PLL被制止的情况下,旁路片振荡器,由外部时钟源提供时钟信号,这时候讲外部振荡器的信号直接输入到*1/*CLKIN引脚上,此时*2引脚不使用。

外部

引脚可以选择系统的时钟源。

为低电平时,系统直接采用时钟或晶振直接作为系统时钟;当

为高电平时,外部时钟经过PLL倍频后,为系统提供时钟。

系统可以通过锁相环控制存放器来选择锁相环的工作模式和倍频的系数。

下面的表格列出了各种PLL的配置模式下,时钟输入信号*CLKIN和时钟模块输出信号,即送至CPU的信号CLKIN之间的关系:

PLL模块

功能描述

CLKIN

PLL被制止

上电复位时如果

引脚是低电平,则PLL完全被制止。

此时,输入CPU的时钟是由外部振荡器直接通过*1/*CLKIN引脚输入的信号。

*CLKIN

PLL旁路

如果PLL未处于不使能的状态,上电默认的PLL配置〔PLLCR的值为0〕。

PLL自身被旁路,从*1/*CLKIN引脚输入的时钟信号先除以2,然后再送去CPU。

*CLKIN/2

PLL使能

通过给PLLCR存放器写一个不为0的值来实现PLL的使能,时钟信号需要进入PLL模块进展n倍频,然后再除以2,最后送至CPU。

〔*CLKIN*n〕/2

锁相环PLL中有锁相环控制存放器PLLCR,作用是用来选择锁相环的工作模式和倍频的系数。

上面提到过锁相环中有4位倍频设置位DIV,即为0~3位,往里面写入0000~1010用来确定倍频的系数,其他为保存。

锁相环控制存放器PLLCR如下:

15430

保存

DIV

在PLL模式中,平常使用的是PLL使能模式,从图1可以看到,通常采用30M的晶振来给2812提供时基。

当PLLCR的DIV位被置为最大值1010的时候,CPU的时钟将到达150MHz,是2812所能支持的最大时钟频率,这也是为什么我们会选用30M晶振的原因。

时钟频率具体的计算如下所示:

晶振为30M,PLLCR的DIV位被置为1010时的时钟频率

CLKIN=〔OSCLKIN*10〕/2=〔30M*10〕/2=150MHz

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

2812芯片各种时钟信号的产生情况如图2所示。

CLKIN是经过PLL模块后送往CPU的时钟信号,进过CPU分发,作为SYSCLKOUT送至各个外设。

因此,SYSCLKOUT=CLKIN。

图22812芯片各种时钟信号的产生情况

我们在使用2812开发的时候,通常会用到一些外设,例如SCI,EV,AD等,要使得这些外设工作,首先的就是向其提供时钟信号。

因此,我们再系统初始化的时候,就需要对使用到的各个外设的时钟进展使能,在这里和时钟使能相关的存放器是外设时钟控制存放器PCLKCR。

PCLKCR控制各种时钟的工作状态,使能或制止相关外设时钟,而PCLKCR各位的分配如下所示:

1514131211109

保存

ECANENCLK

保存

MCBSPENCLK

SCIBENCLK

SCIAENCLK

保存

8743210

SPIENCLK

保存

ADCENCLK

保存

EVBENCLK

EVAENCLK

对PCLKCR中各种外设时钟有了根本的了解后,则终究是如何对工程中所需要的各个外设的时钟进展使能的呢?

假设要做的工程中用到了EVA、SCIB、SPI、AD这4个外设,则就需要按照下面的程序对这4个外设进展时钟的使能。

使能外设时钟

ENCLK=1;

SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;

SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;

SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;

从图2中也能看到,SYSCLKOUT信号经过低速外设时钟预定标存放器LOSPCP〔取值围0~7,即000~111〕变成了LSPCLK,提供应低速外设SCIA、SCIB、SPI、McBSP;SYSCLKOUT信号经过高速外设时钟预定标存放器HISPCP〔取值围0~7,即000~111〕变成了HSPCLK,提供应高速外设EVA、EVB、ADC。

他们各位的分配如下:

高速外设时钟设置存放器HISPCP

15320

保存

HSPCLK

低速外设时钟设置存放器LOSPCP

15320

保存

LSPCLK

在各个外设实际使用时钟的时候,LSPCLK或者HSPCLK需要经过各个外设自己的时钟预定标,如果外设自己的时钟预定标位的值为0的话,则外设实际使用的时钟就是LSPCLK或者HSPCLK。

LSPCLK计算公式

LOSPCP=0,LSPCLK=SYSCLKOUT

LOSPCP=1~7,LSPCLK=SYSCLKOUT/〔2*LOSPCP〕

HSPCLK计算公式

HOSPCP=0,HSPCLK=SYSCLKOUT

HOSPCP=1~7,HSPCLK=SYSCLKOUT/〔2*HISPCP〕

通过上面的2个计算公式,可能会产生疑问,LSPCLK的值有没有可能会比HSPCLK的值大?

也就是说提供应低速外设的时钟频率反而比提供应高速外设的时钟频率来的快?

从上面的LSPCLK和HSPCLK的计算公式可以看出,这两个时钟信号的频率是独立无关的,各自分别取决于LOSPCP或者HISPCP的值,和其他因素没有关系。

当我们给LOSPCP存放器所赋的值小于给HISPCP存放器所赋的值时,LOSPCP的值就会大于HSPCP的值。

虽然这完全取决于我们对于存放器的初始化,但是一般情况下,也不会让这样的情况出现的,因为低速外设所需要的时钟毕竟要比高速外设所需要的时钟慢些,否则就没有必要区分上下速了,当然这些定义也都是相对而言的。

3、看门狗〔WatchDog〕

在学习DSP看门狗之前,先让我们来了解一下MCU〔MicroprocessorControlUnit微处理器单元〕中看门狗的原理,以便我们能更好的理解DSP中看门狗,因为两者之间的原理是类似的。

MCU中看门狗的原理

在有MCU构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进展实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗〞。

看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:

看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平〔或低电平〕,这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入*一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在他和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开场执行,这样便实现了单片机的自动复位。

看门狗,又叫watchdogtimer,是一个定时器电路,一般有一个输入,叫喂狗〔kickingthedogorservicethedog〕,一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗〔一般在程序跑飞时〕,WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。

防止MCU死机。

看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

图3看门狗功能框图

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

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

看门狗计数存放器WDCNTR

15870

保存

WDCNTR

在这里可以看到计数器一共有8位,当这个8位的计数器计数到达最大值256时,看门狗模块就会产生一个输出脉冲,脉冲宽度为512个振荡器时钟周期。

可能有疑问为什么要产生一个512倍振荡器时钟周期的宽脉冲信号?

因为需要是核复位的信号和要唤醒处理器的中断信号的有效时间远大于振荡器的时钟周期。

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

〔1〕制止看门狗,也即为屏蔽计数器,使得计数器WDCNTR无效。

则下面我们介绍另外一个存放器。

看门狗控制存放器WDCR

158765320

保存

WDFLAG

WDDIS

WDCHK

WDPS

制止看门狗,则只需要在WDCR中的WDDIS位置1即可,相反置0为使能看门狗。

跟着我们介绍其他功能位的作用:

看门狗复位状态标识位WDFLAG,如果置为1,则表示看门狗复位满足了复位条件;如果置为0,则表示外部器件或上电复位条件。

WDCHK必须置为101,因为写其他任何值都会引起器件核的复位,不过这一条件的实现要在看门狗已经使能的情况下。

最后看门狗预定标器WDPS,这里跟上面所学到的上下速预定标器是一样的道理,作用是配置看门狗计数时钟WDCLK的。

WDCLK计算公式

OSCCLK振荡时钟信号

WDPS=0,WDCLK=OSCCLK/512/1

WDPS=1~7,WDCLK=OSCCLK/512/

〔2〕定期进展“喂狗〞,即通过软件周期性地向看门狗复位存放器中WDKEY位写进“0*55+0*AA〞,紧跟着0*55写入0*AA能够去除WDCNTR,写任何其他的值都会使看门狗立即复位。

看门狗复位存放器WDKEY

15870

保存

WDKEY

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

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

系统初始化函数InitSysCtrl一般在工程的DSP28_SysCtrl.c文件中。

系统初始化函数分析

VoidInitSysCtrl(void)

{

Uint16i;//定义16位int类型的变量i

EALLOW;//允许访问受EALLOW保护的存放器

//OnTM*samples,togetthebestperformanceofonchipRAMblocksM0/M1/L0/L1/H0//internalcontrolregistersbithavetobeenabled.ThebitsareinDeviceemulationregisters.

//在TM*采样时,为了能够使得片RAM模块M0/M1/L0/L1/H0能够获得最好的性能,//控制存放器的位必须使能,这些位在设备硬件仿真存放器。

DevEmuRegs.M0RAMDFT=0*0300;//固定格式

DevEmuRegs.M1RAMDFT=0*0300;

DevEmuRegs.L0RAMDFT=0*0300;

DevEmuRegs.L1RAMDFT=0*0300;

DevEmuRegs.H0RAMDFT=0*0300;

//Disablewatchdogmodule

//制止看门狗模块

SysCtrlRegs.WDCR=0*0068;//制止看门狗,WDDIS位置1

//InitalizePLL

//设置PLL

SysCtrlRegs.PLLCR=0*A;//使2812所能支持的最大时钟频率,如果外部晶振为//30MHz,则SYSCLKOUT=〔30M*10〕/2=150MHz

//WaitforPLLtolock

for(i=0;i<5000;i++){}//延时,使得PLL能完成上面语句的操作

//HISPCP/LOSPCPprescaleregistersettings,normallyitwillbesettodefaultvalues

//设置HISPCP/LOSPCP,一般情况下他们会设置为默认值

SysCtrlRegs.HISPCP.all=0*0001;

//这里设定了高速时钟HSPCLK=150M/2=75MHz

SysCtrlRegs.LOSPCP.all=0*0002;

//这里设定了低速时钟LSPCLK=150M/(2*2)=37.5MHz

//Peripheralclockenablessetfortheselectedperipherals

//设置外设使能

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;

SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;

SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;

SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;

//使能了EVA、SCIB、SPI、ADC的时钟,说明这个工程里将会用到这4个外设,一般//的工程中需要用到哪些外设,就对对应外设的时钟进展使能。

EDIS;//制止访问受EALLOW保护的存放器

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1