原创 以LPC2136为例说定时器控制原理

2012-4-4 12:36 3077 25 25 分类: 消费电子

每个mcu都有定时器功能,如果要实现在1秒,或者1毫秒,或1微妙等时间间隔的定时操作,则需要mcu提供的定时器功能。(在掌握了一种MCU的定时器原理,其他MCU的定时器操作就很好理解了),下面以philips的lpc2136(arm7)定时器0的匹配功能为例。

1:首先要搞清楚几个寄存器的作用

xjs_1.jpg

如果上面的关系搞清楚了,程序就很好写了!

2: TCR,MCR两个寄存器的控制原理

2.1关于TCR

TCR[0]是使能位,为1时,同时使能“预分频计数器”和“定时器计数器”计数; 为0时,同时禁止“预分频计数器”和“定时器计数器”计数;TCR[1]是控制“预分频计数器”和“定时器计数器”在PCLK的上升沿同步复位;

xjs_2.jpg

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(中断寄存器)来指示当前是哪个中断发生,用户就可以通过读这个寄存器来判断。

 

xjs_3.jpg

如:我们这里设置了匹配通道0,即MR0。我们可以在主程序中不断的读T0IR[0]位,如果为1则说明中断发生。

注意:在中断处理结束后必须通过对相应为写1才能复位中断,方便第二次中断发生。

4 如何写代码

一般分查询方式(polling)和中断方式(interrupt):

查询方式就是不停的去判断中断状态寄存器相关位是否置位,如果置位说明有中断发生。

中断方式就是通过MCU的中断控制器irq实现。

(未完,下文:《4.1查询方式的相关代码》)

文章评论0条评论)

登录后参与讨论
我要评论
0
25
关闭 站长推荐上一条 /2 下一条