新闻  |   论坛  |   博客  |   在线研讨会
以LPC2136为例说定时器控制原理
xiajiashan | 2012-08-28 17:03:34    阅读:701   发布文章

每个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查询方式的相关代码》)

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
02年接触ARM和ucos,开发过有线和无线图像报警器,IPCamera,人脸识别系统,OCR识别系统,指纹识别系统,05年开始从事Linux及Rtems下WiFi,camera,Ethernet等驱动开发工作,专做嵌入式linux培训,致力于把我十年来的研发经验传授给每一个学员,招人的可以找我,ximenpiaoxue4016@sina.com
推荐文章
最近访客