ARM coretex M4 系统定时器

0?wx_fmt=gif

系统定时器SysTick简介

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

相关寄存器

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

0?wx_fmt=jpeg

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

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

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

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

Systick的异常中断号是15.

需要特别注意的是:

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

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

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

2 清当前值寄存器的值

3 编程控制和状态寄存器

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

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

软件方案

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

/** \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

嵌入式程序猿致力于打造程序猿工程师交流分享的精品移动平台,欢迎各位猿友加入和分享。微信搜索嵌入式程序猿添加关注,或者长按下方二维码,选择识别图中二维码添加关注。

0?wx_fmt=jpeg

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值