这课我们来看看如何用LPC1343内部的Systick产生1S的定时。
各位以前肯定都用8位单片机做过软件延时的流水灯,几乎无一例外的是两个for循环。当然在LPC1343这个平台上肯定也是可以的,不过它是一个32位的处理器,利用for循环来达到大概1S的延时,调试起来要花费相当多的时间和精力,况且这么高的主频(最大72MHz)用来空转,实在也是一种不小的浪费。如何达到延时呢?我们可以利用其内部自带的Systick来做到这点。看看什么是Systick:
The System Tick Timer is an integral part of the Cortex-M3. The System Tick Timer is
intended to generate a fixed 10 millisecond interrupt for use by an operating system or
other system management software.
我们可以从中了解到以下信息:
1、
Systick,全称为“System Tick Timer”,系统滴答定时器;
2、
Systick可以产生10ms间隔的中断(笔者按:其实未必就只能是10ms);
3、
Systick在操作系统或系统管理软件中用来提供时间基准;
大家所用的计算机,右下角都有一个时间,这个时间就是内部CPU的Systick产生的(可不要认为是DS1302这类的时钟芯片哦),即便你的电脑死机,断电甚至是系统崩溃,这个时间都保持与现实时间的一致性。所以它还有一个特点,就是它是独立于Cortex-M3其他部件的一个时钟,可以利用独立电源供电,可以在整体系统出现故障的情况下仍然正常工作,正因如此,它也往往用来作为记录系统各种故障和错误的时间基准。下面了解一下它的内部结构:
1.jpg (26.93 KB)
2010-5-4 21:28
可以看到它的核心是一个24-bit down counter,从它的寄存器的定义可以比较直观的看到它的工作方式:
★System Timer Control and status register(系统定时控制和状态寄存器):
2.jpg (102.45 KB)
2010-5-4 21:28
①该寄存器的第0位ENABLE,当该位为1是,24-bit down counter启动,反之关闭;
②该寄存器的第1位TICKINT,Systick中断使能位,为1时开启中断,反之屏蔽;
③该寄存器的第2位CLKSOURCE,时钟源选择,为1时选择系统时钟源,反之选择经过系统滴答时钟分频器分频后的时钟作为时钟源,值得注意的是后者,当选择分频后的时钟,则分频数必须大于2.5,否则“Count values are unpredictable”。(NXP提供的例程里进行了8分频)
④该寄存器的第16位COUNTFLAG,当24-bit down counter计数到0时,该位硬件置1,读取System Timer Control and status register可以将改位清0;
★System Timer Reload value register(系统定时器值重装寄存器):
未命名.jpg (34.08 KB)
2010-5-4 21:28
|