ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:22.90KB ,
资源ID:30478989      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30478989.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(F2812的时钟和控制系统.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

F2812的时钟和控制系统.docx

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

2、gic 为了能够让F2812能够按部就班的执行相应的代码,实现相应的功能,他需要不断的规律的时钟脉冲,而这一功能就由F2812部的振荡器OSC和基于PLL的时钟模块来实现。在这里简单的介绍一下终究振荡器OSC和锁相环PLL是什么:振荡器OSC: 一种能量转换装置,将直流电能转换为具有一定频率的交流电能。锁相环PLL:锁相环也叫一样步逻辑,用途是在收、发通信双方建立载波同步或位同步。因为它的工作过程是一个自动频率相位调整的闭合环路,所以叫环。让我们来看一下整体的图:图1 2812芯片的OSC和PLL模块如上图所示,F2812上有基于PLL的时钟模块,为器件及各种外设提供时钟信号。锁相环中有4位倍

3、频设置位,以此来提供各种速度的时钟信号。基于PLL的时钟模块可以采用两种操作模式:1部振荡器:在PLL未被制止的情况下,使用外部晶振给2812提供时钟信号,则必须使用*1/*CLKIN引脚和*2引脚,在这两引脚之间连接一个石英晶体,即外部晶振。2外部时钟源:在PLL被制止的情况下,旁路片振荡器,由外部时钟源提供时钟信号,这时候讲外部振荡器的信号直接输入到*1/*CLKIN引脚上,此时*2引脚不使用。 外部引脚可以选择系统的时钟源。当为低电平时,系统直接采用时钟或晶振直接作为系统时钟;当为高电平时,外部时钟经过PLL倍频后,为系统提供时钟。系统可以通过锁相环控制存放器来选择锁相环的工作模式和倍频

4、的系数。下面的表格列出了各种PLL的配置模式下,时钟输入信号*CLKIN和时钟模块输出信号,即送至CPU的信号CLKIN之间的关系:PLL模块功能描述CLKINPLL被制止上电复位时如果引脚是低电平,则PLL完全被制止。此时,输入CPU的时钟是由外部振荡器直接通过*1/*CLKIN引脚输入的信号。*CLKINPLL旁路如果PLL未处于不使能的状态,上电默认的PLL配置PLLCR的值为0。PLL自身被旁路,从*1/*CLKIN引脚输入的时钟信号先除以2,然后再送去CPU。*CLKIN/2PLL使能通过给PLLCR存放器写一个不为0的值来实现PLL的使能,时钟信号需要进入PLL模块进展n倍频,然后

5、再除以2,最后送至CPU。*CLKIN*n/2锁相环PLL中有锁相环控制存放器PLLCR,作用是用来选择锁相环的工作模式和倍频的系数。上面提到过锁相环中有4位倍频设置位DIV,即为03位,往里面写入00001010用来确定倍频的系数,其他为保存。锁相环控制存放器PLLCR如下:15 4 3 0保存DIV在PLL模式中,平常使用的是PLL使能模式,从图1可以看到,通常采用30M的晶振来给2812提供时基。当PLLCR的DIV位被置为最大值1010的时候,CPU的时钟将到达150MHz,是2812所能支持的最大时钟频率,这也是为什么我们会选用30M晶振的原因。时钟频率具体的计算如下所示:晶振为30

6、M,PLLCR的DIV位被置为1010时的时钟频率CLKIN=OSCLKIN*10/2=30M*10/2=150MHz2、2812芯片中各种时钟信号的产生情况 2812芯片各种时钟信号的产生情况如图2所示。CLKIN是经过PLL模块后送往CPU的时钟信号,进过CPU分发,作为SYSCLKOUT送至各个外设。因此,SYSCLKOUT=CLKIN。图2 2812芯片各种时钟信号的产生情况 我们在使用2812开发的时候,通常会用到一些外设,例如SCI,EV,AD等,要使得这些外设工作,首先的就是向其提供时钟信号。因此,我们再系统初始化的时候,就需要对使用到的各个外设的时钟进展使能,在这里和时钟使能相

7、关的存放器是外设时钟控制存放器PCLKCR。PCLKCR控制各种时钟的工作状态,使能或制止相关外设时钟,而PCLKCR各位的分配如下所示:15 14 13 12 11 10 9 保存ECANENCLK保存MCBSPENCLKSCIBENCLKSCIAENCLK保存 8 7 4 3 2 1 0SPIENCLK保存ADCENCLK保存EVBENCLKEVAENCLK 对PCLKCR中各种外设时钟有了根本的了解后,则终究是如何对工程中所需要的各个外设的时钟进展使能的呢?假设要做的工程中用到了EVA、SCIB、SPI、AD这4个外设,则就需要按照下面的程序对这4个外设进展时钟的使能。使能外设时钟ENC

8、LK=1;SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;SysCtrlRegs.PCLKCR.bit.ADCENCLK=1; 从图2中也能看到,SYSCLKOUT信号经过低速外设时钟预定标存放器LOSPCP取值围07,即000111变成了LSPCLK,提供应低速外设SCIA、SCIB、SPI、McBSP;SYSCLKOUT信号经过高速外设时钟预定标存放器HISPCP取值围07,即000111变成了HSPCLK,提供应高速外设EVA、EVB、ADC。他们各位的分配如下:高速外设时钟设置存放器HISPCP1

9、5 3 2 0保存HSPCLK低速外设时钟设置存放器LOSPCP15 3 2 0保存LSPCLK 在各个外设实际使用时钟的时候,LSPCLK或者HSPCLK需要经过各个外设自己的时钟预定标,如果外设自己的时钟预定标位的值为0的话,则外设实际使用的时钟就是LSPCLK或者HSPCLK。LSPCLK计算公式LOSPCP=0,LSPCLK=SYSCLKOUTLOSPCP=17,LSPCLK=SYSCLKOUT/2*LOSPCPHSPCLK计算公式HOSPCP=0,HSPCLK=SYSCLKOUTHOSPCP=17,HSPCLK=SYSCLKOUT/2*HISPCP 通过上面的2个计算公式,可能会产生

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

11、Watch Dog 在学习DSP看门狗之前,先让我们来了解一下MCUMicroprocessor Control Unit 微处理器单元中看门狗的原理,以便我们能更好的理解DSP中看门狗,因为两者之间的原理是类似的。MCU中看门狗的原理 在有MCU构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进展实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗。 看门狗电路的应用,使单片机可以在无人状

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

13、r service the dog,一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗一般在程序跑飞时,WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机。看门狗的作用就是防止程序发生死循环,或者说程序跑飞。图3 看门狗功能框图 2812中的看门狗原理和上面讲诉的MCU的看门狗原理是类似的,其作用是为DSP的运行情况进展“把脉,一旦发现程序跑飞或者状态不正常便立即使DSP复位。 为了实现看门狗的各项功能,需要准备设置其部的3个功能存放器,而这3个功能存放器分别是看门狗计数存放器WDCNTR、看门狗复

14、位存放器WDKEY、看门狗控制存放器WDCR。看门狗计数存放器WDCNTR15 8 7 0保存WDCNTR 在这里可以看到计数器一共有8位,当这个8位的计数器计数到达最大值256时,看门狗模块就会产生一个输出脉冲,脉冲宽度为512个振荡器时钟周期。可能有疑问为什么要产生一个512倍振荡器时钟周期的宽脉冲信号?因为需要是核复位的信号和要唤醒处理器的中断信号的有效时间远大于振荡器的时钟周期。 为了防止看门狗加法计数器WDCNTR溢出,不想产生脉冲信号,这里我们通常可以采用两种方法:1制止看门狗,也即为屏蔽计数器,使得计数器WDCNTR无效。则下面我们介绍另外一个存放器。看门狗控制存放器WDCR15

15、 8 7 6 5 3 2 0保存WDFLAGWDDISWDCHKWDPS 制止看门狗,则只需要在WDCR中的WDDIS位置1即可,相反置0为使能看门狗。跟着我们介绍其他功能位的作用:看门狗复位状态标识位WDFLAG,如果置为1,则表示看门狗复位满足了复位条件;如果置为0,则表示外部器件或上电复位条件。WDCHK必须置为101,因为写其他任何值都会引起器件核的复位,不过这一条件的实现要在看门狗已经使能的情况下。最后看门狗预定标器WDPS,这里跟上面所学到的上下速预定标器是一样的道理,作用是配置看门狗计数时钟WDCLK的。WDCLK计算公式OSCCLK振荡时钟信号WDPS=0,WDCLK=OSCC

16、LK/512/1WDPS=17,WDCLK=OSCCLK/512/2定期进展“喂狗,即通过软件周期性地向看门狗复位存放器中WDKEY位写进“0*55+0*AA,紧跟着0*55写入0*AA能够去除WDCNTR,写任何其他的值都会使看门狗立即复位。看门狗复位存放器WDKEY15 8 7 0保存WDKEY4、如何写系统初始化函数 要使得2812能够工作,我们在上电开场的时候就需要对2812进展系统初始化,以提供其正常运行的根本条件,例如分配时钟信号。 系统初始化函数InitSysCtrl一般在工程的DSP28_SysCtrl.c文件中。系统初始化函数分析Void InitSysCtrl(void)

17、Uint16 i; /定义16位int类型的变量i EALLOW; /允许访问受EALLOW保护的存放器 /On TM* samples , to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 /internal control registers bit have to be enabled . The bits are in Device emulation registers . /在TM*采样时,为了能够使得片RAM模块M0/M1/L0/L1/H0能够获得最好的性能,/控制存放器的位必须使能,这些位在设备硬件

18、仿真存放器。 DevEmuRegs.M0RAMDFT = 0*0300; /固定格式 DevEmuRegs.M1RAMDFT = 0*0300; DevEmuRegs.L0RAMDFT = 0*0300; DevEmuRegs.L1RAMDFT = 0*0300; DevEmuRegs.H0RAMDFT = 0*0300; /Disable watchdog module /制止看门狗模块 SysCtrlRegs.WDCR = 0*0068; /制止看门狗,WDDIS位置1 /Initalize PLL /设置PLL SysCtrlRegs.PLLCR = 0*A; /使2812所能支持的最大

19、时钟频率,如果外部晶振为/30MHz,则SYSCLKOUT=30M*10/2=150MHz /Wait for PLL to lock for( i = 0 ; i 5000 ; i+ ) /延时,使得PLL能完成上面语句的操作 /HISPCP/LOSPCP prescale register settings , normally it will be set to default values /设置HISPCP/LOSPCP,一般情况下他们会设置为默认值 SysCtrlRegs.HISPCP.all = 0*0001; /这里设定了高速时钟HSPCLK=150M/2=75MHz SysC

20、trlRegs.LOSPCP.all = 0*0002; /这里设定了低速时钟LSPCLK=150M/(2*2)=37.5MHz /Peripheral clock enables set for the selected peripherals /设置外设使能 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