第八讲定时器精选文档.ppt

上传人:石*** 文档编号:45882764 上传时间:2022-09-25 格式:PPT 页数:45 大小:1.65MB
返回 下载 相关 举报
第八讲定时器精选文档.ppt_第1页
第1页 / 共45页
第八讲定时器精选文档.ppt_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《第八讲定时器精选文档.ppt》由会员分享,可在线阅读,更多相关《第八讲定时器精选文档.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第八讲定时器本讲稿第一页,共四十五页内容提要n总体特性n功能概述n函数讲解n举例本讲稿第二页,共四十五页8.1 总体特性n在LM3S9B96内部通常集成有4个通用定时器模块(General-Purpose Timer Module,GPTM),分别为Timer0、Timer1、Timer2和Timer3。本讲稿第三页,共四十五页Timer模块具有非常丰富的功能:n32位定时器模式 n16位定时器模式 n16位输入捕获模式 n16位PWM模式 本讲稿第四页,共四十五页n每个Timer模块都可以配置为一个32位定时器;n也可以拆分为两个16位的定时/计数器TimerA和TimerB,它们可以被配置

2、为独立运行的定时器、事件计数器或PWM。本讲稿第五页,共四十五页8.2 Timer功能概述 nTimer模块的功能在总体上可以分成32位模式和16位模式两大类。n在32位模式下,TimerA和TimerB被连在一起形成一个完整的32位计数器。对Timer的各项操作(如装载初值、运行控制、中断控制等)都用对TimerA的操作作为总体上的32位控制,而对TimerB的操作无任何效果。本讲稿第六页,共四十五页n在16位模式下,对TimerA的操作仅对TimerA有效,对TimerB的操作仅对TimerB有效,即对两者的操控是完全独立进行的。本讲稿第七页,共四十五页8.2.1 32位单次触发/周期定时

3、器n在这两种模式中,Timer都被配置成一个32位的递减计数器,用法类似,只是单次触发模式只能定时一次,如果需要再次定时则必须重新配置,n而周期模式则可以周而复始地定时,除非被关闭。n在计数到0 x00000000时,可以输出一个内部的单时钟周期脉冲信号或在软件的控制下触发中断。本讲稿第八页,共四十五页8.2.2 16位单次触发/周期定时器n一个32位的Timer可以被拆分为两个单独运行的16位定时/计数器,每一个都可以被配置成16位递减计数器。n具体用法跟32位单次触发/周期定时模式类似,不同的是对TimerA和TimerB的操作是分别独立进行的。本讲稿第九页,共四十五页8.3 函数讲解n使

4、能n配置与控制n计数值的装载与获取n运行控制n中断控制本讲稿第十页,共四十五页8.3.1 使能nTimer库函数在使用某个Timer模块之前,应当首先将其使能,方法为:nSysCtlPeriEnable(SYSCTL_PERIPH_TIMERn);qn取0、1、2或3 本讲稿第十一页,共四十五页8.3.2 配置与控制 n函数TimerConfigure()用来配置Timer的工作模式。本讲稿第十二页,共四十五页函数TimerConfigure()n功能:配置Timer模块的工作模式。n原型:void TimerConfigure(unsigned long ulBase,unsigned lo

5、ng ulConfig)qulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulConfig:Timer模块的配置 本讲稿第十三页,共四十五页ulConfig 的取值(Timer模块的配置)nTimer模块的配置在32位模式下应当取下列值之一:qTIMER_CFG_32_BIT_OS/32位单次触发定时器 qTIMER_CFG_32_BIT_PER/32位周期定时器 qTIMER_CFG_32_RTC/32位RTC定时器本讲稿第十四页,共四十五页n/配置Timer0为32位单次触发定时器 qTimerConfigure(TIMER0_BASE,TIMER_C

6、FG_32_BIT_OS);n/配置Timer1为32位周期定时器 qTimerConfigure(TIMER1_BASE,TIMER_CFG_32_BIT_PER);n/配置Timer2为32位RTC定时器 qTimerConfigure(TIMER2_BASE,TIMER_CFG_32_RTC);举例:本讲稿第十五页,共四十五页n在16位模式下,一个32位的Timer被拆分成两个独立运行的子定时器TimerA和TimerB。n配置TimerA的方法是参数ulConfig先取值TIMER_CFG_16_BIT_PAIR再与下列值之一进行“或运算”的组合形式:qTIMER_CFG_A_ONE_

7、SHOT/TimerA为单次触发定时器 qTIMER_CFG_A_PERIODIC/TimerA为周期定时器 qTIMER_CFG_A_CAP_COUNT/TimerA为边沿事件计数器 qTIMER_CFG_A_CAP_TIME/TimerA为边沿事件定时器 qTIMER_CFG_A_PWM/TimerA为PWM输出 n配置TimerB的方法是参数ulConfig先取值TIMER_CFG_16_BIT_PAIR再与下列值之一进行“或运算”的组合形式:qTIMER_CFG_B_ONE_SHOT/TimerB为单次触发定时器 qTIMER_CFG_B_PERIODIC/TimerB为周期定时器 q

8、TIMER_CFG_B_CAP_COUNT/TimerB为边沿事件计数器 qTIMER_CFG_B_CAP_TIME/TimerB为边沿事件定时器 qTIMER_CFG_B_PWM/TimerB为PWM输出 本讲稿第十六页,共四十五页n/在Timer0当中,配置TimerA为单次触发定时器(不配置TimerB)qTimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR|TIMER_CFG_A_ONE_SHOT);n/在Timer0当中,配置TimerB为周期定时器(不配置TimerA)qTimerConfigure(TIMER0_BASE,TIMER_C

9、FG_16_BIT_PAIR|TIMER_CFG_B_PERIODIC);n/在Timer0当中,配置TimerA为单次触发定时器,同时配置TimerB为周期定时器 qTimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR|TIMER_CFG_A_ONE_SHOT|TIMER_CFG_B_PERIODIC);举例:本讲稿第十七页,共四十五页8.3.3 计数值的装载与获取 nTimerLoadSet()nTimerEnable()nTimerLoadGet()nTimerValueGet()本讲稿第十八页,共四十五页TimerLoadSet()n函数Ti

10、merLoadSet()用来设置Timer的装载值。本讲稿第十九页,共四十五页函数TimerLoadSet()n功能:设置Timer的装载值。n原型:void TimerLoadSet(unsigned long ulBase,unsigned long ulTimer,unsigned long ulValue)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH qulValue:32位装载值(32位模式)或16位装载值(16位模式)本讲稿第二十页,共四十五页

11、TimerLoadGet()n另外,除了单次触发定时器模式以外,在计数器溢出时会自动重新加载装载值。n函数TimerLoadGet()用来获取装载寄存器的值。本讲稿第二十一页,共四十五页函数TimerLoadGet()n功能:获取Timer的装载值。n原型:unsigned long TimerLoadGet(unsigned long ulBase,unsigned long ulTimer)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH q返回:32位装

12、载值(32位模式)或16位装载值(16位模式)本讲稿第二十二页,共四十五页TimerValueGet()n函数TimerValueGet()用来获取当前Timer计数器的值。本讲稿第二十三页,共四十五页函数TimerValueGet()n功能:获取当前的Timer计数值。n原型:unsigned long TimerValueGet(unsigned long ulBase,unsigned long ulTimer)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_B

13、OTH q返回:当前Timer计数值(在16位输入边沿定时捕获模式下,返回的是捕获值本讲稿第二十四页,共四十五页8.3.4 运行控制 n函数TimerEnable()用来使能Timer计数器开始计数,而函数TimerDisable()用来禁止计数。本讲稿第二十五页,共四十五页TimerEnable()n在调用TimerEnable()时会自动把装载值加载到计数器里,以后每输入一个脉冲计数器值就加1或减1(取决于配置的工作模式),而装载寄存器不变。本讲稿第二十六页,共四十五页函数TimerEnable()n功能:使能Timer计数(即启动Timer)n原型:void TimerEnable(un

14、signed long ulBase,unsigned long ulTimer)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH q返回:无 本讲稿第二十七页,共四十五页函数TimerDisable()n功能:禁止Timer计数(即关闭Timer)n原型:void TimerDisable(unsigned long ulBase,unsigned long ulTimer)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、

15、2或3)qulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH q返回:无 本讲稿第二十八页,共四十五页5.中断控制 nTimer模块有多个中断源,有超时中断、匹配中断和捕获中断等。n函数TimerIntEnable()和TimerIntDisable()用来使能或禁止一个或多个Timer中断源。n函数TimerIntClear()用来清除一个或多个Timer中断状态,函数TimerIntStatus()用来获取Timer的全部中断状态。本讲稿第二十九页,共四十五页函数TimerIntEnable()n功能:使能Timer的中断。n原型:void Time

16、rIntEnable(unsigned long ulBase,unsigned long ulIntFlags)nulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)nulIntFlags:被使能的中断源,应当取下列值之一或者它们之间的任意“或运算”组合形式:qTIMER_TIMA_TIMEOUT/TimerA超时中断 qTIMER_CAPA_MATCH/TimerA捕获模式匹配中断 qTIMER_CAPA_EVENT/TimerA捕获模式边沿事件中断 qTIMER_TIMB_TIMEOUT/TimerB超时中断 qTIMER_CAPB_MATCH/Timer

17、B捕获模式匹配中断 qTIMER_CAPB_EVENT/TimerB捕获模式边沿事件中断 qTIMER_RTC_MATCH/RTC匹配中断 本讲稿第三十页,共四十五页函数TimerIntDisable()n功能:禁止Timer的中断 n原型:void TimerIntDisable(unsigned long ulBase,unsigned long ulIntFlags)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulIntFlags:被禁止的中断源。本讲稿第三十一页,共四十五页函数TimerIntClear()n功能:清除Timer的中断。

18、n原型:void TimerIntClear(unsigned long ulBase,unsigned long ulIntFlags)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)qulIntFlags:被清除的中断源。本讲稿第三十二页,共四十五页函数TimerIntStatus()n功能:获取当前Timer的中断状态。n原型:unsigned long TimerIntStatus(unsigned long ulBase,tBoolean bMasked)q参数 ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2

19、或3)qbMasked:如果需要获取的是原始的中断状态,则取值false,如果需要获取的是屏蔽的中断状态,则取值true q返回:中断状态本讲稿第三十三页,共四十五页8.5 举例本讲稿第三十四页,共四十五页#include inc/hw_ints.h#include inc/hw_memmap.h#include inc/hw_types.h#include driverlib/interrupt.h#include driverlib/sysctl.h#include driverlib/timer.h#include driverlib/gpio.h#include grlib/grlib

20、.h#include drivers/set_pinout.hvoid delay(int d)/延时函数 for(;d;-d);void Timer0IntHandler(void)TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);delay(2000000);/延时 GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);delay(2000000);/延时本讲稿第三十五页,共四十五页int mai

21、n(void)SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);PinoutSet();GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_DIR_MODE_OUT);GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);SysCtl

22、PeripheralEnable(SYSCTL_PERIPH_TIMER0);IntMasterEnable();TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_OS);TimerLoadSet(TIMER0_BASE,TIMER_A,2*SysCtlClockGet();IntEnable(INT_TIMER0A);TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);TimerEnable(TIMER0_BASE,TIMER_A);while(1)单次触发本讲稿第三十六页,共四十五页#include inc/h

23、w_ints.h#include inc/hw_memmap.h#include inc/hw_types.h#include driverlib/interrupt.h#include driverlib/sysctl.h#include driverlib/timer.h#include driverlib/gpio.h#include grlib/grlib.h#include drivers/set_pinout.hvoid delay(int d)/延时函数 for(;d;-d);void Timer0IntHandler(void)/TimerIntClear(TIMER0_BAS

24、E,TIMER_TIMA_TIMEOUT);GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);delay(2000000);/延时 GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);delay(2000000);/延时本讲稿第三十七页,共四十五页int main(void)SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);PinoutSet();GPIOPadConfigSet

25、(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_DIR_MODE_OUT);GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);IntMasterEnable();TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);TimerLoadS

26、et(TIMER0_BASE,TIMER_A,2*SysCtlClockGet();IntEnable(INT_TIMER0A);TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);TimerEnable(TIMER0_BASE,TIMER_A);while(1)周期定时本讲稿第三十八页,共四十五页单次触发实现周期闪烁void Timer0IntHandler(void)TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_P

27、IN_3);delay(2000000);/延时GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);delay(2000000);/延时TimerLoadSet(TIMER0_BASE,TIMER_A,2*SysCtlClockGet();TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);TimerEnable(TIMER0_BASE,TIMER_A);IntEnable(INT_TIMER0A);本讲稿第三十九页,共四十五页#include inc/hw_ints.h#include inc/hw

28、_memmap.h#include inc/hw_types.h#include driverlib/debug.h#include driverlib/interrupt.h#include driverlib/sysctl.h#include driverlib/timer.h#include grlib/grlib.h#include drivers/kitronix320 x240 x16_ssd2119_8bit.h#include drivers/set_pinout.h本讲稿第四十页,共四十五页nunsigned long g_ulFlags;ntContext g_sConte

29、xt;本讲稿第四十一页,共四十五页void Timer0IntHandler(void)TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);HWREGBITW(&g_ulFlags,0)=1;IntMasterDisable();GrStringDraw(&g_sContext,(HWREGBITW(&g_ulFlags,0)?1:0),-1,195,150,1);IntMasterEnable();本讲稿第四十二页,共四十五页void Timer1IntHandler(void)TimerIntClear(TIMER1_BASE,TIMER_TIMA_

30、TIMEOUT);HWREGBITW(&g_ulFlags,1)=1;IntMasterDisable();GrStringDraw(&g_sContext,(HWREGBITW(&g_ulFlags,1)?1:0),-1,195,120,1);IntMasterEnable();本讲稿第四十三页,共四十五页int main(void)tRectangle sRect;SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);PinoutSet();Kitronix320 x240 x16_

31、SSD2119Init();GrContextInit(&g_sContext,&g_sKitronix320 x240 x16_SSD2119);sRect.sXMin=0;sRect.sYMin=0;sRect.sXMax=GrContextDpyWidthGet(&g_sContext)-1;sRect.sYMax=23;GrContextForegroundSet(&g_sContext,ClrDarkBlue);GrRectFill(&g_sContext,&sRect);GrContextForegroundSet(&g_sContext,ClrWhite);GrRectDraw(

32、&g_sContext,&sRect);GrContextFontSet(&g_sContext,&g_sFontCm20);GrStringDrawCentered(&g_sContext,timers,-1,GrContextDpyWidthGet(&g_sContext)/2,11,0);GrContextFontSet(&g_sContext,&g_sFontCmss22b);GrStringDraw(&g_sContext,Timer 0:,-1,100,120,0);GrStringDraw(&g_sContext,Timer 1:,-1,100,150,0);本讲稿第四十四页,共

33、四十五页SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);IntMasterEnable();TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);TimerConfigure(TIMER1_BASE,TIMER_CFG_32_BIT_PER);TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlClockGet();TimerLoadSet(TIMER1_BASE,TIMER_A,SysCtlClockGet()/2);IntEnable(INT_TIMER0A);IntEnable(INT_TIMER1A);TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);TimerIntEnable(TIMER1_BASE,TIMER_TIMA_TIMEOUT);TimerEnable(TIMER0_BASE,TIMER_A);TimerEnable(TIMER1_BASE,TIMER_A);while(1)本讲稿第四十五页,共四十五页

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁