PAGE1
PAGE1
LPC1100系列的定时器和计数器
定时器和计数器概述
定时器和计数器是单片机中非常重要的外设,广泛应用于各种嵌入式系统中。LPC1100系列单片机集成了多个定时器和计数器,这些外设可以用于生成精确的时间间隔、测量时间、产生脉冲信号等。本节将详细介绍LPC1100系列定时器和计数器的原理和使用方法。
定时器和计数器的基本原理
1.定时器的工作原理
定时器通过内部或外部时钟源进行计数,当计数值达到预设的值时,产生中断或触发其他事件。LPC1100系列单片机的定时器可以配置为多种模式,包括自由运行模式、周期模式和单次模式。
自由运行模式:计数器从0开始计数,达到最大值后溢出,然后重新从0开始计数。
周期模式:计数器从0开始计数,达到预设值后产生中断,并重新从0开始计数。
单次模式:计数器从0开始计数,达到预设值后产生中断,然后停止计数。
2.计数器的工作原理
计数器通常用于测量外部事件的频率或数量。LPC1100系列单片机的计数器可以配置为上升沿计数、下降沿计数或双沿计数。计数器的时钟源可以是内部时钟或外部输入信号。
3.定时器和计数器的寄存器
LPC1100系列单片机的定时器和计数器通过一组寄存器进行配置和控制。主要寄存器包括:
控制寄存器(CTCR):用于配置定时器的工作模式。
匹配寄存器(MATx):用于设置定时器产生中断或事件的匹配值。
计数寄存器(TCR):用于控制定时器的启动和停止。
计数器寄存器(TC):存储当前的计数值。
预分频寄存器(PR):用于设置计数器的预分频值。
定时器的配置和使用
1.定时器的初始化
在使用定时器之前,需要进行初始化配置。以下是一个简单的定时器初始化代码示例,配置定时器0为周期模式,并设置中断时间为1秒。
#includeLPC11xx.h
voidTimer0_Init(void){
//使能定时器0时钟
LPC_SCU-SYSAHBCLKCTRL|=(17);
//重置定时器0
LPC_SCU-PRESETCTRL|=(17);
LPC_SCU-PRESETCTRL=~(17);
//设置定时器0为周期模式
LPC_TMR32B0-CTCR=0x01;
//设置预分频值,假设系统时钟为12MHz,预分频值为11999,计数频率为1kHz
LPC_TMR32B0-PR=11999;
//设置匹配寄存器,匹配值为10000,即1秒
LPC_TMR32B0-MR0=10000;
//使能匹配中断
LPC_TMR32B0-MCR=0x03;//在匹配0时产生中断并复位计数器
//使能定时器0中断
NVIC_EnableIRQ(TIMER32_0_IRQn);
//启动定时器0
LPC_TMR32B0-TCR=0x01;
}
//定时器0中断处理函数
voidTIMER32_0_IRQHandler(void){
//清除中断标志
LPC_TMR32B0-IR=0x01;
//中断处理代码
//例如:LED切换状态
LPC_GPIO0-FIOSET=(118);//设置LED高电平
LPC_GPIO0-FIOCLR=(118);//清除LED高电平
}
2.定时器的中断处理
定时器中断处理函数需要在中断发生时执行相应的操作。在上述示例中,TIMER32_0_IRQHandler函数用于处理定时器0的中断,清除中断标志并切换LED状态。
3.定时器的其他模式
自由运行模式
自由运行模式下,计数器从0开始计数,达到最大值后溢出,然后重新从0开始计数。以下是一个配置定时器0为自由运行模式的示例代码:
voidTimer0_FreeRun_Init(void){
//使能定时器0时钟
LPC_SCU-SYSAHBCLKCTRL|=(17);
//重置定时器0
LPC_SCU-PRESETCTRL|=(17);
LPC_SCU-PRESETCTRL=~(17);
//设置定时器0为自由运行模式
LPC_TMR32B0-CTCR=0x00;
//设置预分频值,假设系统时钟为12MHz,预分频值为11999,计数频率为1kHz