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为32位单次触发定时器
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS);
// 配置Timer1为32位周期定时器
TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER);
// 配置Timer2为32位RTC定时器
TimerConfigure(TIMER2_BASE, TIMER_CFG_32_RTC);
// 在Timer0当中,配置TimerA为单次触发定时器(不配置TimerB)
TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_ONE_SHOT);
// 在Timer0当中,配置TimerB为周期定时器(不配置TimerA)
TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PERIODIC);
示例
// 在Timer0当中,配置TimerA为单次触发定时器,同时配置TimerB为周期定时器 TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_ONE_SHOT | TIMER_CFG_B_PERIODIC);
// 在Timer1当中,配置TimerA为边沿事件计数器、TimerB为边沿事件定时器 TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_CAP_COUNT | TIMER_CFG_B_CAP_TIME);
// 在Timer2当中,TimerA、TimerB都配置为PWM输出 TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR |
TIMER_CFG_A_PWM | TIMER_CFG_B_PWM);
表1.2 函数TimerControlStall( )
功能 原型
控制Timer暂停运行(对32位RTC模式无效)
void TimerControlStall(unsigned long ulBase, unsigned long ulTimer, tBoolean bStall) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)
参数
ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH
在32位模式下只能取值TIMER_A,作为总体上的控制,而取值TIMER_B或TIMER_BOTH都无效。在16位模式下取值TIMER_A只对TimerA有效,取值TIMER_B只对TimerB有效,取
5
值TIMER_BOTH同时对TimerA和TimerB有效。 bStall:如果取值true,则在单步调试模式下暂停计数
返回
无
如果取值false,则在单步调试模式下继续计数
表1.3 函数TimerControlTrigger( )
功能 原型
控制Timer的输出触发功能使能或禁止
void TimerControlTrigger(unsigned long ulBase, unsigned long ulTimer, tBoolean bEnable) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)
参数
ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH bEnable:如果取值true,则使能输出触发
返回
无
如果取值false,则禁止输出触发
表1.4 函数TimerControlEvent( )
功能 原型
控制Timer在捕获模式中的边沿事件类型
void TimerControlEvent(unsigned long ulBase, unsigned long ulTimer, unsigned long ulEvent) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH ulEvent:指定的边沿事件类型,应当取下列值之一:
参数
TIMER_EVENT_POS_EDGE // 正边沿事件 TIMER_EVENT_NEG_EDGE // 负边沿事件
TIMER_EVENT_BOTH_EDGES // 双边沿事件(正边沿和负边沿都有效) 注:在16位输入边沿计数捕获模式下,可以取值3种边沿事件的任何一种,但在16位输入边沿定时模式下仅支持正边沿和负边沿,不能支持双边沿。
返回
无
表1.5 函数TimerControlLevel( )
功能 原型
控制Timer在PWM模式下的有效输出电平
void TimerControlLevel(unsigned long ulBase, unsigned long ulTimer, tBoolean bInvert) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)
参数
ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH bInvert:当取值false时PWM输出为高电平有效(默认)
返回
无
当取值true时输出低电平有效(即输出反相)
2. 计数值的装载与获取
函数TimerLoadSet( )用来设置Timer的装载值。装载寄存器与计数器不同,它是独立存
在的。在调用TimerEnable( )时会自动把装载值加载到计数器里,以后每输入一个脉冲计数
6
器值就加1或减1(取决于配置的工作模式),而装载寄存器不变。另外,除了单次触发定时器模式以外,在计数器溢出时会自动重新加载装载值。函数TimerLoadGet( )用来获取装载寄存器的值。参见表1.6和表1.7。
函数TimerValueGet( )用来获取当前Timer计数器的值。但在16位输入边沿定时捕获模式里,获取的是捕获寄存器的值,而非计数器值。参见表1.8的描述。
表1.6 函数TimerLoadSet( )
功能 原型
设置Timer的装载值
void TimerLoadSet(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)
参数
ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH ulValue:32位装载值(32位模式)或16位装载值(16位模式)
返回
无
表1.7 函数TimerLoadGet( )
功能 原型 参数 返回
获取Timer的装载值
unsigned long TimerLoadGet(unsigned long ulBase, unsigned long ulTimer) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 32位装载值(32位模式)或16位装载值(16位模式)
表1.8 函数TimerValueGet( )
功能 原型 参数 返回
获取当前的Timer计数值(在16位输入边沿定时捕获模式下,获取的是捕获值) unsigned long TimerValueGet(unsigned long ulBase, unsigned long ulTimer) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 当前Timer计数值(在16位输入边沿定时捕获模式下,返回的是捕获值)
3. 运行控制
函数TimerEnable( )用来使能Timer计数器开始计数,而函数TimerDisable( )用来禁止计数。参见表1.9和表1.10的描述。
在32位RTC定时器模式下,为了能够使RTC开始计数,需要同时调用函数TimerEnable( )和TimerRTCEnable( )。函数TimerRTCEnable( )用于禁止RTC计数时。参见表1.11和表1.12的描述。
调用函数TimerQuiesce( )可以复位Timer模块的所有配置。这为快速停止Timer工作或重新配置Timer为另外的工作模式提供了一种简便的手段。参见表1.13的描述。
表1.9 函数TimerEnable( )
功能 原型
使能Timer计数(即启动Timer)
void TimerEnable(unsigned long ulBase, unsigned long ulTimer)
7
参数 返回
ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 无
表1.10 函数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 无
表1.11 函数TimerRTCEnable( )
功能 原型 参数 返回 说明
使能RTC计数
void TimerRTCEnable(unsigned long ulBase)
ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) 无
启动RTC时,除了要调用本函数外,还必须要调用函数TimerEnable( )
表1.12 函数TimerRTCDisable( )
功能 原型 参数 返回
禁止RTC计数
void TimerRTCDisable(unsigned long ulBase)
ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) 无
表1.13 函数TimerQuiesce( )
功能 原型 参数 返回
使Timer进入它的复位状态
void TimerQuiesce(unsigned long ulBase)
ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) 无
4. 匹配与预分频
函数TimerMatchSet( )和TimerMatchGet( )用来设置和获取Timer匹配寄存器的值。Timer开始运行后,当计数器的值与预设的匹配值相等时可以触发某种动作,如中断、捕获、PWM等。参见表1.14和表1.15的描述。
在Timer的16位单次触发/周期定时器模式下,输入到计数器的脉冲可以先经8位预分频器进行1~256分频,这样,16位的定时器就被扩展成了24位。该功能是可选的,预分频器默认值是0,即不分频。函数TimerPrescaleSet( )和TimerPrescaleGet( )用来设置和获取8位预分频器的值。参见表1.16和表1.17的描述。
8
表1.14 函数TimerMatchSet( )
功能 原型
设置Timer的匹配值
void TimerMatchSet(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)
参数
ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH ulValue:32位匹配值(32位RTC模式)或16位匹配值(16位模式)
返回
无
表1.15 函数TimerMatchGet( )
功能 原型 参数 返回
获取Timer的匹配值
unsigned long TimerMatchGet(unsigned long ulBase, unsigned long ulTimer) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 32位匹配值(32位RTC模式)或16位匹配值(16位模式)
表1.16 函数TimerPrescaleSet( )
功能 原型
设置Timer预分频值(仅对16位单次触发/周期定时模式有效)
void TimerPrescaleSet(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3)
参数
ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH
ulValue:8位预分频值(高24位无效),取值0~255,对应的分频数是1~256
返回
无
表1.17 函数TimerPrescaleGet( )
功能 原型 参数 返回
获取Timer预分频值(仅对16位单次触发/周期定时模式有效)
unsigned long TimerPrescaleGet(unsigned long ulBase, unsigned long ulTimer) ulBase:Timer模块的基址,取值TIMERn_BASE(n为0、1、2或3) ulTimer:指定的Timer,取值TIMER_A、TIMER_B或TIMER_BOTH 8位预分频值(高24位总是为0)
5. 中断控制
Timer模块有多个中断源,有超时中断、匹配中断和捕获中断3大类,又细分为7种。函数TimerIntEnable( )和TimerIntDisable( )用来使能或禁止一个或多个Timer中断源。详见表1.18和表1.19的描述。
函数TimerIntClear( )用来清除一个或多个Timer中断状态,函数TimerIntStatus( )用来获取Timer的全部中断状态。在Timer中断服务函数里,这两个函数通常要配合使用。参见表1.20和表1.21的描述。
函数TimerIntRegister( )和TimerIntUnregister( )用来注册和注销Timer的中断服务函数,参见表1.22和表1.23的描述。
9