TC39x STM(System Timer)学习记录
STM有哪些特性?
- 自由运行的 64 位计数器
- 所有 64 位可同步读取
- 可同步读取 64 位计数器的不同 32 位部分
- 基于与 STM 部分内容的比较匹配,灵活地产生服务请求
- 在应用复位后自动开始计数
- 若 ARSTDIS.STMxDIS 位清零,应用复位将复位 STM 寄存器;若该位被置位,则应用复位不复位 STM 寄存器,改由系统复位进行复位
- 特殊的 STM 寄存器语义提供对整个 64 位计数器的同步视图,或不同分辨率的 32 位子集视图
上图是STM模块的概览图,展示了读取 STM 内容各部分的选项。
STM有哪些功能?
STM 是一个向上计数的计数器,工作频率为 fSTM。若发生应用复位,且SCU_ARSTDIS.STMxDIS 位清零,则 STM 被复位。复位后,STM 被使能并立即开始向上计数。在正常运行期间无法改变定时器的内容。定时器寄存器只能读,不能写。
STM 可选地被禁用以节能,或在调试时挂起。在挂起模式下,STM 时钟停止,但所有寄存器仍可读。
由于 STM 的宽度为 64 位,无法用一条指令读出其全部内容。需要两次加载指令。因为在两次读取之间定时器会继续计数,所以可能导致两次读取的值不一致(低位部分在两次读取间溢出到高位)。为实现对 STM 内容的同步一致读取,实现了一个捕获寄存器(CAP)。每当读取 TIM0 至 TIM5 中任一寄存器时,它会锁存 STM 高位部分的内容。因此,CAP 在与低位部分读取完全相同的时间点保持定时器高位的值。第二次读取再读取 CAP 的内容以获取完整的定时器值。
STM 也可以从七个寄存器 TIM0 至 TIM6 中的任意一个分段读取,这些寄存器选择 STM 的不同高阶 32 位范围。可以将它们视作各自独立的 32 位定时器,每个具有不同的分辨率和计时范围。
64 位系统定时器的内容可与存储在 CMP0 和 CMP1 寄存器中的两个比较值进行比较。可在与 CMP0 或 CMP1 比较匹配时产生服务请求。
比较寄存器操作
64 位 STM 的内容可以与存储在 CMP0 和 CMP1 寄存器中的两个比较值进行比较。在与 CMP0 或 CMP1 比较匹配时可以产生服务请求。
比较操作可编程的两个参数:
- 用于比较操作的 CMP0/CMP1 寄存器(比较宽度 MSIZEx)中相关位的宽度,可从 0 到 31 编程。
- 用于比较操作的 64 位 STM 中的起始位位置,可从 0 到 31 编程。
这些编程能力使比较功能非常灵活。甚至可以通过设置 MSIZE = 0 且 MSTART = n(n = 0 到 31)来检测 64 位 STM 中单个位 n 的位跃迁。