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