《TMS320F2812的时钟及看门狗.ppt》由会员分享,可在线阅读,更多相关《TMS320F2812的时钟及看门狗.ppt(51页珍藏版)》请在三一办公上搜索。
1、第6章 TMS320F2812的时钟及看门狗,DSP TMS320F2812内部结构,6.1 时钟单元,6.1.1 时钟单元基本结构,TMS320F2812处理器内部集成了振荡器、锁相环、看门狗及工作模式选择等控制电路。振荡器、锁相环主要为处理器CPU及相关外设提供可编程的时钟,每个外设的时钟都可以通过相应的寄存器进行编程设置;看门狗可以监控程序的运行状态,提高系统的可靠性。,F2810和F2812内部的各种时钟和复位电路,6.1.2 锁相环电路,锁相环是一种控制晶振使其相对于参考信号保持恒定相位的电路,在数字通信系统中使用比较广泛。目前微处理器或DSP集成的片上锁相环,主要作用则是通过软件实
2、时地配置片上外设时钟,提高系统的灵活性和可靠性。此外,由于采用软件可编程锁相环,所设计的系统处理器外部允许较低的工作频率,而片内经过锁相环微处理器提供较高的系统时钟。好处:可以有效地降低系统对外部时钟的依赖和电磁干扰,提高系统启动和运行的可靠性,降低系统对硬件的设计要求。,6.1.2 锁相环电路,TMS320F2812处理器的片上晶振和锁相环模块为内核及外设提供时钟信号,并且控制器件的低功耗工作模式。片上晶振模块允许使用2种方式为器件提供时钟,即采用内部振荡器或外部时钟源。(1)使用内部振荡器,在Xl/XCLKIN和X2这两个引脚之间连接一个石英晶体,一般选用30 MHz。(2)采用外部时钟,
3、将输入的时钟信号直接接到Xl/XCLKIN引脚上,而X2悬空,不使用内部振荡器。,晶体振荡器及锁相环模块,锁相环配置模式,处理器内部时钟电路,锁相环模块除了为C28x内核提供时钟外,还通过系统时钟输出提供快速和慢速2种外设时钟,而系统时钟主要通过外部引脚XPLLDIS及锁相环控制寄存器进行控制。,如果XPLLDIS为高电平,使能芯片内部锁相环电路,则可以通过控制寄存器PLLCR软件设置系统的工作频率。注意:1.在通过软件改变系统的工作频率时,必须等待系统时钟稳定后才可以继续完成其他操作。2.可以通过外设时钟控制寄存器使能外设时钟。在具体的应用中。为降低系统功耗,不使用的外设最好将其时钟禁止。外
4、设时钟包括快速外设和慢速外设两种,分别通过HISPCP和LOSPCP寄存器进行设置。,改变锁相环倍频系数和外设时时钟的具体应用程序/-/初始化锁相环及外设时钟函数InitPll/-void InitPll(Uint16 val)volatile Uint16 iVol;if(SysCtrlRegs.PLLCR.bit.DIV!=val)EALLOW;SysCtrlRegs.PLLCR.bit.DIV=val;EDIS;/在锁相环时钟频率切换过程中,只有当锁相环稳定后CPU才会切换到新的PLL设置/因此在设置完PLLCR后需要等待PLL稳定。PLL的切换时间大约等于131072个输入时钟周期Di
5、sableDog();for(iVol=0;iVol(131072/2)/12);iVol+),/为降低系统功耗,不使用的外设时钟需要屏蔽。但如果使用外设必须首先使能相应的外设时钟void InitPeripheralClocks(void)EALLOW;/HISPCP/LOSPCP预定标寄存器设置 SysCtrlRegs.HISPCP.a11=0 x0001;SysCtrlRegs.LOSPCP.a11=0 x0002;/使能使用的外设时钟 SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;SysCtrlR
6、egs.PCLKCR.bit.SCIAENCLK=1;SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;SysCtrlRegs.PCLKCR.bit.MCBSPENCLR=1;SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;K=1;SysCtrlRegs.PCLKCR.bit.ADCEtTCLK=1;EDIS;,6.1.3 时钟单元寄存器,注意,表中所有寄存器只有在执行EALLOW指令后,才可以访问。PLL控制寄存器(PLLCR)只能被XRS信号复位到已知状态。,1.外设时钟控制寄存器(PCLKCR),位15eserved 保留位位14ECANENCLK
7、如置1,将使能CAN外设模块的时钟。要进入低功耗工作模式,用户可以将该位清零或复位为0。位13 eserved 保留位位12MCBSPENCLK如置1,使能McBSP外设模块的低速时钟(LSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。位11SCIBENCLK如置1,使能SCI-B外设模块的低速时钟(LSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。,位10SCIAENCLK如置1,使能SCI-A外设模块的低速时钟(LSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。位9eserved 保留位位8SPIAENCLK如置1,使能串行外设接
8、口的低速时钟(LSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。位74eserved 保留位,位3ADCENCLK如置1,使能模数转换外设模块的高速时(HSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。位2eserved 保留位位1EVBENCLK如置1,使能事件管理EVB外设模块的高速时钟(HSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。位0EVAENCLK如置1,使能事件管理EVA外设模块的高速时钟(HSPCLK),要让器件进入低功耗工作模式,用户可以将该位清零或复位。,位153eserved 保留位,2.高速外设时钟寄存器(H
9、ISPCP),位20HSPCLK配置与SYSCLKOUT相关的高速外设模块时钟(HSPCLK)频率。000 高速时钟SYSCLKOUT/1001 高速时钟SYSCLKOUT/2(复位值)010 高速时钟SYSCLKOUT/4011 高速时钟SYSCLKOUT/6100 高速时钟SYSCLKOUT/8101高速时钟SYSCLKOUT/10110高速时钟SYSCLKOUT/12111高速时钟SYSCLKOUT/14,位153eserved 保留位,2.低速时钟寄存器(LOSPCP),位20LSPCLK配置与SYSCLKOUT相关的低速外设模块时钟(LSPCLK)频率。000 低速时钟SYSCLKO
10、UT/1001 低速时钟SYSCLKOUT/2010 低速时钟SYSCLKOUT/4(复位值)011 低速时钟SYSCLKOUT/6100 低速时钟SYSCLKOUT/8101 低速时钟SYSCLKOUT/10110 低速时钟SYSCLKOUT/12111 低速时钟SYSCLKOUT/14,位154eserved 保留位,3.锁相环控制寄存器(PLLCR),位30 DIVDIV位域控制是否旁路PLL,不旁路时,用于设置PLL时钟比率。0000CLKINOSCCLK/2(PLL旁路)0001CLKIN(OSCCLK*1.0)/20010CLKIN(OSCCLK*2.0)/20011CLKIN(O
11、SCCLK*3.0)/20100CLKIN(OSCCLK*4.0)/20101CLKIN(OSCCLK*5.0)/20110CLKIN(OSCCLK*6.0)/20111CLKIN(OSCCLK*7.0)/21000CLKIN(OSCCLK*8.0)/21001CLKIN(OSCCLK*9.0)/21010CLKIN(OSCCLK*10.0)/210111111保留,问 题,如果要使系统时钟为输入时钟的5倍频,同时使能所有的外设时钟,将高速外设的时钟设置为系统时钟的1/8,低速外设的时钟设置为系统时钟的1/10,应该如何设置相关的寄存器?,PLLCR=0 x000A;PCLKCR=0 xFFF
12、F;HISPCP=0 x0004;LOSPCP=0 x0005;,6.2 看门狗,看门狗主要用来检测软件和硬件的运行状态,当内部计数器溢出时,将产生一个复位信号。为了避免产生不必要的复位,要求用户定期对看门狗定时器进行复位。如果不明的原因使CPU中断程序,看门狗将产生一个复位信号,使CPU复位,程序从系统软件的开始执行。看门狗有效地提高了系统的可靠性。,6.2.1 看门狗的基本结构,或门,6.2.2 看门狗基本操作,在看门狗计数器(WDCNTR)溢出之前,如果采用正确的时序向WDKEY写入数据就可以使WDCNTR复位。当向WDKEY写0 x55时,WDCNTR复位到使能位置;只有在向WDKEY
13、写0 xAA后才会使WDCNTR真正地复位。0 x55和OxAA以外的任何数据写到WDKEY都会引起系统复位。只要向WDKEY写0 x55和0 xAA,无论写的顺序如何都不会导致系统复位,而只有先写0 x55再写0 xAA才会使WDCNTR复位。,看门狗操作实例,6.2.2 看门狗基本操作,看门狗的预定标寄存器可以用来提高看门狗的计数溢出周期。逻辑校验位(WDCHK)是看门狗的另一个安全机制,所有访问看门狗控制寄存器(WDCR)的写操作中,相应的校验位(位53)必须是“101,否则将会拒绝访问并会立即触发复位。,看门狗的内部原理图,6.2.3 看门狗寄存器,1.看门狗控制寄存器,看门狗控制寄存
14、器的各位分配,看门狗控制寄存器功能定义,2.系统控制和状态寄存器,系统控制和状态寄存器各位分配,系统控制和状态寄存器功能定义,位158eserved 保留位,3.看门狗计数寄存器,位70 WDCNTR程序监视器计数器的当前值。8位计数器不断地以WDCLK频率增加。如果计数器上溢,则程序监视器发出复位信号。如果写入了一个有效数据序列到WDKEY寄存器,则计数器复位到0。WDCLK频率由WDCR寄存器配置。,位158 eserved 保留位,4.看门狗复位寄存器,位70 WDKEY 写入0 x55后再写入0 xAA将清零WDCNTR。写任何其它值都会立即使程序监视器发出复位信号。读取操作时返回WD
15、CR寄存器值。,6.2.4 看门狗应用,F2812上电后看门狗总是处于使能状态,如果不周期地控制看门狗就会触发复位。因此,对于看门狗最简单的处理方法就是通过禁止位(WDDIS)禁止看门狗操作。但看门狗是系统稳定运行的一个保障,因此这种方法并不可取。在实际项目开发过程中,一旦系统调试完毕独立运行就加入看门狗这个安全机制,从而保证系统的正常运行。,/一一一一一一一一一一一一一一一一一一一一一一/看门狗应用实例:Example 28xWatchdog.c/一一一一一一一一一一一一一一一一一一一一一一,/看门狗直接连接到PIE模块的WAKEINT中断,允许将CPU从掉电模式唤醒/程序代码放在一个无限循
16、环中,用户可以选择使用KickDog函数操作看门狗key寄存器/如果使用KickDog函数操作看门狗key寄存器,将不会产生WAKEINT中断/如果不对key寄存器操作,将会产生WAKEINT中断,/观察变量/LoopCount无限循环次数计数/WakeCount产生WAKEINT的中断次序/Step 0、包含需要的头文件/DSP28_ Device.h;采用#include包含器件使用的头文件/DSP28_Example.h;本例程需要的特定的头文件#include DSP28_ Device.h/函数原型声明interrupt void wakeint_isr(void);/全局变量声明U
17、int32 WakeCount;Uint32 LoopCount;,void main(void)/Step 1、初始化系统控制寄存器、PLL、看门狗、时钟位默认状态/该函数在后面的DSP28_SysCtrl.c文件中查找InitSysCtrl();/Step2、GPI0初始化/InitGpio();/Step 3、初始化中断向量表(PIE向量表)/相应中断相量表请在下面的DSP28_ DefaultIsr.c文件中查找/禁止和清除所有CPU中断DINT;IER=0 x0000;,IFR=0 x0000;/初始化PIE控制寄存器,参考DSP28_ PieCtrl.c文件InitPieVectT
18、able();/Step 4、初始化外设/InitPeripherals();/Step 5、用户特定函数,重新分配向量(可选择),使能中断/重新为WAKEINT分配PIE向量,并指向相应的中断服务程序EALLOW;PieVectTable.WAKEINT=,/使能WAKEINT:位于PIE的组1的第8中断 PieCtrlRegs.PIEIER1.bit.INTxB=1;/对整个程序状态寄存器进行操作,避免清除WDOVERRIDE标识位EALLOW;SysCtrlRegs.SCSR.a11=BIT1;EDIS;/计数器清零WakeCount=0;/中断计数LoopCount=0;/循环计数/使
19、能全局中断,并配置位real一time debug模式EINT;/使能全局中断INTMERTM;/使能全局realtime中断DBGM,/Step 6、主循环for(;)LoopCount+;/使用KickDog操作看门狗Key寄存器,避免产生WAKEINT中断/通常情况下为了保证程序正常运行,需要在主程序循环或定时中断服务程序中对Key进行操作/KickDog();,/Step 7、中断服务程序interrupt void wakeint_isr(void)WakeCount+;/响应中断 PieCtrlRegs.PIEACK.a11=PIEACK_ GROUP1;/系统初始化void In
20、itSysCtrl(void),Uint16 i;EALLOW;/禁止看门狗模块/SysCtrlRegs.WDCR=0 x0068;/本例中不使用/初始化锁相环 SysCtrlRegs.PLLCR=0 xA;/等待锁相环稳定 for(i=0;i 5000;i+)/HISPCP/LOSPCP预定标寄存器设置 SysCtrlRegs.HISPCP.a11=0 x0001;SysCtrlRegs.LOSPCP.a11=0 x0002;,/使能选择的外设时钟/对于不用的时钟,一般情况下为了降低功耗,提高系统的稳定性,须禁止相应的中断=1;=1;=1;/=1;EDIS;,/一一一一一一一一一一一一一一一一一一一/KickDog;/一一一一一一一一一一一一一一一一一一一/该函数复位看门狗定时器void KickDog(void)EALLOW;SysCtrlRegs.WDKEY=0 x0055;SysCtrlRegs.WDKEY=Ox00AA;EDIS;,