PAGE1
PAGE1
LPC15xx系列定时器与计数器
定时器与计数器概述
LPC15xx系列单片机配备了多个定时器和计数器模块,这些模块在各种应用中起着关键作用,如周期性任务调度、延时生成、脉冲测量等。LPC15xx系列的定时器和计数器模块主要包括通用定时器(GeneralPurposeTimer,GPT)、系统定时器(SysTickTimer)以及脉宽调制定时器(PWMTimer)等。
通用定时器(GPT)
通用定时器(GPT)是LPC15xx系列中最常用的定时器模块之一。它提供了多个独立的定时器通道,每个通道可以配置为定时器或计数器模式。GPT的主要功能包括:
生成周期性中断
产生精确的延时
测量外部事件的间隔时间
生成PWM信号
系统定时器(SysTickTimer)
系统定时器(SysTickTimer)是ARMCortex-M3内核的一部分,主要用于操作系统定时器任务。它是一个24位的递减计数器,当计数器递减到0时,会产生一个中断。SysTickTimer的主要功能包括:
生成操作系统的时间片
产生周期性的中断
脉宽调制定时器(PWMTimer)
脉宽调制定时器(PWMTimer)用于生成PWM信号,这些信号在电机控制、LED亮度调节等应用中非常常见。PWMTimer的主要功能包括:
生成可配置频率和占空比的PWM信号
支持多个PWM通道
GPT的配置与使用
GPT寄存器
GPT模块通过一系列寄存器进行配置和控制。主要寄存器包括:
TimerControlRegister(TCR):控制定时器的启动和停止。
TimerPrescaleRegister(PR):设置定时器的预分频值。
TimerCounter(TC):定时器的当前计数值。
TimerMatchRegister(TCx):匹配寄存器,用于生成中断或停止定时器。
TimerCaptureRegister(TCR):捕获寄存器,用于记录外部事件的时间戳。
TimerInterruptRegister(TINT):中断控制寄存器,用于配置中断使能和状态。
GPT配置步骤
初始化定时器:配置定时器的时钟源和预分频值。
设置匹配寄存器:配置定时器在特定计数值时产生中断。
使能中断:配置中断请求,确保定时器中断能够被处理器响应。
启动定时器:通过TCR寄存器启动定时器。
示例代码:配置GPT生成周期性中断
以下是一个示例代码,配置GPT生成每1秒一次的周期性中断。
#includeLPC15xx.h
#defineGPTIMER0_BASE(0x4001C000)
#defineLPC_GPTIMER0((LPC_GPTIMER_TypeDef*)GPTIMER0_BASE)
//定义中断处理函数
voidGPT_IRQHandler(void){
//清除中断标志
LPC_GPTIMER0-TISR|=(10);//清除匹配中断0
//处理中断
//例如:闪烁LED
LPC_GPIO_PORT-SET1[0]=(115);//设置LED高电平
LPC_GPIO_PORT-CLR1[0]=(115);//设置LED低电平
}
voidGPT_Init(void){
//使能GPT0时钟
LPC_SYSCON-SYSAHBCLKCTRL|=(112);//使能GPT0时钟
//配置GPT0为定时器模式
LPC_GPTIMER0-TCR=0x00;//停止定时器
LPC_GPTIMER0-CTCR=0x00;//选择定时器模式
//设置预分频值
LPC_GPTIMER0-PR=0x00FF;//预分频值,例如1000
//设置匹配寄存器
LPC_GPTIMER0-TC0=(SystemCoreClock/1000)*1000;//1秒中断
//使能中断
NVIC_EnableIRQ(GPT0_IRQn);//使能GPT0中断
LPC_GPTIMER0-TCCR|=(10);//使能匹配中断0
//启动定时器
LPC_GPTIMER0-TCR|=0x01;//启动定时器
}
intmain(void){
//初始化GPIO
LPC_SY