目录

GPT核心特性

GPT 计数器操作模式

 重启模式

自由运行模式

GPT时钟源

 GPT框图

输入捕获:测量外部信号的高电平脉冲宽度

输出比较:生成 1kHz PWM 波

GPT模块外部引脚复用与功能映射表

GPT使用注意事项

GPT Memory Map

GPT寄存器

GPTx_CR寄存器

GPTx_PR寄存器

GPTx_SR寄存器

GPTx_IR寄存器

GPTx_OCR1寄存器

GPTx_ICR1寄存器

GPTx_CNT寄存器


前言:

通用定时器(GPT)是一种功能强大的硬件模块,内置一个32位递增计数器,用于记录时钟脉冲的数量,为定时和计数操作提供核心支持;

GPT具备输入捕获能力,能够检测外部引脚的电平变化(如上升沿、下降沿或双边沿),并在触发时将当前的计数器值自动保存到专用寄存器中,方便后续读取或处理;

GPT支持输出比较功能,用户可以预先设定一个目标数值,当计数器达到该值时,硬件会自动在指定引脚上产生信号(例如电平翻转),可用于生成PWM波形或控制外部设备,此外,这一机制还会触发中断,让软件在中断服务中执行定时任务,比如周期性数据采集或系统调度;

GPT核心特性

  • 一个具备时钟源选择功能的 32 位向上计数器,计数范围为(0 ~ 2³²-1),当时钟源选择内部高速时钟,可用于高精度定时,若选则低速时钟(32KHz RTC 时钟)则用于低功耗场景;
  • 两个输入捕获通道,每个通道相互独立,每个输入捕获通道对应一个外部引脚,可监测引脚的电平跳变(上升沿 / 下降沿 / 双边沿), 当引脚出现指定边沿时,立即将当前计数器值自动保存到到捕获寄存器,可以用于测量脉冲宽度(捕获上升沿记录t1,捕获下降沿记录t2,脉宽 = t2-t1)与测量信号周期(连续捕获两个上升沿,周期 = t2-t1
  • 三个输出比较通道,每个通道相互独立,每个通道预设一个比较值,当计数器递增到该值时,触发硬件动作,常见输出模式为电平翻转(匹配时引脚电平翻转一次,用于生成单次脉冲)与 持续 PWM(周期由计数器溢出周期决定,占空比由比较值与周期的比值决定)
  • 可配置为在低功耗模式和调试模式下保持工作状态;
  • 在捕获事件、比较事件和计数器溢出事件发生时,可生成中断;
  • 计数器操作支持重启模式或自由运行模式

GPT 计数器操作模式

 重启模式

当通过 GPT 控制寄存器 GPT_CR 配置为重启模式,在重启模式下,对于输出比较通道1,当计数器达到比较值时 → 计数器会重置并从 0x00000000 重新开始计数;

对于输出比较通道2与输出比较通道3,计数器达到其比较值 → 计数器不会重置,继续向上累加;

由于通道 1 的比较事件会强制重置计数器,如果通道 2与通道 3 的比较值 > 通道 1 的比较值 → 计数器会在达到通道 2与通道3 的比较值 之前,先触发通道 1 的比较事件 → 计数器被重置为 0 → 通道 2/3 的比较事件永远不会触发;

注意事项:当对通道 1 的比较寄存器执行任何写操作时,都会重置 GPT 计数器;

假设计数器正在运行,此时修改通道 1 的比较值:

  • 若原比较值 C_old 较大(如 0x1000),新值 C_new 较小(如 0x0800),且计数器已超过 C_new(当前计数值 CNT > C_new)→ 若不强制重置,C_new 永远不会触发比较事件(因为计数器只会继续递增到 0xffffffff);
  • 强制重置后,计数器从 0 开始,新的 C_new 会在下次计数到 C_new 时触发事件 → 确保修改比较值后,新的定时逻辑能立即生效,避免逻辑漏洞;

应用场景:通道 1 控制基础周期,通道 2与通道3 实现周期内的子事件;

  • 通道 1 设定 "大周期"(1ms),让计数器每 1ms 重启 → 实现固定周期的主任务(数据上传任务);
  • 通道 2与通道3 设定 "大周期内的子时间点"(0.3ms、0.7ms)→ 触发周期内的细分任务(多阶段传感器采集数据、多阶段传感器数据处理);

自由运行模式

当通过 GPT 控制寄存器 GPT_CR 配置为自由模式,在自由运行模式下,当所有 3 个比较通道发生比较事件时,计数器都不会重置,计数器会继续递增计数,直到达到 0xFFFFFFFF,然后回绕(溢出) 到 0x00000000 重新开始

当计数器与通道的比较值相等时,触发该通道的比较事件,三个比较通道(通道 1/2/3)共用一个32 位向上计数器,但是三个比较通道可设置不同的比较值,在同一个时间轴上独立触发事件;

应用场景:多事件并行调度,示例如下:

  • 通道 1 比较值 T1 (T1=1000) → 触发传感器采集任务;
  • 通道 2 比较值 T2 (T2=3000) → 触发检查硬件状态任务;
  • 通道 3 比较值 T3 (T3=5000) → 触发系统校准任务;

GPT时钟源

  • Crystal Oscillator:系统基准时钟,典型频率为24MHz;
  • External Clock:外部时钟,无固定频率,可灵活配置;
  • Peripheral Clock:系统外设总线时钟,典型频率为66MHz;
  • Low Frequency Reference Clock:  低频参考时钟,用于低功耗模式、RTC 实时时钟,典型频率为32.768KHz;
  • High Frequency Reference Clock:系统的高频基准时钟;

 GPT框图

 

  1. Timer Counter 32-bit:32 位向上计数器;
  2. GPT_CAPTURE1:输入捕获引脚,用于检测外部信号的边沿(上升沿 / 下降沿)
  3. IM1 (Input Mode/Mask):输入模式控制,配置捕获的边沿类型(上升沿、下降沿、双边沿)或使能 / 屏蔽捕获;
  4. IF1 (Input Flag):输入捕获标志,当检测到指定边沿时置位,触发将计数器值保存到输入寄存器的机制;
  5. IF1IE (Input Capture Interrupt Enable):输入捕获中断使能位,置 1 时,捕获事件触发处理器中断;
  6. Timer Input Reg 1 (32-bit):输入捕获寄存器,存储捕获时刻的计数器值;
  7.  Counter Value BUS:用于实时传输当前计数器的计数值,一段连接 32 位定时器计数器,另一端连接 输入捕获寄存器和 输出比较比较器;
  8. ROV (Roll-Over):计数器溢出标志,当 Timer Counter 从 0xFFFFFFFF 回绕到 0 时置位;
  9. ROVIE (Roll-Over Interrupt Enable):溢出中断使能位,置 1 时,溢出事件触发处理器中断;
  10. FRR (Free-Run Restart):自由运行模式下的重启控制,决定计数器是否重置;
  11. Timer Output Reg1 (32-bit):输出比较寄存器,存储预设的比较值;
  12. cmp (Comparator):比较器,持续对比 Timer Counter 值与 Timer Output Reg 值,匹配时触发事件;
  13. OF1 (Output Flag):输出比较标志,比较匹配时置位,触发引脚动作或中断;
  14. OF1IE (Output Compare Interrupt Enable):输出比较中断使能位,置 1 时,比较事件触发处理器中断;
  15. OM1 (Output Mode):输出模式控制,决定比较匹配时 GPT_COMPARE1 引脚的动作(如电平翻转、置高、置低等);
  16. GPT_COMPARE1 :输出比较通道引脚 ;

输入捕获:测量外部信号的高电平脉冲宽度

需求:测量 GPT_CAPTURE1 引脚上的高电平脉冲宽度,系统时钟经预分频后为 1MHz(计数器每 1μs 加 1);

一 配置阶段

  1. 选择时钟源为 ipg_clk=66MHz,设置预分频系数为 6666MHz / 66 = 1MHz,计数器每1μs 递增 1);
  2. 配置 IM1:由于需要测量高电平脉冲宽度,即上升沿开始、下降沿结束,因此选择上升沿和下降沿捕获;
  3. 置位 IF1IE:使能输入捕获中断,捕获事件触发中断处理;

二 捕获上升沿(记录起始时间)

  1. 外部信号在 GPT_CAPTURE1 引脚产生上升沿,sync 同步后,IM1 触发 IF1
  2. Timer Input Reg 1 锁存当前计数器值(假设为 T1 = 1000);
  3. 若 IF1IE 使能,触发中断,软件记录 T1(起始时间);

三 捕获下降沿(记录结束时间)

  1. 外部信号在 GPT_CAPTURE1 引脚产生下降沿,sync 同步后,IM1 再次触发 IF1
  2. Timer Input Reg 1 锁存当前计数器值(假设为 T2 = 1500);
  3. 触发中断,软件计算脉冲宽度:T2 - T1 = 500(计数)→ 对应时间 500μs(因 1 计数 = 1μs);

输出比较:生成 1kHz PWM 波

需求:在 GPT_COMPARE1 引脚生成 1kHz、占空比 50% 的 PWM 波;

分析:  假设计数器时钟 1MHz(周期 1μs),则 PWM 周期需 1000μs1kHz),占空比 50% 即高电平 500μs、低电平 500μs,那么输出比较寄存器的初始值设置为500;

一 配置阶段

  1. 选择时钟源为 ipg_clk=66MHz,设置预分频系数为 66;
  2. 配置 OM1:比较匹配时GPT_CAPTURE1 引脚电平翻转;
  3. 初始化输出比较寄存器( Timer Output Reg1) 为 500
  4. 置位 OF1IE:使能输出比较中断,用于更新下一次比较值;

二 第一次比较匹配(上升沿)

  1. 计数器从 0 开始计数,达到 500 时,cmp 比较匹配,OF1 置位;
  2. OM1 控制 GPT_COMPARE1 引脚电平翻转(假设初始为低电平 → 高电平);
  3. 若 OF1IE 使能,触发中断,软件更新 Timer Output Reg1 为 1000

三 第二次比较匹配(下降沿)

  1. 计数器继续计数到 1000cmp 再次匹配,OF1 置位。
  2. OM1 控制引脚电平翻转(高电平 → 低电平)。
  3. 中断中更新 Timer Output Reg1 为 1500(下一个周期的高电平结束点);

四 循环生成 PWM

  • 每次比较匹配时翻转电平,并更新下一次比较值,持续循环 → 生成稳定的 1kHz50% 占空比 PWM 波;

GPT模块外部引脚复用与功能映射表

时钟引脚选取:首先检查检查是否需要以太网(ENET1)或 UART1 功能,若以太网和 UART1 都不用,任选;若其中一个需启用,选另一个闲置的;然后将选取的引脚复用为GPT 时钟引脚;

输入捕获引脚(GPT1_CAPTURE1)选取:优先选取GPIO1_IO00,由于GPIO1_IO00 是独立 GPIO,复用为捕获功能时不影响其他外设;

输出比较引脚(GPT1_COMPARE1)选取:优先选取GPIO1_IO01,由于GPIO1_IO01 是独立 GPIO,复用为比较功能时不影响其他外设;

GPT使用注意事项

若 GPT 定时器被禁用(EN=0) ,则 计数器(Main Counter) 和 预分频器(Prescaler Counter) 会冻结当前计数值(停止递增,保持最后一次计数结果),此时,ENMOD 位 决定:当 EN 位重新置 1(GPT 再次使能)时,计数器如何恢复计数

  • 若 ENMOD=1(重置模式):当 GPT 重新使能(EN=1)时,主计数器和预分频计数器会被强制重置为 0(从头开始计数);
  • 若 ENMOD=0(续传模式):当 GPT 重新使能(EN=1)时,主计数器和预分频计数器会从冻结的计数值继续递增;

硬件复位:会将所有 GPT 寄存器重置为各自的默认复位值,除输出比较寄存器(OCR1、OCR2、OCR3) 会被置为0xFFFFFFFF外,其余寄存器均恢复默认,而输入捕获寄存器复位值会被重置为 0x00000000

GPT Memory Map

GPT寄存器

GPTx_CR寄存器

bit[0]: EN位,定时器使能位若配置为1表示启用 GPT 计数器,开始计数;若配置为0表示禁用计数器,冻结当前计数值;
bit[1]: ENMOD位,使能模式位,决定禁用后重新使能时的行为,若配置为1表示重新使能;时,计数器重置为 0,若配置为0表示重新使能时,计数器从冻结值继续递增计数;

bit[8:6]: CLKSRC位,时钟源选择位用于配置 GPT 计数器的时钟来源,若配置为000表示无时钟输入,配置为001表示时钟源为ipg_clk,配置为010表示时钟源为ipg_clk_highfreq,配置为011表示时钟源为External Clock,配置为100表示时钟源为ipg_clk_32k,配置为101表示时钟源为ipg_clk_24M;

bit[9]: FRR位,自由运行 / 重启模式选择位,若配置为1表示自由运行模式,若配置为0表示重启模式;
bit[10]: EN_24M位,24MHz 时钟使能;

bit[15]: SWR位,软件复位控制位,写 1 复位 GPT 定时器,复位后自动清0;

bit[17:16]: IM1位,输入捕获通道1模式控制位用于配置 GPT_CAPTURE1 引脚的哪种跳变方式会触发保存计数器值的动作,若配置为00表示禁用捕获,若配置为01表示仅上升沿触发,若配置为10表示仅下降沿触发,若配置为11表示双边沿触发;

bit[22:20]: OM1位,输出比较通道 1 的模式控制位用于配置比较匹配时 GPT_COMPARE1引脚的具体动作,若配置为000表示输出断开即比较事件不影响引脚;若配置为001表示翻转输出即比较事件发生时,引脚电平翻转;若配置为010表示清除输出即比较事件发生时,引脚电平配置低电平;若配置为011表示置位输出即比较事件发生时,引脚电平配置高电平;

bit[29]: FO1位,强制输出比较位其作用为手动触发输出比较动作,若配置为1时立即执行 OMn 配置的输出动作,但不置位状态寄存器(GPTX_SR)比较事件标志位(OFn),写1后自动清除;

GPTx_PR寄存器

bit[31:16]: 保留位

bit[15:12]: PRESCALER24M位,当且仅当 时钟源(CLK_SRC)选择 24M 晶体时钟 时生效,对 24MHz 输入时钟分频;

bit[11:0]: PRESCALER位,用于对 CLK_SRC 选择的任意时钟源 分频,决定最终输入计数器的时钟频率,其中分频系数 = PRESCALER 值 + 1,如PRESCALER = 0x001则分频系数为 2

GPTx_SR寄存器

bit[0]: OF1位,输出比较通道 1 标志位,当计数器值匹配 GPT_COMPARE1 的比较值时置 1
bit[3]: IF1位,输入捕获通道 1 标志位,当 GPT_CAPTURE1 引脚检测到配置的边沿跳变时置 1

bit[5]: ROV位,计数器溢出标志位,无论计数器处于重启模式还是自由运行模式,只有计数器真正达到 0xFFFFFFFF 时ROV位置 1(当 32 位计数器从 0xFFFFFFFF 回绕到 0 时置 1

GPTx_IR寄存器

bit [0]: OF1IE位,输出比较通道 1 中断使能0表示禁用通道 1 的比较中断(OF1 标志置位不触发中断),1表示启用通道 1 的比较中断(OF1 标志置位时触发中断);

bit [3]: IF1IE位,输入捕获通道 1 中断使能,0 表示禁用通道 1 的捕获中断(IF1 标志置位不触发中断) 1表示启用通道 1 的捕获中断(IF1 标志置位时触发中断);

bit [5]: ROVIE位,计数器溢出中断使能, 0表示禁用溢出中断(即使 ROV 标志置位,也不触发中断), 1表示启用溢出中断(ROV 标志置位时,触发中断);

GPTx_OCR1寄存器

输出比较寄存器 1用于存储 输出比较通道 1(Output Compare Channel 1)的预设比较值 ,当 GPT 的 32 位计数器(GPT_CNT)递增到该值时,会触发 输出比较事件;

GPTx_ICR1寄存器

GPTx_ICR1 为只读寄存器,专门用于保存 输入捕获通道 1(Input Capture Channel 1)最后一次捕获事件发生时的计数器值;

GPTx_CNT寄存器

GPT 模块的计数器寄存器GPTx_CNT 用于 存储 GPT 模块 32 位计数器的当前值,读操作实时反映计数器当前值,不影响计数流程,写操作会强制修改计数器值并且打断当前计数流程;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914405.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914405.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914405.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#oda0095. 字符串通配符【B卷 100分】-字符串

题目描述问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。要求:实现如下2个通配符:* :匹配0个或以上的字符(注&…

面向对象设计原则

面向对象:是一种编程思想,面向过程是关注实现的步骤,每个步骤定义一个函数,调用函数执行即可。面向对象关注的是谁来执行,把具有相同属性和行为的一类事物进行抽象成类,然后再通过实例化出一个个具体的对象…

Hyperledger Fabric深入解读:企业级区块链的架构、应用与未来

一、引言:企业级区块链的标杆Hyperledger Fabric是Linux基金会主导的开源项目,专为企业级应用设计,以模块化架构、许可链机制和隐私保护为核心,广泛应用于金融、供应链、医疗等领域。相较于公有链(如以太坊&#xff09…

从0开始学习R语言--Day45--Hausman检验

当我们在探究数据本身是否和变量相关时,往往都会对这两者进行回归分析,控制一下变量来看看趋势走向。但其实在分析前,我们可以先尝试做Hausman检验,这可以帮助我们判断数据的变化到底是因为变量不一样了还是因为自己的个体效应所以…

闲庭信步使用图像验证平台加速FPGA的开发:第九课——图像插值的FPGA实现

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程…

Android事件分发机制完整总结

一、核心概念事件分发的本质Android事件分发采用责任链模式,事件从Activity开始,依次经过ViewGroup和View。整个机制只有一个入口:dispatchTouchEvent方法。onInterceptTouchEvent和onTouchEvent都不是独立的事件入口,而是被dispa…

【论文阅读】AdaReasoner: Adaptive Reasoning Enables More Flexible Thinking

AdaReasoner: Adaptive Reasoning Enables More Flexible Thinking3. AdaReasoner3.1 动机3.2 问题定义3.3 动作选择过程3.3.1 动作空间定义3.3.2 动作选择3.4 探索策略3.5 强化学习训练3.5.1 训练算法3.5.2 目标函数3.5.3 损失函数AdaReasoner: Adaptive Reasoning Enables Mo…

深入了解Modbus TCP:工业通信的“通用语言”

目录 简介一、Modbus TCP的“前世今生”二、Modbus TCP的核心特点三、Modbus TCP的工作原理1. 报文结构2. 功能码四、Modbus TCP的应用场景五、使用Modbus TCP的注意事项六、总结简介 在工业自动化的世界里,不同设备之间的“对话”至关重要。从PLC(可编程逻辑控制器)到传感…

基于Selenium和FFmpeg的全平台短视频自动化发布系统

一、项目背景与概述在当今短视频营销盛行的时代,许多企业和个人需要同时管理多个短视频平台账号。手动上传视频到抖音、快手、小红书等平台不仅效率低下,而且容易出错。本文将介绍一个基于Python的自动化短视频处理与发布系统,它能够&#xf…

技术演进中的开发沉思-31 MFC系列:类层次结构

提及MFC,不得不说他的类层次。如果把 MFC 框架比作是座精密的钟表,那类层次结构便是其内部咬合的齿轮组。每个类都有明确的 “家族地位”,既继承着先辈的本领,又发展出独特的专长。这种层级分明的设计,让 Windows 编程…

2023.05.06 更新前端面试问题总结(12道题)

2023.05.04 - 2023.05.06 更新前端面试问题总结(12道题) 获取更多面试相关问题可以访问 github 地址: https://github.com/pro-collection/interview-question/issues gitee 地址: https://gitee.com/yanleweb/interview-question/issues 目录&#xff1…

【网络】Linux 内核优化实战 - net.ipv4.tcp_keepalive_intvl

目录1. TCP Keep-Alive 机制回顾2. 参数作用3. 参数取值与影响4. 使用场景与建议5. 相关参数6. 如何配置该参数临时生效(重启后失效):永久生效(需重启或重载配置):7. 性能优化建议8. 监控与故障排查net.ipv…

20250710解决KickPi的K7的SDK编译异常:rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】

20250710解决KickPi的K7的SDK编译异常:rk3576-android14.0-25250704.tar.gz【降低BUILD_JOBS】 2025/7/10 20:59缘起:KickPi的K7的SDK编译异常:rk3576-android14.0-25250704.tar.gzZ:\14TB\SDK\rk3576_data\1-SDK软件源码\Android14\20250704…

《Java EE与中间件》实验一 基于MyBatis的留言本

目 录 一、实验目的和要求 1、实验目的 2、实验要求 二、实验实现思路及步骤 1、实验思路 2、实验步骤 3、实验方案 三、主要开发工具 四、实验效果及实现代码 1、留言本数据库构建实现 (1)建立javaee-project数据库 (2&#xf…

ARM汇编编程(AArch64架构) - 第14课:安全扩展(ARM TrustZone)

目录1. TrustZone基础概念1.1 安全扩展架构1.2 关键组件2. 世界切换机制2.1 状态切换流程2.2 关键寄存器配置3. SMC调用实现3.1 调用规范3.2 完整调用流程4. 实战练习4.1 实验:实现双世界通信4.2 调试技巧1. TrustZone基础概念 1.1 安全扩展架构 startuml rectang…

OpenCV哈希算法------Marr-Hildreth 边缘检测哈希算法

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该类实现了 Marr-Hildreth 边缘检测哈希算法(Marr-Hildreth Hash),用于图像相似性比较。它基于 Marr-Hildreth …

【git#5】远程操作 标签管理

📃个人主页:island1314 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 生活总是不会一帆风顺,前进的道路也不会永远一马平川,如何面…

如何使用 Python 删除 Excel 中的行、列和单元格 – 详解

目录 开发环境准备 使用 Python 删除 Excel 表格中的行 删除特定行 删除空白行 删除含指定数据的行 使用 Python 删除 Excel 表格中的列 删除特定列 删除空白列 删除含指定数据的列 使用 Python 删除 Excel 中的单元格并自动移动剩余内容 删除特定单元格 删除空白单…

箭头函数(Arrow Functions)和普通函数(Regular Functions)

在 JavaScript 中,箭头函数(Arrow Functions)和普通函数(Regular Functions)有以下主要区别:1. 语法箭头函数:使用 > 语法,更简洁,可省略 function 和 return&#xf…

Spring Boot 配置注解处理器 - spring-boot-configuration-processor

前言 在 Spring Boot 开发中,配置属性的管理是构建企业级应用的核心环节。Spring Boot 通过 ConfigurationProperties 注解提供了一种类型安全的方式,将配置文件中的属性绑定到 Java 对象中。然而,开发者在使用过程中常会遇到配置属性无自动补…