PAGE1
PAGE1
LPC1768定时器和计数器
定时器和计数器概述
LPC1768微控制器配备了多个定时器和计数器,这些定时器和计数器可以用于各种任务,如生成精确的时间延迟、测量外部信号的时间间隔、产生PWM信号等。LPC1768提供了四个通用定时器/计数器(Timer0、Timer1、Timer2和Timer3),每个定时器都具有多种工作模式和丰富的功能。
定时器的工作模式
LPC1768的定时器可以配置为以下几种工作模式:
定时器模式:用于生成固定的时间间隔。
计数器模式:用于测量外部事件的频率或周期。
PWM输出模式:用于生成脉宽调制信号。
捕获模式:用于捕捉外部事件的时间戳。
定时器的主要寄存器
每个定时器都有多个寄存器,用于配置和控制其行为。主要寄存器包括:
TCR(TimerControlRegister):控制定时器的启动和停止。
PR(PrescaleRegister):设置预分频器值。
TC(TimerCounterRegister):当前定时器计数值。
PC(PrescaleCounterRegister):当前预分频器计数值。
MCR(MatchControlRegister):控制匹配事件时的行为。
MR0-MR3(MatchRegister0-3):匹配值寄存器。
TCR(TimerControlRegister):控制定时器的启动和停止。
CTCR(CounterControlRegister):配置定时器为计数器模式。
CR(CaptureRegister):捕捉时间戳。
CCR(CaptureControlRegister):配置捕捉事件。
定时器配置和初始化
在使用定时器之前,需要对其进行配置和初始化。以下是一个详细的步骤,说明如何配置并初始化LPC1768的定时器。
步骤1:使能定时器时钟
首先,需要使能定时器的时钟。这可以通过设置电源管理控制器(PCONP)寄存器中的相应位来实现。
//使能Timer0的时钟
LPC_SC-PCONP|=(122);//PCONP位22对应Timer0
步骤2:配置定时器模式
接下来,需要配置定时器的工作模式。例如,将Timer0配置为定时器模式。
//配置Timer0为定时器模式
LPC_TIM0-CTCR=0x00;//0x00表示定时器模式
步骤3:设置预分频器
预分频器用于降低定时器的计数频率。例如,设置预分频器为1000,则定时器的计数频率为系统时钟频率除以1001。
//设置Timer0的预分频器为1000
LPC_TIM0-PR=1000;
步骤4:设置匹配值
匹配值寄存器用于设置定时器在达到某个特定值时触发事件。例如,设置Timer0的匹配值为1000000,表示定时器计数到1000000时触发中断。
//设置Timer0的匹配值为1000000
LPC_TIM0-MR0=1000000;
步骤5:配置匹配控制
匹配控制寄存器用于配置定时器在匹配事件时的行为。例如,配置Timer0在匹配值达到时触发中断。
//配置Timer0在匹配值达到时触发中断
LPC_TIM0-MCR=(10);//位0表示MR0事件时触发中断
步骤6:使能定时器中断
使能定时器中断,确保中断服务例程(ISR)可以被调用。
//使能Timer0的中断
NVIC_EnableIRQ(TIMER0_IRQn);
步骤7:启动定时器
最后,启动定时器。
//启动Timer0
LPC_TIM0-TCR=(10);//位0表示启动定时器
定时器中断服务例程
定时器中断服务例程(ISR)是定时器达到匹配值时执行的代码。以下是一个简单的ISR示例,用于在定时器中断时切换LED的状态。
#includeLPC17xx.h
#includeboard.h
//定义LED引脚
#defineLED_PORTLPC_GPIO0
#defineLED_PIN16
voidTIMER0_IRQHandler(void){
//清除中断标志
LPC_TIM0-IR=1;
//切换LED状态
if(LED_PORT-FIOSET==(1LED_PIN)){
LED_PORT-FIOCLR=(1LED_PIN);
}else{
LED_PORT-FIOSET=