![5fbe49c4837e04dea69786e395a62443.png](https://i-blog.csdnimg.cn/blog_migrate/214410994a7807447c78c37a7d8a9791.jpeg)
用简单的语言讲述世界
由于所有使用Cortex-M内核的芯片都带有SysTick,并且在这些芯片中,SysTick的处理方式(寄存器映射地址及作用)都是相同的,若使用SysTick产生时间“滴答”,可以简化嵌入式软件在Cortex-M内核芯片间的移植。故,对SysTick的定义在SDK/CMSIS/core-cm7.h中。该定时器被捆绑在NVIC(嵌套向量中断控制器)中。
Systick定时器模块中有4个32位寄存器,分别为:控制及状态寄存器、重载寄存器、计数器、校准寄存器。
- 控制及状态寄存器:配置功能及状态标志
- 重载寄存器:低24位有效,计数器到0,用该寄存器的值重载
- 计数器:低24位有效,计数器当前值,减1计数
- 校准寄存器:针对不同MCU,校准恒定中断频率。KL25未用。
一、控制及状态寄存器
- COUNTFLAG(溢出标志位):计数器减1到0,则该位为1;读取该位清零
- CLKSOURCE(时钟源选择位):=0,外部时钟(KL25选此项,为内核时钟/16);=1,内核时钟
- TICKINT(中断使能控制位):=0,禁止中断;=1,允许中断(计数器到0时,中断)
- ENABLE(SysTick模块使能位):Systick模块使能位,=0,关闭;=1,使能
二、计数器及重载寄存器
Systick模块的计数器保存当前值,这个寄存器是由芯片硬件自行维护的,用户无须干预,系统可通过读取该寄存器的值得到更精细的时间表示。
Systick模块的重载寄存器低24位有效,其值是计数器的处值及重载值。
Systick模块内的计数器是一个24位计数器,减1计数。初始化时,选择时钟源(决定了计数频率)、设置重载计数器、设置优先级、允许中断(计数器的初值为重载寄存器中的值)、使能该模块。计数器减1计数,计数到0时,Systick控制及状态寄存器的溢出标志位被置1,产生中断请求,同时,计数器自动重载初值并继续减1计数。
三、校准寄存器(用的不多)
- NOREF:=1没有外部参考时钟(STCLK不可用);=0外部参考时钟可用
- SKEW:=1校准值不是准确的10ms;=0校准值是准确的10ms
- TENMS:10ms 的时间内倒计数的格数。若该值读 回零,则表示无法使用校准功能
M0+内核优先级设置寄存器:
编写Systick模块初始化程序还需用到M0+内核优先级设置寄存器(SHPR3),用于设定Systick模块中断的优先级。该寄存器位于系统控制块SCB中。在ARM Cortex-M0+中,只有Systick、SVC(系统服务调用)和PendSV(可挂起系统调用)等内部异常可以设置其中断优先级,其他内核异常的优先级是固定的。SVC的优先级在SHPR2寄存器中设置,Systick和PendSV优先级在SHPR3寄存器中设置。