第八章资料

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 定时器是用来对外设时钟PCLK进行计数
Baidu Nhomakorabea
• 计数器是对外部脉冲信号进行计数
• 每个定时/计数器还包含1个捕获输入,用来在输入信号变化时捕
获定时器瞬时值和产生中断
• 定时器还可以用于PWM输出
8.2 定时计数器引脚概述
引脚 P0_2 P1_8 P0_8 P0_9 P0_10 P1_9 P1_10 名称 CT16B0_CAP0 类型 描述 当捕获管脚上出现跳变时,可以将定时器/计数器中的值载入捕 获寄存器中,也可以选择产生一个中断。
8.4.1 定时功能相关寄存器
预分频计数器PC、预分频寄存器PR及定时计数器TC之间的关系如图所示。
定时计数器、外设时钟、预分频寄存器之间的计算公式
定时器的计数频率 = FPCLK / (PR+1)
8.4.1 定时功能相关寄存器
4.匹配寄存器0/1/2/3(MR0/ MR1/ MR2/ MR3) 每当TC的值发生变化时,都会与4个匹配寄存器进行比较。当TC 值与其中一个匹配寄存器的值相等时,就会触发相应的操作。 匹配后发生的操作都在匹配控制寄存器 MCR 中设置,这些操作 包括中断、复位和停止定时计数器器。
8.4.1 定时功能相关寄存器
位 6 7 功能 MR2I MR2R 描述
置1:当MR2于TC值匹配时产生中断; 置0:当MR2于TC值匹配时禁能中断 置1:当MR2于TC值匹配时使TC复位 置0:当MR0于TC值匹配时不使TC复位
置1:当MR2于TC值匹配时将使TC和PC同时停止工作,并使TCR[0]置0 置0:当MR2于TC值匹配时将使TC和PC继续工作 置1:当MR3于TC值匹配时产生中断; 置0:当MR3于TC值匹配时禁能中断 置1:当MR3于TC值匹配时使TC复位 置0:当MR3于TC值匹配时不使TC复位 置1:当MR3于TC值匹配时将使TC和PC同时停止工作,并使TCR[0]置0 置0:当MR3于TC值匹配时将使TC和PC继续工作 保留,用户软件不应向保留位写1。
输入
CT16B1_CAP0 CT16B0_MAT0 CT16B0_MAT1 CT16B0_MAT2 CT16B1_MAT0 CT16B1_MAT1 输出
当匹配寄存器MR[3:0]的值与定时器计数器TC值相等时,相应的 输出可以翻转电平、变低、变高或不执行任何操作。 外部匹配寄存器(EMR)和PWM控制寄存器(PWMCON)控制
当匹配寄存器MR[3:0]的值与定时器计数器TC值相等时,相应的输出可
以翻转电平、变低、变高或不执行任何操作。 外部匹配寄存器(EMR)和PWM控制寄存器(PWMCON)控制该引脚
输出的功能。
P1_3
P1_4
CT32B1_MAT2
CT32B1_MAT3
8.3 时钟与功率控制
• 输入到 16 位和 32 位定时器的外设时钟( PCLK )由系统时钟直接
8.4.2 定时实例
void TIMER32_0_IRQHandler (void) { LPC_TMR32B0->IR = 0x01; //向匹配通道0写1清除中断 if (LPC_GPIO1->DATA & LED) { LEDON(); //点亮LED } else { LEDOFF(); //熄灭LED } } void Timer0Init (void) { LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 9); //使能TIM32B0时钟 LPC_TMR32B0->IR = 0x01; //MR0中断复位,即清中断(bit0:MR0, bit1:MR1, bit2:MR2, bit3:MR3, bit4:CP0) LPC_TMR32B0->PR = 0; //每一个PCLK加1 LPC_TMR32B0->MCR = 0x03; //MR0匹配时复位TC,并产生中断 LPC_TMR32B0->MR0 = SystemCoreClock; //匹配时间,也就是定时时间 LPC_TMR32B0->TCR = 0x01; //启动定时器:TCR[0]=1; NVIC_EnableIRQ(TIMER_32_0_IRQn); //使能中断 } int main(void) { LedInit(); Timer0Init(); while (1) ; }
出。
3.预分频计数器PC 32位预分频计数器用某个常量值来控制 PCLK的分频,再使其输入到定时计数器,预分频计数器在每个
PCLK周期加1。当它达到预分频寄存器PR中存储的值时,定时计数器TC再加1,预分频计数器PC将在下一
个PCLK复位。当PR=0时,TC每个PCLK加1,PR=1时,TC每2个PCLK加1,以此类推。
该引脚输出的功能。
8.2 定时计数器引脚概述
引脚 P1_5 P1_0 P1_6 P1_7 P0_1 P0_11 P1_1 P1_2 名称 CT32B0_CAP0 输入 CT32B1_CAP0 CT32B0_MAT0 CT32B0_MAT1 CT32B0_MAT2 CT32B0_MAT3 输出 CT32B1_MAT0 CT32B1_MAT1 类型 描述 当捕获管脚上出现跳变时,可以将定时器/计数器中的值载入捕获寄存器中, 也可以选择产生一个中断。
8 9 10
11 31:2
MI2S MR3I MR3R
MI3S -
8.4.1 定时功能相关寄存器
6. 中 断 寄 存 器 IR(TMR32B0IR/ TMR32B1IR/ TMR16B0IR/
TMR16B1IR)
中断寄存器包含1个用于显示捕获中断的位和4个用于显示匹配中
断的位。如果有中断产生,则IR中的相应位置位;否则,该位为0。
8.4.2 定时实例
2、利用中断方式定时实例 在下面的实例中,通过32位的定时器 0实现1秒定时,在中断服务函数中实 现LED灯每隔1秒钟闪亮一次。 #include "LPC11xx.h" //LPC1114头文件 #define LED (1ul << 0) #define LEDOFF() LPC_GPIO1->DATA |= LED //熄灭LED #define LEDON() LPC_GPIO1->DATA &= ~LED //点亮LED void LedInit() { LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); //使能IOCON时钟 LPC_IOCON->R_PIO1_0 &= ~0x07; LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); //禁能IOCON时钟 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); //使能GPIO时钟 LPC_GPIO1->DIR |= LED; //把P1.0设置为输出引脚 LPC_GPIO1->DATA |= LED; //把P1.0设置为高电平 }
8.4.1 定时功能相关寄存器
位 0 1 2 3 4 5 功能 MR0I MR0R MI0S MR1I MR1R MI1S 描述 置1:当MR0于TC值匹配时产生中断; 置0:当MR0于TC值匹配时禁能中断 置1:当MR0于TC值匹配时使TC复位 置0:当MR0于TC值匹配时不使TC复位 置1:当MR0于TC值匹配时将使TC和PC同时停止工作,并使TCR[0]置0 置0:当MR0于TC值匹配时将使TC和PC继续工作 置1:当MR1于TC值匹配时产生中断; 置0:当MR1于TC值匹配时禁能中断 置1:当MR1于TC值匹配时使TC复位 置0:当MR1于TC值匹配时不使TC复位 置1:当MR1于TC值匹配时将使TC和PC同时停止工作,并使TCR[0]置0 置0:当MR1于TC值匹配时将使TC和PC继续工作
提供。
• 系统上电时,16位和32位定时计数器的输入时钟默认是关闭的,
若需要使用定时计数器,必须先使能输入时钟,定时计数器的输
入时钟在系统 AHB 时钟控制寄存器( SYSAHBCLKCTRL )中设
置。
8.4
定时功能
8.4.1 定时功能相关寄存器
1.预分频寄存器PR
32位的预分频器指定了预分频计数器的最大计数值。 2.定时计数器TC 当预分频计数器到达计数的上限时,32位定时计数器加1。如果TC在到达计数上限之前没有复位,它将 一直计数到0xFFFFFFFF后再翻转到0x00000000。该事件不会产生中断。如果需要,可用匹配寄存器检查溢
8.4.2 定时实例
void T32B1_Init(void) { LPC_SYSCON->SYSAHBCLKCTRL |= (1<<10); //使能TIM32B1时钟 LPC_TMR32B1->IR = 0x01; //MR0中断复位,即清MR0的中断标识 //(bit0:MR0, bit1:MR1, bit2:MR2, bit3:MR3, bit4:CR0) LPC_TMR32B1->MCR = 0x04; //MR0中断产生时停止TC和PC,并使TCR[0]=0, 停止定时器工作 } void T32B1_DelayMs(uint16_t ms) { LPC_TMR32B1->TCR = 0x02; //复位定时器(bit1:写1复位) LPC_TMR32B1->PR = 0; //每一个PCLK加1 LPC_TMR32B1->MR0 = ms*(SystemCoreClock/1000); //匹配时间,也就是定时时间 LPC_TMR32B1->TCR = 0x01; //启动定时器:TCR[0]=1; while (LPC_TMR32B1->TCR & 0x01);//等待定时器计时时间到 } int main() { LedInit(); T32B1_Init(); while(1) { T32B1_DelayMs(1000); LED1_ON(); T32B1_DelayMs(1000); LED1_OFF(); } }
向对应的IR位写1会复位(清零)中断,写0无效。所以,在中断
服务函数中,可以通过IR的相应位来判断是哪一个中断产生。具体
的中断寄存器位描述如下表所示。
8.4.1 定时功能相关寄存器
位 功能 描述
0
1 2 3 4
MR0中断
MR1中断 MR2中断 MR3中断 CR0中断
匹配通道0的中断标志
匹配通道1的中断标志 匹配通道2的中断标志 匹配通道3的中断标志 捕获通道0事件的中断标志
1、无中断方式定时实例 在下面的实例中,通过32位的定时器1实现毫秒级定时,然后在主程序中调 用该函数,实现LED灯每隔1秒钟闪亮一次。 #include "lpc11xx.h" #define LED1_ON() LPC_GPIO1->DATA &= ~(1<<0) #define LED1_OFF() LPC_GPIO1->DATA |= (1<<0) void LedInit() { LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟 LPC_IOCON->R_PIO1_0 &= ~0x07; LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); // 使能GPIO时钟 LPC_GPIO1->DIR |= (1<<0); // 把P1.0设置为输出引脚 LPC_GPIO1->DATA |= (1<<0); // 把P1.0设置为高电平 }
第8章 LPC1114定时计数器
LPC1114定时计数器
LPC1114微处理器内部拥有2个16位和2个32位可编程定时/计数器, 每个定时器均具有一个相应的输入信号引脚和2~4个相应的输出信 号引脚,具有定时、计数、输入信号捕获功能,并且还可以设置为 脉冲宽度调制(PWM)模式。
8.1 定时计数器概述
31:5
-
保留
8.4.1 定时功能相关寄存器
7. 定 时 器 控 制 寄 存 器 TCR(TMR16B0TCR/ TMR16B1TCR/ TMR32B0TCR/ TMR32B1TCR) 定时器控制寄存器用来控制定时 /计数器的操作。具体的位描述 如表所示。
位 0 1 31:2 功能 描述
为1时,使能定时计数器和分频计数器; 计数器使能 为0时,禁能定时计数器和分频计数器。 计数器复位 为1时,使定时器计数器和预分频计数器复位。 保留,用户软件不应向保留位写 1。从保留位读出的值 未定义。
8.4.2 定时实例
定时功能是定时计数器最主要的功能之一,使用定时功能可以做延时
或计时等操作。在初始化时设定需要定时的时间,将值存入匹配寄存器
并开启定时计数器,当TC值与匹配寄存器的值相等时,可停止定时器,
随后进行其他操作。或者使系统进入定时计数器中断,在中断服务函数
中进行时间到达后的操作。
8.4.2 定时实例
8.4.1 定时功能相关寄存器
5. 匹 配 控 制 寄 存 器 MCR(TMR32B0MCR/ TMR32B1MCR/
TMR16B0MCR/ TMR16B1MCR)
匹配控制寄存器用于控制当其中一个匹配寄存器中的值于定时器
计数器的值相等时应执行的操作。这些动作包括产生中断、复位定 时/计数器或停止定时器,具体的位描述如表所示。
相关文档
最新文档