这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【Cortex-M】Systick Timer使用

共5条 1/1 1 跳转至

【Cortex-M】Systick Timer使用

高工
2025-05-24 16:33:53   被打赏 10 分(兑奖)     打赏

【简介】

在ARM CortexM 的处理器中都存在一个Systick 的定时器,该定时器的在使用RTOS的场景时通常作为系统任务的调度的时间基础定时器使用,在不使用RTOS 的裸机环境时也可以用作delay 延时实现的定时器。Systick 设计的还是比较优雅的只有以下四个寄存器。

image.png

image.png

通过CTRL 的控制寄存器选择Systick 的时钟源,及计数使能和中断输出控制。

LOAD 寄存器来自动加载至 VAL寄存器,VAL寄存器数值从1->0 时会产生中断信号

如下的校验寄存器的使用暂时未理解,使用过成中未使用过该寄存器的值,对应寄存器的三个信号均为read only 属性,暂时的理解是芯片内部逻辑使用该寄存器实现计数校准。

image.png

本地查看下手里现有的板子该寄存器数值的定义。

GD32VF427

image.png

STMC092

image.png

NXP MCXC444

image.png


【FreeRTOS】Systick Timer 使用

FreeRtos 在CortexM的处理器的适配上,通常回使用其作为系统任务调度定时器来使用,在启动调度器时会配置Systick 定时器中断来触发任务调度切换。

image.png

以下是配置代码

/*
 * Setup the systick timer to generate the tick interrupts at the required
 * frequency.
 */
__weak void vPortSetupTimerInterrupt( void )
{
	/* Calculate the constants required to configure the tick interrupt. */
	#if( configUSE_TICKLESS_IDLE == 1 )
	{
		ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );
		xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;
		ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
	}
	#endif /* configUSE_TICKLESS_IDLE */

	/* Stop and clear the SysTick. */
	portNVIC_SYSTICK_CTRL_REG = 0UL;
	portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;

	/* Configure SysTick to interrupt at the requested rate. */
	portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
	portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
}


Thread-x 在内核启动low_level_int 接口中会对系统时钟systick 进行配置relaod 值并使能systick 及 中断使能

image.png


image.png

RT-thread 在board init 初始化配置systick

image.png

在Zephyer 系统中Systick 的初始化是放在PRE_KERNEL_2 阶段调用,对应的代码如下

image.png


函数调用路径如下

image.png

image.png


image.png

image.png

image.png


看了几个操作系统的systick 的代码都没有使用到校准寄存器,也很好奇对应的校准寄存器的使用方法,如有了解的大佬希望驻足讲解下。





专家
2025-05-24 21:50:00     打赏
2楼

感谢分享


专家
2025-05-24 21:52:48     打赏
3楼

感谢分享


专家
2025-05-24 21:55:07     打赏
4楼

感谢分享


院士
2025-05-26 16:04:53     打赏
5楼

systick的功能单一,使用简单,但其作用也很是强大。

楼主讲解得非常详细,不错的分享了


共5条 1/1 1 跳转至

回复

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