前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARM coretex M4 系统定时器

ARM coretex M4 系统定时器

作者头像
用户1605515
发布2018-04-10 16:04:06
1.4K0
发布2018-04-10 16:04:06
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿
系统定时器SysTick简介

今天我们来讲讲ARM cortex M4核系统定时器system Timer,处理器核有一个24位的系统定时器SysTick,可以用来作为系统工作的滴答时钟,从装载值向下计数到零。需要注意的一点是为了调试,当处理器停止时,系统定时器计数器不会递减。

相关寄存器

与系统定时器相关的寄存器主要有SysTick控制和状态寄存器,重装在寄存器,当前值寄存器,校准寄存器。

控制和状态寄存器主要是使能和配置SysTick功能,以及定时器计数到0状态指示位。

重装载寄存器主要用来设置定时器定时的计数装载值。取值范围为0x00000001~0x00FFFFFF.

当前值寄存器存有系统定时器的当前计数值。写操作将清除该寄存器的值为0,同时清除控制和状态期存器的计数标志位。

校准寄存器是与系统定时器的校准属性相关的。关于这些寄存器的具体位定义可以参考ARM官方文档,这里不在赘述,在编程使用操作系统定时器Systick时候,需要仔细阅读这些寄存器的含义。

Systick的异常中断号是15.

需要特别注意的是:

在深度睡眠模式下,一些操作将会停止处理器时钟信号,这时候,系统定时器计数也会停止。

系统定时器计数重装载和当前值寄存器不是被硬件初始化的,所以在软件中正确的初始化顺序是:

1 编程设置重装载寄存器值

2 清当前值寄存器的值

3 编程控制和状态寄存器

系统定时器中中断向量表中的位置

另外系统定时器与系统控制和状态寄存器等相关的内容,我们会在相关的内容里讲解。

软件方案

在core_cm4.h文件中,ARM已经提供了对系统定时器的操作函数

代码语言:javascript
复制
/** \brief  System Tick Configuration
   The function initializes the System Timer and its interrupt, and starts the System Tick Timer.
   Counter is in free running mode to generate periodic interrupts.
   \param [in]  ticks  Number of ticks between two interrupts.
   \return          0  Function succeeded.
   \return          1  Function failed.
   \note     When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
   function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
   must contain a vendor-specific implementation of this function.
*/
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
 if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */
 SysTick->LOAD  = ticks - 1;                                  /* set reload register */
 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */
 SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
 SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                  SysTick_CTRL_TICKINT_Msk   |
                  SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
 return (0);                                                  /* Function successful */
}

如果你是使用飞思卡尔的芯片,那么飞思卡尔的SDK中也提供了相应的函数和文件

在fsl_hwtimer_systick.c和fsl_hwtimer_systick.h中有具体的函数定义和注释。

如果是自己编码实现,建议按照ARM官方文档的说明进行操作,其实小猿建议大家使用ARM或者芯片厂商提供的已有函数。

嵌入式

程序猿

微信号:InterruptISR

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档