问题描述:LPC是ARM7架构的通用型嵌入式处理器,适用于各种嵌入式设备应用。当然,其出现时间较早,与之后的ARM9,ARM10,ARM-Cortex系列相比在处理速度上是相对较慢的,但在价格上是有优势的,如果不是做很复杂的高端应用系统,ARM7在工业控制领域等许多方面都还是胜任的。LPC有四个定时器,定时器在应用中的作用很重要,比如常见的定时、计数功能,可以准确控制执行动作的间隔,控制发送数据的速率等方面都很有用,用作系统编程中的延时也是非常重要的一个应用。以下简单记录下LPC23xx定时器的一些用法等。
LPC23xx定时器:
Timer0/1/2/3的配置用到的寄存器有:PCONP寄存器的PCTIM0/1/2/3位,用于定时器的开关(对应位为1为开,0为关)。复位后,定时器0/1可用,定时器2/3禁用。与硬件时钟有关的寄存器,PCLK_SELO寄存器(对应的PCLK_TIMER0/1位),PCLK_SEL1寄存器(对应的PCLK_TIMER2/3位)。引脚复用配置,由于几乎每个引脚都复用几个功能,因此在寄存器PINSELn和PINMODEn中配置定时器引脚功能。定时器中断的设置,对于匹配与捕获事件在寄存器T0/1/2/3MCR和T0/1/2/3CCR寄存器中,对于定时器中断使能在VICIntEnable寄存器。
四个32位定时器的功能是相同的,可用于计数内部事件,脉宽调制,定时器应用。定时器的机理是计算硬件时钟或者是从外部提供的时钟的周期数。
具体寄存器设置:
IR寄存器:即中断寄存器,有8位,4位用于匹配中断,4位用于捕获中断。中断发生时,对应的IR寄存器的位就自动置1。向IR寄存器的位写1可以复位中断(应当就是清除中断标志位的意思了),写0是没有作用的。
TC寄存器:即定时计数寄存器,当prescale计数器(把时钟周期扩大计数,即可以设置成时钟周期的整数倍进行一次计数)到最后一个计数值时,TC寄存器就加1。如果中途没有复位,TC寄存器会一直计数到0xFFFFFFFF,然后又回到0x00000000。这个计数溢出事件不会导致中断,但可以用一个匹配寄存器来检测这个计数溢出事件。
MCR寄存器:即匹配控制寄存器,用来控制当一个匹配寄存器匹配TC时如何进行操作。具体操作(以Timer0为例):MR0I位,为1时,当MR0匹配TC值时产生中断。MR0R位,为1时,当MR0匹配TC时TC将复位。MR0S位,为1时,当MR0匹配TC时,TC和PC将停止,且TCR[0]将清零。
MR0-MR3:即四个匹配寄存器,这个寄存器的值将不断和TC寄存器的值进行比较,当两者相等时,将会自动触发动作。动作可能是产生中断、复位TC、停止定时器等(动作在上面的MCR寄存器设置)。