热度 25
2012-4-4 12:36
3078 次阅读|
0 个评论
每个mcu都有定时器功能,如果要实现在1秒,或者1毫秒,或1微妙等时间间隔的定时操作,则需要mcu提供的定时器功能。(在掌握了一种MCU的定时器原理,其他MCU的定时器操作就很好理解了),下面以philips的lpc2136(arm7)定时器0的匹配功能为例。 1:首先要搞清楚几个寄存器的作用 如果上面的关系搞清楚了,程序就很好写了! 2: TCR,MCR两个寄存器的控制原理 2.1关于TCR TCR 是使能位,为1时,同时使能“预分频计数器”和“定时器计数器”计数; 为0时,同时禁止“预分频计数器”和“定时器计数器”计数;TCR 是控制“预分频计数器”和“定时器计数器”在PCLK的上升沿同步复位; 2.2关于MCR LPC2114定时器0有四个匹配通道,我们这里只讲匹配通道0,即MR0. MCR 当该位为1,TC与MR0(匹配寄存器)匹配产生中断;当该位为0,TC与MR0(匹配寄存器)匹配中断禁止; MCR 当该位为1,TC与MR0(匹配寄存器)匹配将使TC复位;当该位为0,该特性被禁止; MCR 当该位为1,TC与MR0(匹配寄存器)匹配将使TC和PC停止计数;当该位为0,该特性被禁止。 3 接下来就可以等待中断了 对于一个新手来说也许你还是不知如何着手写程序,所以这就是入门的难处,当你对某个MCU会控制了,或者说入门了,那么再去写程序控制其他的MCU就很容易的,因为原理在那里,可以举一反三。 3.1 中断状态寄存器 其实,不管是那个MCU中的哪个控制器,如I2C,SPI,Ethernet,LCD等等,都有一个中断状态寄存器,有些控制器还有其他状态寄存器! Lpc2136中的定时器0就有T0IR(中断寄存器)来指示当前是哪个中断发生,用户就可以通过读这个寄存器来判断。 如:我们这里设置了匹配通道0,即MR0。我们可以在主程序中不断的读T0IR 位,如果为1则说明中断发生。 注意:在中断处理结束后必须通过对相应为写1才能复位中断,方便第二次中断发生。 4 如何写代码 一般分查询方式(polling)和中断方式(interrupt): 查询方式就是不停的去判断中断状态寄存器相关位是否置位,如果置位说明有中断发生。 中断方式就是通过MCU的中断控制器irq实现。 (未完,下文: 《4.1查询方式的相关代码》 )