当前位置: 首页 > news >正文

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 的寄存器数量相对较少,主要包括:

寄存器名称功能描述
MCRPIT 控制寄存器,控制整体使能和调试模式行为
LTMR64H/L64 位定时器模式下的高 / 低 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 定时器使用要点

  1. 时钟配置:首先需确保 PERCLK_CLK_ROOT 时钟正确配置
  2. 中断处理:所有定时器共享一个中断号,需在中断服务程序中通过 TFLGx 判断哪个定时器触发了中断
  3. 64 位模式:通过设置 TCTRL1 的 CHN 位,可将定时器 0 和 1 连接为 64 位计数器
  4. 周期计算:定时周期 = (LDVALx 值 + 1) / 计数时钟频率
  5. 调试注意:如需调试时暂停计时,可设置 MCR 寄存器的 FRZ 位
http://www.dtcms.com/a/389873.html

相关文章:

  • 【题解】 [蓝桥杯 2019 省 B] 特别数的和
  • 数字隔离器,串口通信的安全之“芯”
  • 山脊图 (Ridgeline Plot):使用 joypy 库,优雅地比较多组数据的分布情况
  • Linux 进程同步以及僵尸进程等知识介绍
  • Python进程和线程
  • 斐波那契数列的递归和迭代实现
  • 时空预测论文分享:规则知识 因果预测框架 面向研究的评估体系 主动适应漂移
  • 《WINDOWS 环境下32位汇编语言程序设计》第18章 ODBC数据库编程
  • linux入门(3)
  • 任意版本GitLens vscode插件破解邪修秘法
  • Redis最佳实践——热点数据缓存详解
  • font简写和CSS的继承性
  • 高性能服务器配置经验指南6——BIT校园网在ubuntu中的自动检查连接状况脚本使用
  • SQL 连接详解:内连接、左连接与右连接
  • C2000基础-TIM介绍及使用
  • Day 06 动作类的初始化类------以B1为例
  • 面试题:对数据库如何进行优化?
  • samurai 点选分割 box分割
  • 计算机架构的总线协议中的等待状态是什么?
  • C++:入门基础(1)
  • ACD智能分配:服务延续和专属客服设置
  • 自监督学习分割
  • 抛弃自定义模态框:原生Dialog的实力
  • LangGraph 简单入门介绍
  • Docker 部署 DzzOffice:服务器 IP 转发功能是否需要开启
  • 无人机避障——卡内基梅隆大学(CMU)CERLAB 无人机自主框架复现
  • 正点原子zynq_FPGA-初识ZYNQ
  • Vue3中对比ref,reactive,shallowRef,shallowReactive
  • 通过Freemark渲染数据到Word里并生成压缩包
  • Vue 项目中使用 AbortController:解决请求取消、超时与内存泄漏问题