AURIX TC2XX 学习笔记(2) 系统定时器(STM)

1.模块简介

STM模块有以下特点:

•支持自由运行的64位计数器

支持64位同步读取

•支持不同的32位计数器同步读取64位的STM

•支持比较寄存器进行灵活的定时中断服务请求

STM(System Timer)是一个向上的64位计数器,运行频率为fSTM(最高100MHz)。如果应用程序复位,STM会被重置(在STMxDIS标志位已被清除的情况下)。重置后,STM会自动启用,并立即开始计数。在正常操作过程中,不会影响定时器的内容,定时器寄存器只能被读取而不能被写入。

由于STM的64位宽度,因此不可能用一条指令读取其整个内容。它需要用两个加载指令来读取。为了能够同步地读取STM内容,使用了捕获寄存器(CAP)。每次读取寄存器TIM0到TIM5中的一个时,它都会锁存STM高32部分的内容。因此,当读取定时器的低部时,CAP保持定时器的高部值。然后,第二个读取操作将读取CAP的内容以获得完整的计时器值。

2.Compare Register Operation(比较寄存器)

STM中每个模块提供了两个32位比较寄存器,用来实现单次定时的功能。64位系统定时器STM的值可以与CMP0和CMP1寄存器中存储的两个比较值进行比较。当比较值匹配时可以生成服务请求,用于触发中断。

有两个参数用于比较操作:

  1. START(开始):进行比较操作所用的第一位(LSB)位置。
  2. SIZE(大小):要进行比较的位数(从零开始)。

 

MSIZE0 = 10001B = 17; MSTART0 = 01010B = 10

MSIZE1 = 00111B = 7; MSTART1 = 00111B = 7

在上图的例子中,比较寄存器CMP0[17:0]加上十个右扩展的零位与STM[27:0]进行比较,STM[9:0] = 000H。最简单的操作方式就是直接将开始位置(STAR)设置为0,这样比较寄存器的比较值跟STM值的分辨率一样,定时多少时间就是多少。这种比较简单也比较常用。

3.Compare Match Interrupt Control(比较匹配中断控制)

STM 的中断触发机制并不复杂,每个 STM 模块有两个比较寄存器,同时每个 STM 模块有两个中断源,而且比较寄存器和中断源的连接也是可配的。功能示意图如下:

 每个比较寄存器都有其比较匹配中断请求标志位(ICR.CMPxIR),该标志由硬件在比较匹配事件上设置。中断请求标志可以通过软件设置(ISSR.CMPxIRS)或清除(ISSR.CMPxIRR)。如果设置ICR将1写入CMPxIRS不会在STMIRx上产生中断。来自CMP0和CMP1的比较匹配中断可以由CMPxOS选择输出信号STMIR0或STMIR1。CMPxOS 设置为 0 或者 1 则选择对应的中断源,输出到中断模块 IR 中。

4.STM部分寄存器解读

4.1Compare Match Control Register(比较匹配控制寄存器)

 

上面提到的操作比较寄存器的两个参数就由这个寄存器来配置。

4.2Interrupt Control Register(中断控制寄存器)

CMP0IR(比较寄存器CMP0中断请求标志):该位表示比较寄存器CMP0的比较匹配中断请求是否正在等待,CMP0IR必须通过软件清除。

0:由于上次清除了该位,所以没有检测到比较匹配中断。

1:检测到比较匹配中断。CMP0IR必须通过软件清除,也可以通过软件设置(参见CMPISCR寄存器)。

4.3Interrupt Set/Clear Register(中断设置/清除寄存器)

CMP0IRS CMP0IR位已经设置,在这种情况下,位CMP0IRR的状态为“不关心”。 

5.代码功能实现

下列代码使用定时器模块,实现定时器延时函数功能,并用延时函数实现流水灯效果。

 

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值