DSP2812课件-第3讲

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第8章X281x的时钟和系统控制《手把手教你学DSP——基于TMS320X281X》北京航空航天大学出版社作者:顾卫钢《手把手教你学DSP——基于TMS320X281X》北京航空航天大学出版社作者:顾卫钢8.1振荡器OSC和锁相环PLL外部晶振或外部时钟输入信号XCLKINPLL模块(由控制寄存器PLLCR控制PLL工作模式)CLKINCPU的时钟信号CLKIN产生过程XCLKIN和CLKIN之间的关系PLL模式说明SYSCLKOUT或CLKIN禁止引脚置低来进入该模式,PLL模块完全不使能。此时,输入CPU的时钟由来自X1/XCLKIN引脚的时钟信号直接去驱动。XCLKIN旁路如果PLL未处于不使能的状态,这是上电默认的PLL配置(PLLCR的值为0)。PLL自身被旁路,从X1/XCLKIN引脚输入的时钟信号先被/2,然后再送去CPU。XCLKIN/2使能通过给PLLCR寄存器写一个不为0的值来实现PLL的使能,时钟信号需要进入PLL模块进行n倍频,然后再被/2,最后送至CPU。(XCLKIN*n)/28.2F2812中各种时钟信号的产生由PLL模块产生的CLKIN信号,经过cpu分发,作为SYSCLKOUT送至各个外设。SYSCLKOUT信号经过低(高)速外设时钟预定标寄存器LOSPCP(HISPCP),变成LSPCLK(HSPCLK),提供给低速(高速)外设使能外设的时钟信号SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;//使能外设SCIA的时钟SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;//使能外设EVA的时钟SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;//使能外设ADC的时钟在使用F2812进行开发的时候,通常会用到一些外设,要使得这些外设工作,首先就是要向其提供时钟信号。假设现在某个项目里用到了EVA,SCIA和AD这3个外设,那么就需要按照下面的程序对这3个外设进行时钟使能:8.3看门狗电路看门狗电路工作原理由图8-3可以看到,F2812的看门狗电路有一个8位的看门狗加法计数器WDCNTR,当WDCNTR计数到最大值时,看门狗模块就会产生一个输出脉冲,使得DSP复位。为了防止WDCNTR溢出,通常采用两种方法:一种是禁止看门狗,使得计数器WDCNTR无效;另一种就是定期“喂狗”,通过软件向负责复位看门狗计数器的看门狗秘钥寄存器(8位的WDKEY)周期性的写入0x55+0xAA,清除WDCNTR。8.4低功耗模式MODEIDLELPMCR(1:0)OSCCLKCLKINSYSCLKOUTEXIT退出或唤醒方式正常低X,X开开开空闲IDLE高0,0开开开,WAKEINTXNMI任何使能的中断备用STANDBY高0,1开(看门狗仍在运行)关关SCIRXDA,SCIRXDB,CANRX,仿真调试暂停HALT高1,X关(振荡器和PLL关闭,看门狗不工作)关关XNMI仿真调试8.5时钟和系统控制模块的寄存器名称地址地址空间(*16)说明Reserved0x000070100x0000701910保留HISPCP0x0000701A1高速外设时钟预定标寄存器LOSPCP0x0000701B1低速外设时钟预定标寄存器PCLKCR0x0000701C1外设时钟控制寄存器Reserved0x0000701D1保留LPMCR00x0000701E1低功耗模式控制寄存器0LPMCR10x0000701F1低功耗模式控制寄存器1Reserved0x000070201保留PLLCR0x000070211PLL控制寄存器SCSR0x000070221系统控制和状态寄存器WDCNTR0x000070231看门狗计数器寄存器Reserved0x000070241保留WDKEY0x000070251看门狗复位密钥寄存器Reserved0x000070260x000070283保留WDCR0x000070291看门狗控制寄存器Reserved0x0000702A0x0000702F6保留第10章CPU定时器《手把手教你学DSP——基于TMS320X281X》北京航空航天大学出版社作者:顾卫钢10.1CPU定时器工作原理定时器是用来准确控制时间的。X281x芯片内部具有3个32位CPU定时器:Timer0、Timer1、Timer2。用户能用的定时器:Timer0。CPU定时器内部结构CPU定时器工作示意图在CPU定时器工作前,先根据实际的需求,计算好CPU定时器周期寄存器的值,然后给周期寄存器PRDH:PRD赋值。当启动定时器开始计数时,周期寄存器PRDH:PRD里面的值装载进定时器计数寄存器TIMH:TIM中,并每隔一个TIMCLK就减小1,直到计数到0,完成一个计数周期,并产生一个中断信号。CPU定时器一个周期所计量的时间假设系统时钟SYSCLKOUT的值为XMHz,那么计数器每走一步,所需要的时间为:6TDDRH:TDDR1TIMCLK*10sX因为CPU定时器一个周期计数了(PRDH:PRD+1)次,因此CPU定时器一个周期所计量的时间为:6TDDRH:TDDR1T(PRDH:PRD1)**10sXTIMCLK的计算:定时时间的计算:10.3分析CPU定时器的配置函数DSP28_CpuTimers.h内的一段代码//定义了结构体CPUTIMER_VARSstructCPUTIMER_VARS{volatilestructCPUTIMER_REGS*RegsAddr;//CPU定时器寄存器的起始地址Uint32InterruptCount;//CPU定时器中断统计计数器floatCPUFreqInMHz;//CPU频率,以MHz为单位floatPeriodInUSec;//CPU定时器周期,以us为单位};externstructCPUTIMER_VARSCpuTimer0;//声明CPUTIMER_VARS型的结构体CpuTimer0。/*****************************************************************************名称:ConfigCpuTimer()*功能:此函数将使用Freq和Period两个参数来对CPU定时器进行配置。Freq以MHz*为单位,Period以us作为单位。*入口参数:*Timer(指定的定时器),Freq,Period*出口参数:无****************************************************************************/voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod){Uint32temp;Timer-CPUFreqInMHz=Freq;Timer-PeriodInUSec=Period;temp=(long)(Freq*Period);Timer-RegsAddr-PRD.all=temp;//给定时器周期寄存器赋值Timer-RegsAddr-TPR.all=0;//给定时器预定标寄存器赋值Timer-RegsAddr-TPRH.all=0;//初始化定时器控制寄存器:Timer-RegsAddr-TCR.bit.TIF=1;//清除中断标志位Timer-RegsAddr-TCR.bit.TSS=1;//停止定时器Timer-RegsAddr-TCR.bit.TRB=1;//定时器重装,将定时器周期寄存器的值装入定时器计数器寄存器Timer-RegsAddr-TCR.bit.SOFT=1;Timer-RegsAddr-TCR.bit.FREE=1;Timer-RegsAddr-TCR.bit.TIE=1;//使能定时器中断Timer-InterruptCount=0;//初始化定时器中断计数器}ConfigCpuTimer(&CpuTimer0,150,1000000)Timer0计时1s?Why?假设DSP的时钟SYSCLKOUT为XMHZ,想要实现的周期是Ys,则调用配置函数为ConfigCpuTimer(&CpuTimer0,X,Y*106)。根据函数的定义,可得:temp=Freq*Period=X*Y*106CpuTimer0-RegsAddr-PRD.all=temp=X*Y*106也就是说CPU定时器周期寄存器的值为X*Y*106,而在函数的定义内又有:CpuTimer0-RegsAddr-TPR.all=0说明CPU定时0的分频器TDDRH:TDDR的值为0。则根据前面的CPU定时器的周期计算公式:66(01)T(X*Y*101)**10sYsX计算下来发现,经函数ConfigCpuTimer(&CpuTimer0,X,Y*106)配置后,CPU定时器的周期刚好为Ys。第11章X2812的中断系统《手把手教你学DSP——基于TMS320X281X》北京航空航天大学出版社作者:顾卫钢11.1什么是中断在任何一款事件驱动型的CPU里面都应该会有中断系统,因为中断就是为响应某种事件而存在的。中断的灵活应用不仅能够实现想要实现的功能,而且合理的中断安排可以提高事件执行的效率,因此中断在DSP应用中的地位是非常重要的。中断(Interrupt)是硬件和软件驱动事件,它使得CPU暂停当前的主程序,并转而去执行一个中断服务子程序。中断的生活实例F2812的三级中断CPU中断PIE中断外设中断11.2CPU中断X2812的中断主要由两种方式触发。一种是通过在软件中写指令,例如INTR、ORIFR或者TRAP指令。另一种是硬件方式触发,例如来自于片内外设,或者外围设备的中断信号,表示某个事件已经发生。可屏蔽中断和不可屏蔽中断可屏蔽中断就是这些中断可以用软件加以屏蔽或者解除屏蔽。X2812片内外设所产生的中断都是可屏蔽中断,每一个中断都可以通过相应寄存器的中断使能位来禁止或者使能该中断。不可屏蔽中断就是这些中断是不可以被屏蔽的,一旦中断申请信号发出,CPU必须无条件的立即去响应该中断并执行相应的中断服务子程序。X281X的不可屏蔽中断主要包括软件中断(INTR指令和TRAP指令等)、硬件中断、非法指令陷阱以及硬件复位中断。CPU处理中断的步骤11.2.2CPU中断向量和优先级前面讲解的是单个中断请求的处理过程,那要是几个中断同时向CPU发出中断请求,CPU该如何处理呢?优先级的简单例子假如有一个医生但是有两个病人需要急诊,一个出了车祸,性命攸关,而另一个只是普通的感冒,这时候医生会先诊治哪个病人呢?22位的CPU中断向量一共可以支持32个CPU中断,其中每一个中断都是一个32位的中断向量。中断向量绝对地址优先级说明VMAP=0VMAP=1RESET000000h3FFFC0h1(最高)复位中断INT1000002h3FFFC2h5可屏蔽中断1INT2000004h3FFFC4h6可屏蔽中断2INT3000006h3FFFC6h7可屏蔽中断3INT4000008h3FFFC8h8可屏蔽中断4INT500000Ah3FFFCAh9可屏蔽中断5INT600000Ch3FFFCCh10可屏蔽中断6INT700000Eh3FFFCEh11可屏蔽中断7INT8000010h3FFFD0h12可屏蔽中断8INT9000012h3FFFD2h13可屏蔽中断9INT10000014h3FFFD4h14可屏蔽中断10INT11000016h3FFFD6h15可屏蔽中断11INT12000018h3FFFD8h16可屏蔽中断12INT1300001Ah3FFFDAh17可屏蔽中断13INT1400001Ch3FFFDCh18可屏蔽中断14DLOGINT00001Eh3FFFDEh19(最低)可屏蔽数据标志中断RTOSINT000

1 / 86
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功