当前位置:文档之家› ARM 通用定时器

ARM 通用定时器


关于定时器的几个概念 硬件定时器与软件定时器
1000
1000 i++
i--
0 初值 结束 初值 结束
0
第8页
18:12
通用定时器(Timer)
关于定时器的几个概念 单次触发与周期触发
load
load
load
load
load
连续的单次触发等同于周期触发!!!!!
第9页
18:12
通用定时器(Timer)
关于定时器的几个概念 16位定时器与32位定时器 16位定时器 最大初值 0xffff
32位定时器 最大初值 0xffff ffff
两个16位定时器级联为32位定时器,而32位定 时器可以拆分为两个16位定时器!!1
第10页
18:12
通用定时器(Timer)
关于定时器的几个概念 16位输入边沿计数捕获
第20页 18:12
参数
函数名称 功能 原型 参数
通用定时器(Timer)
库函数——中断控制
函数名 称 功能 原型 TimerIntDisable( ) 禁止Timer的中断模块 void TimerIntDisable(unsigned long ulBase, unsigned long ulIntFlags) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1 、2或3) ulIntFlags:被禁止的中断源,取值与中断使能当中的参数 ulIntFlags相同 无
第18页 18:12
参数
通用定时器(Timer)
库函数——装载初值
TimerLoadSet(TIMER0_BASE, TIMER_A, 9000000UL); //设置32位Timer0初值,定时1.5s 主频6M
注意: Timer 模块的功能在总体上可以分成 32 位模式和 16 位模式两大类。在 32 位模式下,对 Timer 的各项操作,如装载初 值、运行控制、中断控制等,都用对 TimerA的操作作为总体上的 32 位控制。
第5页
18:12
通用定时器(Timer)
Timer 功能结构图
第6页
18:12
通用定时器(Timer)
关于定时器的几个概念 增计数与减计数模式 以定时1000S 为例,假设8962每秒 计数一次,如何实现实时?
1000 i++ 1000
i--
ห้องสมุดไป่ตู้
0 初值 结束 初值 结束
0
第7页
18:12
通用定时器(Timer)
delay(2S)
}
第3页
18:12
回顾
//初始化 SysTickPeriodSet(12000000UL); SysTickIntEnable(); IntMasterEnable(); SysTickEnable();
//中断服务程序 void SysTick_ISR(void) { //send “com test ok” } 注意:更改中断向量表 startup_ewarm.c
第14页
18:12
通用定时器(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 定时器
第19页
18:12
通用定时器(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(unsigned long ulBase, unsigned long ulTimer) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH
实例:配置Timer0为32位单次触发定时器 TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS);
第15页
18:12
通用定时器(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_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,又该如何处置????
1S
Count 用于计数, 信号的频率是多少?
第11页
18:12
通用定时器(Timer)
关于定时器的几个概念 16位输入边沿定时捕获
0xffff
0xffff
Tcnt_old
Tcnt_new
0x0
0x0
信号的频率是多少?或者说它的周期是多少?
第12页 18:12
通用定时器(Timer)
关于定时器的几个概念 16位PWM
参数 返回
第21页
18:12
通用定时器(Timer)
库函数——中断控制
函数名 称 TimerIntEnable( )
功能
原型
使能Timer的中断
void TimerIntEnable(unsigned long ulBase, unsigned long ulIntFlags) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulIntFlags:被使能的中断源,应当取下列值之一或者它们之间的任 意“或运算”组合形式: 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匹配中断
实例:32位单次触发
#include “systemInit.h” #include <timer.h> // 定义LED #define LED_PERIPH #define LED_PORT #define LED_PIN // 定义KEY #define KEY_PERIPH #define KEY_PORT #define KEY_PIN //工作目录 //系统目录 必须添加
第17页
18:12
通用定时器(Timer)
库函数——装载初值
函数 名称 功能 原型
TimerLoadSet( ) 设置Timer的装载值 void TimerLoadSet(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或 TIMER_BOTH ulValue:32位装载值(32位模式)或16位装载值(16 位模式)
第4页 18:12
通用定时器(Timer)
Timer 总体特性
8962集成有 4 个通用定时器(General-Purpose Timer Module,GPTM), 分别称为 Timer0、Timer1、Timer2 和 Timer3。 每个 Timer 模块都可以配置为一个 32 位定时器或一个 32 位 RTC 定时器用 于捕获;也可以拆分为两个16 位的定时/计数器 TimerA 和 TimerB。 每个 Timer 模块可以被配置为独立运行的定时器、事件计数器或 PWM。
ton ton ton
tpwm
tpwm
tpwm
T1_per=tpwm T1_cmpr=ton
16位PWM的用途在哪里?
第13页 18:12
通用定时器(Timer)
Timer 库函数——使能 #define SysCtlPeriEnable SysCtlPeripheralEnable SysCtlPeriEnable(SYSCTL_PERIPH_TIMERn);
TimerIntClear( )
参数
第24页
相关主题