PAGE1
PAGE1
定时器与计数器
定时器与计数器概述
定时器和计数器是嵌入式系统中非常重要的外设,广泛用于各种应用程序中,如延时控制、脉冲测量、定时任务调度等。LPC1100系列单片机配备了多个定时器和计数器模块,这些模块提供了丰富的功能和灵活性,可以满足各种应用需求。
LPC1100系列单片机的定时器和计数器主要包括以下几种:
系统定时器(SysTick):用于提供系统级的时间基准。
通用定时器(GeneralPurposeTimer,GPT):用于实现多种定时和计数功能。
看门狗定时器(WatchdogTimer,WDT):用于防止系统因软件故障而死机。
系统定时器(SysTick)
系统定时器(SysTick)是ARMCortex-M0内核的一部分,主要用于提供一个周期性的中断源,以便实现系统级的延时和定时任务。SysTick定时器是一个24位递减计数器,可以配置为周期性中断或一次性中断。
SysTick定时器的基本配置
SysTick定时器的配置主要涉及以下几个步骤:
使能SysTick定时器:通过设置控制寄存器(STCTRL)的使能位。
配置定时器的时钟源:可以选择内部时钟或外部时钟。
设置定时器的周期:通过设置重装载寄存器(STRELOAD)。
清除计数器值:通过设置当前值寄存器(STCURRENT)。
代码示例
以下是一个简单的代码示例,用于配置SysTick定时器以每1秒产生一次中断,并在中断处理程序中实现一个LED的闪烁。
#includeLPC11xx.h
//定义LED端口和引脚
#defineLED_PORTLPC_GPIO0
#defineLED_PIN0
//SysTick中断处理函数
voidSysTick_Handler(void){
//切换LED状态
if(LED_PORT-DATA(1LED_PIN)){
LED_PORT-DATA=~(1LED_PIN);
}else{
LED_PORT-DATA|=(1LED_PIN);
}
}
//配置SysTick定时器
voidSysTick_Config(uint32_tticks){
if(ticks0){
//使能SysTick定时器
SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk;
//选择内部时钟
SysTick-CTRL|=SysTick_CTRL_CLKSOURCE_Msk;
//配置中断使能
SysTick-CTRL|=SysTick_CTRL_TICKINT_Msk;
//设置重装载值
SysTick-LOAD=(ticks-1);
//清除当前值
SysTick-VAL=0;
}
}
intmain(void){
//配置LED引脚为输出
LED_PORT-DIR|=(1LED_PIN);
//配置SysTick定时器,每1秒产生一次中断
SysTick_Config(SystemCoreClock/1000);//假设系统时钟为12MHz
while(1){
//主循环
}
}
通用定时器(GPT)
通用定时器(GPT)是LPC1100系列单片机中功能较为丰富的定时器模块。LPC1100系列提供了多个GPT模块,每个模块都可以配置为定时器或计数器模式,支持多种中断和触发方式。
GPT的基本配置
通用定时器的配置主要涉及以下几个步骤:
使能定时器时钟:通过设置时钟控制寄存器(SYSAHBCLKCTRL)。
配置定时器模式:可以选择定时器模式或计数器模式。
设置定时器的预分频器:通过设置预分频寄存器(PR)。
设置定时器的匹配值:通过设置匹配寄存器(MR0,MR1,MR2,MR3)。
使能中断:通过设置中断控制寄存器(MCR)。
代码示例
以下是一个简单的代码示例,用于配置GPT定时器以每1秒产生一次中断,并在中断处理程序中实现一个LED的闪烁。
#includeLPC11xx.h
//定义LED端口和引脚
#defineLED_PORTLPC_GPIO0
#defineLED_PIN0
//GPT中断处