PIT 定时器
本文整理自
17. PIT—周期中断定时器 — [野火]i.MX RT库开发实战指南——基于i.MXRT1052 文档
用作个人学习和分享
什么是 PIT 定时器?
PIT(Periodic Interrupt Timer,周期中断定时器)是一种 32 位递减计数器,每一个时钟周期计数器值减 1。当计数器达到 0 时,会生成一个触发脉冲并设置中断标志,然后自动从预设值重新开始计数。
这种定时器广泛应用于需要周期性操作的场景,例如为 ADC 设置采样周期、控制 DMA 的周期性传输等。
PIT 定时器核心特性
PIT 定时器具有以下关键特性:
- 四个定时器可独立设置启用 / 屏蔽中断
- 所有定时器共享一个中断号(IRQ)
- 采用相同的计数时钟源
- 可独立设置计数值、启动和停止
- 32 位递减计数,除定时器 0 外,其他定时器可设置为连接模式,组成 64 位定时器
- 支持在不重启定时器的情况下更改计数周期
PIT 定时器功能架构
1. 计数时钟
PIT 定时器没有专用的时钟分频寄存器,其计数时钟直接来自外部提供的时钟源。RT1052 的 PIT 时钟源自 PERCLK_CLK_ROOT,该根时钟有两个可选来源:
- AHB_CLK_ROOT 分频得到的时钟
- 24MHz 的 OSC 时钟
2. 计数器模块
计数器是 PIT 的核心,工作方式为:
- 开启后每个时钟周期自动减 1
- 计数到 0 时设置完成标志位
- 如开启中断则触发中断请求
- 自动从重装寄存器加载预设值重新开始计数
通过配置寄存器,可将两个定时器连接为 64 位计数器,扩展计时范围。
3. 中断与触发机制
定时器计数结束时可产生两种输出:
- 中断信号:用于 CPU 处理周期性任务
- 触发信号:可用于触发其他外设操作(如 ADC 转换、DMA 传输等)
4. 寄存器系统
PIT 的寄存器数量相对较少,主要包括:
寄存器名称 | 功能描述 |
---|---|
MCR | PIT 控制寄存器,控制整体使能和调试模式行为 |
LTMR64H/L | 64 位定时器模式下的高 / 低 32 位数据寄存器 |
LDVALx | 定时器 x 的自动重装值寄存器 |
CVALx | 定时器 x 的当前计数值寄存器 |
TCTRLx | 定时器 x 的控制寄存器 |
TFLGx | 定时器 x 的状态标志寄存器 |
关键寄存器详解
1. MCR 控制寄存器
该寄存器主要控制 PIT 的整体工作状态:
- MDIS 位(bit1):0 = 启用 PIT 定时器,1 = 禁用 PIT 定时器
- FRZ 位(bit0):0 = 调试模式时定时器继续运行,1 = 调试模式时定时器停止
2. LDVALx 自动重装寄存器
- TSV 位段(0-31 位):设置定时器自动重装载值
- 特性:写入新值不会立即生效,需当前计数周期结束后生效;若要立即生效,需重启定时器
3. TCTRLx 定时器控制寄存器
每个定时器都有独立的控制寄存器:
- CHN 位(bit2):仅定时器 1-3 可用,1 = 启用连接模式(与前序定时器组成 64 位计数器)
- TIE 位(bit1):1 = 使能计时结束中断,0 = 禁止中断
- TEN 位(bit0):1 = 使能定时器,0 = 禁用定时器
注意:使能中断前需清除 TFLGx 的 TIF 位,否则可能立即触发中断
4. TFLGx 状态标志寄存器
- TIF 位(bit0):计时完成标志位,计数到 0 时自动置 1
- 清除方式:向该位写入 1(写 1 清除,写 0 无效)
PIT 定时器使用要点
- 时钟配置:首先需确保 PERCLK_CLK_ROOT 时钟正确配置
- 中断处理:所有定时器共享一个中断号,需在中断服务程序中通过 TFLGx 判断哪个定时器触发了中断
- 64 位模式:通过设置 TCTRL1 的 CHN 位,可将定时器 0 和 1 连接为 64 位计数器
- 周期计算:定时周期 = (LDVALx 值 + 1) / 计数时钟频率
- 调试注意:如需调试时暂停计时,可设置 MCR 寄存器的 FRZ 位