定时器初值除32_“滴答”定时器——SysTick

5fbe49c4837e04dea69786e395a62443.png

用简单的语言讲述世界

由于所有使用Cortex-M内核的芯片都带有SysTick,并且在这些芯片中,SysTick的处理方式(寄存器映射地址及作用)都是相同的,若使用SysTick产生时间“滴答”,可以简化嵌入式软件在Cortex-M内核芯片间的移植。故,对SysTick的定义在SDK/CMSIS/core-cm7.h中。该定时器被捆绑在NVIC(嵌套向量中断控制器)中。

Systick定时器模块中有4个32位寄存器,分别为:控制及状态寄存器、重载寄存器、计数器、校准寄存器。

  1. 控制及状态寄存器:配置功能及状态标志
  2. 重载寄存器:低24位有效,计数器到0,用该寄存器的值重载
  3. 计数器:低24位有效,计数器当前值,减1计数
  4. 校准寄存器:针对不同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寄存器中设置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值