ARM通用定时器解析PPT学习教案_第1页
ARM通用定时器解析PPT学习教案_第2页
ARM通用定时器解析PPT学习教案_第3页
ARM通用定时器解析PPT学习教案_第4页
ARM通用定时器解析PPT学习教案_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1ARM通用定时器解析通用定时器解析回顾回顾教学内容1、定时器概述2、定时器库函数3、定时器编程实例4、看门狗概述5、看门狗应用第1页/共50页回顾回顾隔隔2秒秒(在循环中使用延时函数实现在循环中使用延时函数实现),向,向PC机发送机发送“hi, com test ok!”For(:) send(“hi, com test ok!”); delay(2S)第2页/共50页回顾回顾 /初始化 SysTickPeriodSet(12000000UL); SysTickIntEnable(); IntMasterEnable(); SysTickEnable(); /中断服务程序void Sy

2、sTick_ISR(void) /send “com test ok” 注意:更改中断向量表 startup_ewarm.c 第3页/共50页通用定时器通用定时器(Timer)(Timer) 8962集成有 4 个通用定时器(General-Purpose Timer Module,GPTM),分别称为 Timer0、Timer1、Timer2 和 Timer3。 每个 Timer 模块都可以配置为一个 32 位定时器或一个 32 位 RTC 定时器用于捕获;也可以拆分为两个16 位的定时/计数器 TimerA 和 TimerB。 每个 Timer 模块可以被配置为独立运行的定时器、事件计数器

3、或 PWM。Timer 总体特性总体特性第4页/共50页通用定时器通用定时器(Timer)(Timer)Timer 功能结构图功能结构图第5页/共50页通用定时器通用定时器(Timer)(Timer)关于定时器的几个概念关于定时器的几个概念增计数与减计数模式增计数与减计数模式以定时以定时1000S 为例,假设为例,假设8962每秒每秒 计数一次,如何实现实时?计数一次,如何实现实时?第6页/共50页通用定时器通用定时器(Timer)(Timer)关于定时器的几个概念关于定时器的几个概念硬件定时器与软件定时器硬件定时器与软件定时器第7页/共50页通用定时器通用定时器(Timer)(Timer)关

4、于定时器的几个概念关于定时器的几个概念单次触发与周期触发单次触发与周期触发连续的单次触发等同于周期触发!第8页/共50页通用定时器通用定时器(Timer)(Timer)关于定时器的几个概念关于定时器的几个概念16位定时器与位定时器与32位定时器位定时器16位定时器 最大初值 0 xffff32位定时器 最大初值 0 xffff ffff 两个16位定时器级联为32位定时器,而32位定时器可以拆分为两个16位定时器!1第9页/共50页通用定时器通用定时器(Timer)(Timer)关于定时器的几个概念关于定时器的几个概念16位输入边沿计数捕获位输入边沿计数捕获Count 用于计数, 信号的频率是

5、多少?第10页/共50页通用定时器通用定时器(Timer)(Timer)关于定时器的几个概念关于定时器的几个概念16位输入边沿定时捕获位输入边沿定时捕获信号的频率是多少?或者说它的周期是多少?第11页/共50页通用定时器通用定时器(Timer)(Timer)关于定时器的几个概念关于定时器的几个概念16位位PWM16位PWM的用途在哪里?第12页/共50页通用定时器通用定时器(Timer)(Timer) #define SysCtlPeriEnable SysCtlPeripheralEnable SysCtlPeriEnable(SYSCTL_PERIPH_TIMERn); Timer 库函数

6、库函数使能使能第13页/共50页通用定时器通用定时器(Timer)(Timer)Timer 库函数库函数 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)ulConfig:Timer模块的配置 在32位模式下应当取下列值之一: TIMER_CFG_32_BIT_OS /32位单次触发定时器 TIMER_CFG_32_BIT_PER /32位周期定时器 TIMER_CFG_32_RTC /32位RTC 定时器 实例:配置Timer0为32位单次触发定时器 TimerConfigure(TIMER0_BASE,

7、TIMER_CFG_32_BIT_OS); 第14页/共50页通用定时器通用定时器(Timer)(Timer)Timer 库函数库函数 配置void TimerConfigure(unsigned long ulBase, unsigned long ulConfig)在16位模式下,配置 TimerA 的方法是参数 ulConfig 先取值 TIMER_CFG_16_BIT_PAIR 再与下列值之一进行“或运算”的组合形式: TIMER_CFG_A_ONE_SHOT /TimerA为单次触发定时器 TIMER_CFG_A_PERIODIC /TimerA为周期定时器 TIMER_CFG_A_

8、CAP_COUNT /TimerA为边沿事件计数器 TIMER_CFG_A_CAP_TIME /TimerA为边沿事件定时器 TIMER_CFG_A_PWM /TimerA为PWM输出 在Timer0当中,配置TimerA为单次触发定时器(不配置TimerB) TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_ONE_SHOT); 如果要求配置TimerB,又该如何处置?第15页/共50页通用定时器通用定时器(Timer)(Timer)Timer 库函数库函数 配置void TimerConfigure(unsign

9、ed long ulBase, unsigned long ulConfig)配置 TimerB 的方法是参数 ulConfig 先取值 TIMER_CFG_16_BIT_PAIR 再与下列值之一进行“或运算”的组合形式: TIMER_CFG_B_ONE_SHOT /TimerB为单次触发定时器 TIMER_CFG_B_PERIODIC /TimerB为周期定时器 TIMER_CFG_B_CAP_COUNT /TimerB为边沿事件计数器 TIMER_CFG_B_CAP_TIME /TimerB为边沿事件定时器 TIMER_CFG_B_PWM /TimerB为PWM输出 在Timer0当中,配

10、置TimerB为单次触发定时器(不配置TimerA) TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_ONE_SHOT); 第16页/共50页通用定时器通用定时器(Timer)(Timer)函数函数名称名称TimerLoadSet( )功能功能设置Timer的装载值原型原型void TimerLoadSet(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue)参数参数ulTimer:指定的Timer,取值TIMER_A、TIMER_B

11、或TIMER_BOTH ulValue:32位装载值(32位模式)或16位装载值(16位模式)库函数装载初值第17页/共50页通用定时器通用定时器(Timer)(Timer)TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); /设置32位Timer0初值,定时1.5s 主频6M 注意: Timer 模块的功能在总体上可以分成 32 位模式和 16 位模式两大类。在 32 位模式下,对 Timer 的各项操作,如装载初值、运行控制、中断控制等,都用对 TimerA的操作作为总体上的 32 位控制。 库函数装载初值第18页/共50页通用定时器通用定时器(T

12、imer)(Timer)库函数运行控制函数名称函数名称TimerEnable( )功能功能使能Timer计数(即启动启动Timer)原型原型void TimerEnable(unsigned long ulBase, unsigned long ulTimer)参数参数ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 函数名称函数名称TimerDisable( )功能功能禁制Timer计数(即停止停止Timer)原型原型void TimerDisable(unsign

13、ed long ulBase, unsigned long ulTimer)参数参数ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 第19页/共50页通用定时器通用定时器(Timer)(Timer)库函数中断控制函数名函数名称称TimerIntDisable( )功能功能禁止Timer的中断模块原型原型void TimerIntDisable(unsigned long ulBase, unsigned long ulIntFlags) 参数参数ulBase:Tim

14、er模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulIntFlags:被禁止的中断源,取值与中断使能当中的参数ulIntFlags相同 返回返回无第20页/共50页通用定时器通用定时器(Timer)(Timer)库函数中断控制函数名函数名称称TimerIntEnable( )功能功能使能Timer的中断原型原型void TimerIntEnable(unsigned long ulBase, unsigned long ulIntFlags) 参数参数ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulIntFlags:被使能的中断源,应

15、当取下列值之一或者它们之间的任意“或运算”组合形式: TIMER_TIMA_TIMEOUT /TimerA超时中断 TIMER_CAPA_MATCH /TimerA捕获模式匹配中断 TIMER_CAPA_EVENT /TimerA捕获模式边沿事件中断 TIMER_TIMB_TIMEOUT /TimerB超时中断 TIMER_CAPB_MATCH /TimerB捕获模式匹配中断 TIMER_CAPB_EVENT /TimerB捕获模式边沿事件中断 TIMER_RTC_MATCH /RTC匹配中断 第21页/共50页通用定时器通用定时器(Timer)(Timer)库函数中断控制函数名函数名称称Ti

16、merIntStatus( )功能功能获取当前Timer的中断状态原型原型unsigned long TimerIntStatus(unsigned long ulBase, tBoolean bMasked) 参数参数ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) bMasked:一般取值true 返回返回中断状态,数值与中断使能表的参数ulIntFlags相同第22页/共50页通用定时器通用定时器(Timer)(Timer)库函数中断控制函数函数名称名称TimerIntClear( )功能功能清除Timer的中断原型原型void TimerIntCle

17、ar(unsigned long ulBase, unsigned long ulIntFlags) 参数参数ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)ulIntFlags:被清除的中断源,取值与中断使能表中的参数相同 第23页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位单次触发 采用定时器timer0 的32位单次触发模式,触发条件是 检测到KEY按下时;定时器装置初值1.5秒;同时使能超时中断,在中断服务程序中翻转 LED亮灭状态。第24页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位单次触发#in

18、clude “systemInit.h” /工作目录#include /系统目录 必须添加/ 定义LED#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2/ 定义KEY#define KEY_PERIPH SYSCTL_PERIPH_GPIOE#define KEY_PORT GPIO_PORTE_BASE#define KEY_PIN GPIO_PIN_2 /PE2为KEY1键连接第25页/共50页通用定时器通用定时器(Timer)(Timer)实例:

19、32位单次触发 clockInit(); /时钟初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); /使能LED所在的GPIO端口 GPIOPinTypeOut(LED_PORT, LED_PIN); /设置LED所在管脚为输出 GPIOPinWrite(LED_PORT, LED_PIN, 1 2); /熄灭LED SysCtlPeriEnable(KEY_PERIPH); /使能KEY所在的GPIO端口 GPIOPinTypeIn(KEY_PORT, KEY_PIN); /设置KEY所在管脚为输入 SysCtlPeriEnable(SYSCTL_PERIPH

20、_TIMER0); /使能Timer模块 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS); /配置 Timer0为32位单次触发第26页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位单次触发 TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /使能Timer超时中断 IntEnable(INT_TIMER0A); /使能Timer中断 IntMasterEnable(); /使能处理器中断 为什么 IntEnable(INT_TIMER0A),而不是IntEnable(IN

21、T_TIMER0)?第27页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位单次触发 for (;) if (GPIOPinRead(KEY_PORT, KEY_PIN) = 0 x00) /如果复位时按下KEY SysCtlDelay(10 * (TheSysClock / 3000); /延时,消除按键抖动 while (GPIOPinRead(KEY_PORT, KEY_PIN) = 0 x00); /等待按键抬起 SysCtlDelay(10 * (TheSysClock / 3000); /延时,消除松键抖动 TimerLoadSet(TIMER0_BASE,

22、TIMER_A, 9000000UL); /设置Timer初值,定时1.5s TimerEnable(TIMER0_BASE, TIMER_A); /使能Timer计数 GPIOPinWrite(LED_PORT, LED_PIN, 0 x00); /点亮LED,定时开始 第28页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位单次触发void Timer0A_ISR(void) unsigned char ucVal; unsigned long ulStatus; ulStatus = TimerIntStatus(TIMER0_BASE, true); /获取当前中

23、断状态 TimerIntClear(TIMER0_BASE, ulStatus); /清除全部中断状态 if (ulStatus & TIMER_TIMA_TIMEOUT) /如果是超时中断 ucVal = GPIOPinRead(LED_PORT, LED_PIN); /反转LED GPIOPinWrite(LED_PORT, LED_PIN, ucVal); 第29页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位周期触发 采用定时器timer0 的32位周期触发模式,触发条件无;定时器装置初值1.5秒;同时使能超时中断,在中断服务程序中翻转 LED亮灭状态。第30页

24、/共50页通用定时器通用定时器(Timer)(Timer)实例:32位周期触发#include “systemInit.h” /工作目录#include /系统目录 必须添加/ 定义LED#define LED_PERIPH SYSCTL_PERIPH_GPIOF#define LED_PORT GPIO_PORTF_BASE#define LED_PIN GPIO_PIN_2第31页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位周期触发 clockInit(); /时钟初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); /使能LED所在

25、的GPIO端口 GPIOPinTypeOut(LED_PORT, LED_PIN); /设置LED所在管脚为输出第32页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位周期触发 SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); /使能Timer模块 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); /配置Timer为32位周期定时器 TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); /设置Timer初值,定时1.5s 第33页/共50页通用定时器通

26、用定时器(Timer)(Timer)实例:32位周期触发 TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /使能Timer超时中断 IntEnable(INT_TIMER0A); /使能Timer中断 IntMasterEnable(); /使能处理器中断 TimerEnable(TIMER0_BASE, TIMER_A); /使能Timer计数 第34页/共50页通用定时器通用定时器(Timer)(Timer)实例:32位周期触发 void Timer0A_ISR(void) unsigned char ucVal; unsigned lon

27、g ulStatus; ulStatus = TimerIntStatus(TIMER0_BASE, true); /读取中断状态 TimerIntClear(TIMER0_BASE, ulStatus); /清除中断状态,重要! if (ulStatus & TIMER_TIMA_TIMEOUT) /如果是Timer超时中断 ucVal = GPIOPinRead(LED_PORT, LED_PIN); /反转LED GPIOPinWrite(LED_PORT, LED_PIN, ucVal); 第35页/共50页看门狗概述 watchdog,全称watchdog timer,中文名称叫做“

28、看门狗”。1、一种定时器2、超时中断可以引起系统重起信号(Reset Signal第36页/共50页看门狗概述 看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。第37页/共50页看门狗概述 设本系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,TiTp,在程序运行一周期后就“喂狗一次”,只要程序正常运行,定时器就不会溢出,若由于干扰等原因使系统不能喂狗,定时器将在Ti 时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控作用。第38页/共50页8962看门狗概述8962的看门狗定时器模块有以下特性: p 带可编程装载寄存器的 32 位倒计数器 p 二次超时特性二次超

29、时特性 p 带中断屏蔽的可编程中断产生逻辑 p 软件跑飞时由锁定寄存器提供保护 p 在调试过程中用户可控制看门狗暂停在调试过程中用户可控制看门狗暂停 第39页/共50页库函数函数名称函数名称WatchdogEnable( )功能功能使能看门狗定时器原型原型void WatchdogEnable(unsigned long ulBase)参数参数ulBase:看门狗定时器模块的基址,取值WATCHDOG_BASE第40页/共50页库函数函数名称函数名称WatchdogResetEnable( )功能功能使能看门狗定时器的复位功能原型原型void WatchdogResetEnable(unsig

30、ned long ulBase)参数参数ulBase:看门狗定时器模块的基址,取值WATCHDOG_BASE函数名称函数名称WatchdogResetDisable( )功能功能禁止看门狗定时器的复位功能原型原型void WatchdogResetDisable(unsigned long ulBase) 参数参数ulBase:看门狗定时器模块的基址,取值WATCHDOG_BASE禁止看门狗复位功能时,看门狗可以作为一般定时器使用!第41页/共50页库函数函数名称函数名称WatchdogStallEnable( )功能功能允许在调试过程中暂停看门狗定时器原型原型void WatchdogSta

31、llEnable(unsigned long ulBase)参数参数ulBase:看门狗定时器模块的基址,取值WATCHDOG_BASE第42页/共50页库函数函数函数名称名称WatchdogReloadSet( )功能功能设置看门狗定时器的重装值原型原型void WatchdogReloadSet(unsigned long ulBase, unsigned long ulLoadVal) 参数参数ulBase:看门狗定时器模块的基址,取值WATCHDOG_BASE ulLoadVal:32位装载值 第43页/共50页库函数函数名称函数名称WatchdogLock( )功能功能使能看门狗定时器的锁定机制原型原型void WatchdogLock(unsig

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论