您现在的位置: 主页 > MCU > 单片机技术应用 > lpc1114系统定时器systick -
本文所属标签:
为本文创立个标签吧:

lpc1114系统定时器systick -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]SysTick是Cortex-M0内核的一部分。它主要被用来作为嵌入式操作系统的10ms中断定时器。在单片机不上操作系统的时候,它就可以作为一个普通的定时器使用。SysTick是一个24位的倒计时定时器。也就是说它在工作的时候,是

SysTick是Cortex-M0内核的一部分。它主要被用来作为嵌入式操作系统的10ms中断定时器。在单片机不上操作系统的时候,它就可以作为一个普通的定时器使用。

本文引用地址: http://www.21ic.com/app/mcu/201807/784384.htm

SysTick是一个24位的倒计时定时器。也就是说它在工作的时候,是倒着数数的。例如给这个定时器的初值为488,它将会从488倒着数到0,然后产生中断。

寄存器定义

1. 系统定时器控制和状态寄存器CTRL

位符号描述复位值0ENABLE系统定时器允许位。1,允许;0,不允许。01TICKINT系统定时器中断允许位。1,允许;0,不允许。02CLKSOURCE系统定时器时钟源选择位。1,时钟=主时钟;0,时钟=主时钟/2.
15:3–保留。不能给这些位写1.不定16COUNTFLAG系统定时器倒计到0,此位置1.
31:17–保留。不能给这些位写1.不定

2. 系统定时器重载值寄存器LOAD

位符号描述复位值23:0RELOAD系统定时器计数器倒数到0后,将此数再次赋予定时器初值031:24–保留。不能给这些位写1.不定

3. 系统定时器当前值寄存器VAL

位符号描述复位值23:0CURRENT读此寄存器返回系统定时器的当前值。给这个寄存器赋值,将使定时器归0,且清CTRL中的COUNTFLAG位。031:24–保留。不能给这些位写1.不定

应用例程

新建一个工程,结构如下图所示:

在main.c文件中,加入以下代码:

#include “lpc11xx.h”

#define LED1_ON LPC_GPIO1->DATA &= ~(1<<0)

#define LED1_OFF LPC_GPIO1->DATA |= (1<<0)

#define LED2_ON LPC_GPIO1->DATA &= ~(1<<1)

#define LED2_OFF LPC_GPIO1->DATA |= (1<<1)

uint32_t msTicks=0;

void led_init()

{

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟

LPC_IOCON->R_PIO1_0 &= ~0x07;

LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO

LPC_IOCON->R_PIO1_1 &= ~0x07;

LPC_IOCON->R_PIO1_1 |= 0x01; //把P1.1脚设置为GPIO

LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟

LPC_GPIO1->DIR |= (1<<0);

LPC_GPIO1->DATA |= (1<<0);

LPC_GPIO1->DIR |= (1<<1);

LPC_GPIO1->DATA |= (1<<1);

}

void SysTick_Handler(void)

{

msTicks++;

}

int main()

{

led_init();

SysTick_Config(SystemCoreClock/100); //设置每毫秒进一次中断

while(1)

{

while(msTicks<100);

msTicks = 0;

LED1_ON;

LED2_OFF;

while(msTicks<100);

LED1_OFF;

LED2_ON;

msTicks = 0;

}

}

此例程实现了一个流水灯的效果。目的不是怎么做流水灯,而是怎么使用用Systick。

第27行,SysTick_Config()函数是KEIL自带的函数,位于core_cm0.h文件中。用来配置系统定时器的中断间隔时间。这个函数的参数不能大于24位值,参数是要赋给LOAD寄存器的。在SysTick_Config()函数中,把CTRL寄存器的bit2设置为1,即选择主时钟作为系统定时器的时钟源。那么,定时器两值递减的时间间隔就是1/ SystemCoreClock秒,SystemCoreClock是当前的主频,当配置好主频后,这个寄存器的值就被赋予了主频值,所以,我们以后如果要用当前主频,直接用SystemCoreClock即可。比如,要产生10毫秒的时间间隔,参数就应该是SystemCoreClock/100。




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > lpc1114系统定时器systick -
 

"lpc1114系统定时器systick -"的相关文章

网站地图

围观()