首页 > 代码库 > 对cortex –M0芯片LPC11C14XX中的32位定时器使用的一点认识
对cortex –M0芯片LPC11C14XX中的32位定时器使用的一点认识
作者:杨老师,华清远见嵌入式学院讲师。
在LPC11CXX系列的芯片中有2个32位的定时器,可以用来定时或者计数使用。具有1路32位的捕获通 道,当输入信号发生跳变时可以捕获定时器当前的值,也可以产生中断。具有4路外部匹配寄存器和4路外部输出寄存器。而且每个寄存器可以最大允许3个匹配输 出用来作为单边沿PWM输出。
一、定时器初始化时需要配置的寄存器。
IOCONFIG:通过配置对应的引脚寄存器来设置和定时器相关的引脚。
SYSAHBCLKCTRL:该寄存器用来开启选择的定时器的时钟。
TMR32B0TCR:控制 定时器和计数器 使能和复位控制。该寄存器一般放到最后来设置。
TMR32B0MR0:用来设置匹配寄存器0的匹配值。
TMR32B0CCR: 用来设置外部捕获发生的条件和捕获之后是否要产生中断。
TMR32B0CR0:当发生外部捕获时,用来装载TC寄存器的值。
TMR32B0EMR:用来获得匹配寄存器和对应的引脚的电平(引脚关联,在IOCONFIG中设置),用 来控制当匹配寄存器的值和TC匹配时对应的引脚要做什么动作(电平拉高、拉低、反转)。不管对应的引脚有没有和该寄存器中的0-3位中的某位关联,当发生 匹配时0-3位中的某位的值都会根据设置来发生改变(拉高、拉低、反转)。如果引脚和该位设置了关联,那么对应的引脚的电平也会变化。
TMR32B0CTCR:用来开启用来选择工作模式(定时器/计数器),并且如果选择计数器模式,那么TMR32B0CCR寄存器的前三位都必须为0。
TMR32B0PWMC:用来设置PWM模式,通常用MAT[0:2]来设置pwm的输出模式,而用MAT[3]来设置PWM的周期,因为MAT[3]没有引脚输出。
所有被单边沿控制的PWM的输出在每个周期的开始都是低电平(定时器的值为0),除非匹配值为0。当任何一 个匹配寄存器的MR值匹配TC(定时器的值)时,该PWM的输出电平都被拉为高电平。可以设置MR3的值为PWM的周期,并且设置匹配MR3的值时要将定 时器复位,定时器复位后会将TC的值清零。当定时器复位之后,所有PWM输出的高电平都被清空。
如果设置成pwm输出,那么外部匹配寄存器EMR中的设置就不再起作用。
二、定时器初始化的具体示例
1.作为定时器使用的初始化:
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9); 用来开启定时器的时钟。
/*设置对应的引脚*/
LPC_IOCON->PIO1_5 &= ~0x07; /* Timer0_32 I/O config */
LPC_IOCON->PIO1_5 |= 0x02; /* Timer0_32 CAP0 */
LPC_IOCON->PIO1_6 &= ~0x07;
LPC_IOCON->PIO1_6 |= 0x02; /* Timer0_32 MAT0 */
LPC_IOCON->PIO1_7 &= ~0x07;
LPC_IOCON->PIO1_7 |= 0x02; /* Timer0_32 MAT1 */
LPC_IOCON->PIO0_1 &= ~0x07;
LPC_IOCON->PIO0_1 |= 0x02; /* Timer0_32 MAT2 */
/*设置外部匹配寄存器0的值*/
LPC_TMR32B0->MR0 = TimerInterval;
/*设置发生匹配时要做的动作*/
LPC_TMR32B0->EMR &= ~(0xFF<<4);
LPC_TMR32B0->EMR |= ((0x3<<4)|(0x3<<6)|(0x3<<8)|(0x3<<10));
/*用来设置外部捕获的条件*/
LPC_TMR32B0->CCR = (0x1<<0)|(0x1<<2);
/*设置外部匹配寄存器3值*/
LPC_TMR32B0->MCR = 3;
/*使能定时器中断*/
NVIC_EnableIRQ(TIMER_32_0_IRQn);
2.作为pwm输出时的初始化:
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<10);
/*设置外部匹配寄存器0的引脚。*/
LPC_IOCON->R_PIO1_1 &= ~0x07;
LPC_IOCON->R_PIO1_1 |= 0x03; /* Timer1_32 MAT0 */
/*设置外部匹配寄存器3引脚。*/
LPC_IOCON->PIO1_4 &= ~0x07;
LPC_IOCON->PIO1_4 |= 0x02; /* Timer1_32 MAT3 */
/* 设置为PWM输出模式*/
LPC_TMR32B1->PWMC = (1<<3)|(1 << 0);
/*设置匹配值*/
LPC_TMR32B1->MR3 = period;
LPC_TMR32B1->MR0 = period/2;
LPC_TMR32B1->MCR = 1<<10; /* MR3匹配时要产生定时器复位*/
本文出自 “嵌入式学习天地” 博客,请务必保留此出处http://farsight.blog.51cto.com/1821374/1568783
对cortex –M0芯片LPC11C14XX中的32位定时器使用的一点认识