一个LED的N种玩法(四)
----system tick Timer
Author: chenzhufly
Email: chenzhufly@126.com
2010-4-30
一.system tick timer 概述
系统节拍定时器是LPC13xx系列微控制器内核的组成部分。系统节拍定时器是24位定时器,为操作系统或其它系统管理软件提供固定间隔的中断。有的文档说为固定的10ms中断,这是有误的,看后面的测试程序。
系统节拍定时器结构如下图所示:
由上图可以看得出来,system timer有两个时钟system clock 和 systick clock,它们之间如何选择和切换呢?请看CTRL寄存器的第2bit,CLKSOURCE置0,选择system clock;置1,选择systick clock。还有一个寄存器SYSTICKCLKDIV用来设置分频数的。
system tick timer相关寄存器如下:
明显可以通过改变LOAD的值能改变中断的时间间隔,详细的说明请看手册。J
当然和时钟也是有关系的嘛
二.参考例程
#define DELAY_LEN 2000 //闪灯间隔2S
volatile uint32_t msTicks;
//system tick timer 中断处理函数
void SysTick_Handler(void) {
msTicks++;
}
//判断两次的时间间隔有没有到设定值
__INLINE static void Delay (uint32_t dlyTicks) {
uint32_t curTicks;
curTicks = msTicks;
while ((msTicks - curTicks) < dlyTicks);
}
int main (void)
//初始化LED
GPIOInit();
GPIOSetDir( 0, 7, 1 );
//设置systemtick为1ms中断,详细计算过程请看《LPC1343 USER MANUAL》的255页
if (SysTick_Config(SystemCoreClock / 1000)) {
while (1);
}
if ( !(SysTick->CTRL & (1<<SysTick_CTRL_CLKSOURCE_Msk)) )
{
LPC_SYSCON->SYSTICKCLKDIV = 0x08;//参考CTRL寄存器设置
}
while (1)
{
GPIOSetValue( 0, 7, 1 );//开LED
Delay (DELAY_LEN);
GPIOSetValue( 0, 7, 0 );//关LED
Delay (DELAY_LEN);
}
}
仔细点应该可以看得出来,这个例程其实是LPCXPresso自带的,呵呵。不管黑猫白猫,抓住老鼠都是好猫 !!! LED又闪起来啦,GO,GO,GO………….
一个LED的N种玩法_四_----system tick Timer.pdf
(124.86 KB, 下载次数: 174)
systick.rar
(169.18 KB, 下载次数: 132)
更多精彩 稍后继续