tangqianfeng 发表于 2023-10-16 14:58:22

请教坛主,cortex M系列里systick的问题

本帖最后由 tangqianfeng 于 2023-10-16 14:59 编辑

在调用systick的设置里,都是将load配置为(ticks-1), val配置为0,按这样的配置,systick的首次中断是发生在什么时候? 手册上说的是当val到零时,会自动重装并产生中断,比较困惑,找不到详细说明

eric2013 发表于 2023-10-16 15:30:26

M内核权威指南里面有说明。

tangqianfeng 发表于 2023-10-16 15:41:33

eric2013 发表于 2023-10-16 15:30
M内核权威指南里面有说明。

没有找到详细的说明,只是说减到零时会重载load的值,设置val为0,这样不是一使能就产生中断了么?

eric2013 发表于 2023-10-16 18:06:12

tangqianfeng 发表于 2023-10-16 15:41
没有找到详细的说明,只是说减到零时会重载load的值,设置val为0,这样不是一使能就产生中断了么?

SysTick->LOAD= (uint32_t)(ticks - 1UL);
SysTick->VAL   = 0UL;

应该是先加载LOAD,然后执行中断,可以实测下。

木偶 发表于 2023-10-19 13:11:43

VAL寄存器是当前计数值,属性是R/Wc,写0是为了清空寄存器,第一次启动systick,就会把重装载值load到VAL

tangqianfeng 发表于 2023-10-19 17:37:04

木偶 发表于 2023-10-19 13:11
VAL寄存器是当前计数值,属性是R/Wc,写0是为了清空寄存器,第一次启动systick,就会把重装载值load到VAL

但我看freertos里的tickless,感觉减到0还不重载,要0再往下减1才重载,这样才能和load的值要减1对得上

木偶 发表于 2023-10-19 19:23:40

tangqianfeng 发表于 2023-10-19 17:37
但我看freertos里的tickless,感觉减到0还不重载,要0再往下减1才重载,这样才能和load的值要减1对得上

0本身是会有一次count的,每个数值都是有一次count

tangqianfeng 发表于 2023-10-19 21:57:48

木偶 发表于 2023-10-19 19:23
0本身是会有一次count的,每个数值都是有一次count

是的,而且中断的出发是val由1变0时

emwin 发表于 2023-10-21 14:02:18

按架构参考手册中断发生在“Count transition from 1 to 0.”

tangqianfeng 发表于 2023-10-21 14:04:38

emwin 发表于 2023-10-21 14:02
按架构参考手册中断发生在“Count transition from 1 to 0.”

是的               
页: [1]
查看完整版本: 请教坛主,cortex M系列里systick的问题