这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » LPC1114 systick滴答定时器实验

共1条 1/1 1 跳转至

LPC1114 systick滴答定时器实验

工程师
2014-09-14 21:10:46     打赏
SysTick 定时器是一个24位定时器,向下计数到零就会产生一个中断。这样为的是可以提供一个固定的10 毫秒间隔的中断。SysTick 定时器的时钟来自CPU 时钟(系统时钟) ,或来自被固定到CPU时钟频率的一半的参考时钟。为了连续产生特定时间间隔的中断,SYST_RVR寄存器必须用正确的值进行初始化,以保证获得所需的时间间隔。在SYST_CALIB 寄存器中有一个默认值,可以通过软件修改。如果设置为默认设置,则会每10 毫秒产生一次中断。
通过以下寄存器对系统滴答定时器进行配置: 1.引脚:系统滴答定时器不使用外部引脚。 2.电源:系统滴答定时器是通过SysTick 控制寄存器配置允许。系统滴答定时器时钟源是固定的系统时钟频率的一半,即参考时钟。 3. SYST_CSR寄存器使能SysTick 定时器时钟源。

SysTick 定时器是Cortex-M0 内部集成的一部分。SysTick 定时器的作用是产生一个固定的10 毫秒中断,供操作系统或其它系统管理软件使用。   名称          访问方式    地址偏移                         描述                            复位值 SYST_CSR       R/W           0x010          系统定时器控制和状态寄存器          0x000 0000 SYST_RVR       R/W           0x014          系统定时器重载寄存器                       0 SYST_CVR       R/W           0x018          系统定时器当前计数值寄存器              0 SYST_CALIB    R/W           0x01C          系统定时器校准值寄存器                   0x4 寄存器描述详见“LPC111x_11Cxx_UM_Simp_Chinese”手册P291

以下是systick代码部分,使用滴答定时器实现简单的定时功能 #include "LPC11xx.h"                        /* LPC11xx definitions */ #include "gpio.h"
#define SYSTICK_DELAY                5000
volatile uint32_t TimeTick = 0;
/* SysTick interrupt happens every 10 ms */ void SysTick_Handler(void) {   TimeTick++; }
void delaySysTick(uint32_t tick) {   uint32_t timetick;
  /* Clear SysTick Counter */   SysTick->VAL = 0;   /* Enable the SysTick Counter */   SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
  timetick = TimeTick;   while ((TimeTick - timetick) < tick);      /* Disable SysTick Counter */   SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;   /* Clear SysTick Counter */   SysTick->VAL = 0;   return; }
/* Main Program */
int main (void) {   SystemInit();
  /* Called for system library in core_cmx.h(x=0 or 3). */   SysTick_Config( SYSTICK_DELAY );      /* Enable AHB clock to the GPIO domain. */   LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);      /* Set port 3_0 to output */   GPIOSetDir( 1, 6, 1 );
  while (1)                                /* Loop forever */   {         delaySysTick(SYSTICK_DELAY);         GPIOSetValue( 1, 6, 0 );         delaySysTick(SYSTICK_DELAY);         GPIOSetValue( 1, 6, 1 );   } }

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]