第8讲--定时器中断应用举例课件

上传人:我*** 文档编号:138889470 上传时间:2020-07-18 格式:PPT 页数:275 大小:3.53MB
返回 下载 相关 举报
第8讲--定时器中断应用举例课件_第1页
第1页 / 共275页
第8讲--定时器中断应用举例课件_第2页
第2页 / 共275页
第8讲--定时器中断应用举例课件_第3页
第3页 / 共275页
第8讲--定时器中断应用举例课件_第4页
第4页 / 共275页
第8讲--定时器中断应用举例课件_第5页
第5页 / 共275页
点击查看更多>>
资源描述

《第8讲--定时器中断应用举例课件》由会员分享,可在线阅读,更多相关《第8讲--定时器中断应用举例课件(275页珍藏版)》请在金锄头文库上搜索。

1、第8章 中断系统及其应用,F281x 处理器中断源及其连接关系,8.5 定时器中断应用举例,8. 5. 1 定时器基本操作,F2810和F2812器件上有3个32位的CPU定时器: TIMER0; TIMER1; TIMER2。,注:CPU定时器与事件管理模块 (EVA,EVB)中的通用(GP)定时器是不同的。,图8. 12 CPU定时器功能框图,一旦定时器被使能(TCR-Bit 4=0),定时器时钟经过预 定标计数器(PSCH : PSC)递减计数,预定标计数器产生下溢 后向定时器的32位计数器(TIMH: TIM)借位。最后定时器计 数器产生溢出使定时器向CPU发送中断。,若处理器采用30

2、 MHz的外部时钟,经过锁相环10/2倍频后,系统的时钟工作在150 MHz。图8. 12中的定时器选择SYSCLKOUT作为定时器时钟,工作频率也是150 MHz。,每次预定标计数器产生溢出后使用分频寄存器(TDDRH:TDDR) 中的值重新装载。同样,32位周期寄存器(PRDH_ PRD)为32位计数 器提供重新装载值。,图8.13 定时器中断结构,8. 5. 2 定时器寄存器,定时器配置和控制寄存器,TIMERxTCR寄存器(x=0,1,2),位1312 eserved 保留位 位96eserved 保留位 位30eserved 保留位,位15 TIFCPU定时器中断标志位。 当定时器减

3、到0时,置位该标志。 该位可以通过程序写入1清零,但是它只能由定时器计数到0时置位。向该位写入0无效。,位14 TIECPU定时器中断使能位。 如果定时器减到0,并且该位置1,则定时器将产生中断请求。,如果FREE位为1,则在软件断点时,定时器继续运行(也就是自由运行)。在此情况下,不管SOFT的状态。 如果FREE为0,则SOFT将起作用。 如果SOFT0,则定时器停止下一次TIMH:TIM减计数。 如果SOFT1,则当TIMH:TIM减计数到0时,定时器停止。,FREESOFT定时器仿真模式 0 0 在TIMH:TIM的下一次减 计数后停止(硬件停止) 0 1 在TIMH:TIM减计数到0

4、后 停止(软件停止) 1 0自由运行 1 1自由运行,注:在前面的软件停止模式中,定时器在关闭之前会产生一个中断(因为到达0满足中断的产生条件)。,位5 TRBCPU定时器重装载位。 向TRB位写入1时,TIMH:TIM将重新装载PRDH:PRD中的值,前定标分频计数器(PSCH:PSC)重新装载定时器分频值寄存器(TDDRH:TDDR)中的值。读TRB位时,值为0。 位4 TSSCPU定时器停止状态位。 TSS为停止或起动定时器的一个标志位。 向TSS写入1,将会停止定时器; 写入0将会起动或重新开始定时器。 复位时,TSS清零,定时器立即起动。,定时器预定标寄存器TIMERxTPR (x0

5、,1,2),位158 PSCCPU定时器前定标分频计数器。 保存定时器的当前前分频计数值。 对于每一个定时器时钟源周期,PSCH:PSC值大于0,PSCH:PSC减1计数。 在PSCH:PSC到0之后的一个定时器时钟周期(定时器预分频器的输出),PSCH:PSC重新装载TDDRH:TDDR的值,而定时器计数器(TIMH:TIM)减1。 当软件置定时器重装载位(TRB)为1时,也会重装载PSCH:PSC。 PSCH:PSC可以通过读该寄存器来检查,但是它不能直接被设置。它必须从定时器分频值寄存器(TDDRH:TDDR)中取值。 复位时,PSCH:PSC为0。,位70 TDDRCPU定时器分频位域

6、。 每(TDDRH:TDDR+1)个定时器时钟源周期,定时器计数寄存器(TIMH:TIM)减1。 复位时,TDDRH:TDDR位为0。 为了以整数因子增加所有计数器计数,写该因子减1的数到TDDRH:TDDR位。 当前分频计数器(PSCH:PSC)值为0时,一个定时器时钟周期后,TDDRH:TDDR重新装载PSCH:PSC的值,TIMH:TIM减1。 当软件置定时器重装载位(TRB)为1时,TDDRH:TDDR也重新装载到PSCH:PSC。,定时器预定标寄存器 TIMERxTPRH (x0,1,2),TIMERxTIM寄存器(x0,1,2),位150 TIM CPU定时器计数寄存器(TIMH:

7、TIM)。,TIM寄存器:保存定时器的当前32位计数值的低16位。 TIMH寄存器保存定时器的当前32位计数值的高16位。 TIMH:TIM每(TDDRH:TDDR+1)个时钟减1。 TDDRH:TDDR为定时器前定标分频值。 当TIMH:TIM减到0时,TIMH:TIM寄存器重新装载PRDH:PRD寄存器保存的周期值,并产生定时器中断信号( )。,位150TIMH,TIMERxTIMH寄存器(x0,1,2),位150 PRD 定时器周期寄存器(PRDH:PRD)。,TIMERxPRD寄存器 (x0,1,2),PRD寄存器:保存32位周期值的低16位。 PRDH寄存器保持32位周期值的高16位

8、。 当TIMH:TIM减到0时,在下一个定时器输入时钟(预分频器的输出)开始时,TIMH:TIM寄存器重新装载PRDH:PRD寄存器中的周期值。 当定时器控制寄存器(TCR)中的定时器重装载位(TRB)置位时,PRDH:PRD的值也将装载到TIMH:TIM。,位150PRDH,TIMERxPRDH寄存器 (x0,1,2),8.6 定时器中断应用举例,定时器中断的例程文件结构如图8. 18所示。,= / 文件名称:Example_281xCpuTimer.c / 功能描述:采用 CPU Timer0定时,在定时器中断服务程序中 / 记录中断的次数 / 观察的变量:CpuTimer0.Interr

9、uptCount,#include DSP281x Device. h /DSP281x Headerfile Include File #include DSP281x_Examples.h /DSP281x Examples Include File /函数声明 interrupt void cpu_timer0_isr(void);,void main(void) / Step 1、初始化系统控制寄存器、PLL、看门狗、时钟位默认状态 /该函数在后面的DSP28_SysCtrl.c文件中查找 InitSysCtrl(); / Step 2,GPIO初始化(本例中不使用) /InitGpi

10、o(); / Step 3、清除所有中断并初始化PIE中断向量表,禁止所有CPU中断 DINT;,/初始化PIE控制寄存器为其默认状态(所有PIE中断被禁止并且标志被清除) InitPieCtrl(); /禁止所有CPU中断并清除所有中断标志 IER=0 x0000; IFR=0 x0000; /初始化PIE控制寄存器,参考DSP28_ PieCtrl.c文件 InitPieVectTable(); /将本例程所使用的中断向量重新映射,使其指向中断服务相应的程序 EALLOW; PieVectTable.TINT0=,/Step 4、初始化所有外设(本例中不需要) /InitPeriphera

11、ls(); InitCpuTimers(); /在本例程中仅初始化Cpu定时器 /配置CPU Timer 0每间隔1s产生1次中断 /150 MHz CPU频率,周期为1 s(采用us的形式描述) ConfigCpuTimer(,/ Step 5、用户特定代码,使能中断 /使能连接到CPU Timer0的CPU INT1 IER|=M_INT1; /使能位于PIE中的组1的第7个中断TINT0 PieCtrlRegs.PIEIER1.bit.INTx7=1; /使能全局中断,并配置为real - time debug模式 EINT; /使能全局中断INTM ERTM; /使能全局实时中断DBG

12、M,/ Step 6、IDLE loop等待产生中断 for(;); interrupt void cpu_timer0_isr(void) CpuTimer0.InterruptCount+; /响应中断并准备接收更多的中断 PieCtrlRegs.PIEACK.a11=PIEACK GROUP1; ,= /文件名称:DSP281x_CpuTimers.c /功能描述:DSP281x CPU 32位定时器初始化及相关函数 /#include DSP281x_Device.h /包含的DSP281x头文件 #include DSP281x_Examples.h /DSP281x Example

13、s头文件 struct CPUTIMER_VARS CpuTimer0; / CpuTimer 1的CpuTimer2保留,由DSP BIOS及其他RTOS使用 /struct CPUTIMER_VARS CpuTimer1; /struct CPUTIMER_VARS CpuTimer2;,/初始化CPU定时器 /该函数将3个定时器初始化为一个确定的状态 void InitCpuTimers(void) /CPU Timer0 /初始化各自定时器的寄存器指向相应的地址 CpuTimer0.RegsAddr=,/初始化预定标计数器,分频系数为1(时钟:SYSCLKOUT) CpuTimer0R

14、egs.TPR.all=0; CpuTimer0Regs.TPRH.all=0; /确认定时器处于停止计数状态 CpuTimer0Regs.TCR.bit.TSS=1; /使用周期寄存器的值装载定时器计数寄存器 CpuTimer0Regs.TCR.bit.TRB=1; /复位中断计数标量InterruptCount = 0 CpuTimer0.InterruptCount=0;,/CpuTimer 1的CpuTimer2为DSP BIOS及其他RTOS保留 /因此相应的定时器初始化代码被注释 /初始化各自定时器的寄存器指向相应的地址 /CpuTimer1.RegsAddr=,/CpuTimer

15、2Regs.TCR.bit.TSS=1; /使用周期寄存器的值装载定时器计数寄存器 /CpuTimer1Regs.TCR.bit.TRB=1; /CpuTimer2Regs.TCR.bit.TRB=1; /复位中断计数标量 /CpuTimer1.InterruptCount=0; /CpuTimer2.InterruptCount=0; ,/配置CPU定时器函数 /该函数初始化指定定时器的周期和频率 void ConfigCpuTimer(struct CPUTIMFR_VARS *Timer, float Freq, float Period) Uint32 temp; /初始化周期 Tim

16、er-CPUFreqInMHz=Freq; Timer-PeriodInUSec=Period; temp=(long) (Freq*Period); Timer-RegsAddr-PRD. all=temp; /设置预定标参数(SYSCLKOUT): Timer-RegsAddr-TPR. all=0; Timer-RegsAddr-TPRH. all = 0 ;,/初始化定时器控制寄存器 Timer-RegsAddr-TCR.bit.TSS=1; /1=Stop timer, 0=Start/Restart Timer Timer-RegsAddr-TCR. bit.TRB=1; / 1=reload timer Timer-RegsAddr-TCR. bit. SOFT =1; Timer

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号