英飞凌Aurix2G TC3XX GPT12模块详解

英飞凌Aurix2G TC3XX GPT12模块详解

本文主要介绍英飞凌 Aurix2G TC3XX系列芯片GPT12模块硬件原理、MCAL相关配置和部分代码实现。

文章目录

  • 英飞凌Aurix2G TC3XX GPT12模块详解
    • 1 模块介绍
    • 2 功能介绍
      • 2.1 结构
      • 2.2 独立运行模式
        • 2.2.1 定时器模式
        • 2.2.2 门控定时器模式
        • 2.2.3 计数器模式
        • 2.2.4 增量接口模式
      • 2.3 协同运行模式
        • 2.3.1 重载定时模式
        • 2.3.2 串联定时模式
    • 3 MCAL配置及代码示例
      • 3.1 MCU
      • 3.2 Irq
      • 3.3 GPT
      • 3.4 代码及示例
    • 4 小结
    • 参考资料

1 模块介绍

GPT12(General Purpose Timer Unit )是Aurix TC3XX内部的通用定时器模块,提供高精度定时功能。GPT12包含GPT1和GPT2两个子模块,通用定时器单元块GPT1和GPT2具有非常灵活的多功能定时器结构, 可用于定时、事件计数、脉宽测量、脉冲产生、倍频等用途。

在Autosar中,该硬件模块一般用于软件模块GPT的硬件定时器,或者作为OS Tick,利用硬件Timer驱动OS Counter。

2 功能介绍

2.1 结构

GPT12中的两个子模块功能类似,其中GPT1的功能更多,这里以GPT1子模块作为示例介绍GPT12硬件原理。如下图是GPT1模块内部结构图。
在这里插入图片描述

我们可以看到,GPT1内部包含了3个可用定时器T2、T3和T4,其中T3为主定时器,T2和T4为辅寄存器。每个定时器的位宽都是16位。单独使用时其功能相同,组合使用时T2或者T4可以用来重载T3,或者捕获T3的值。

每个定时器有两个输入,一个TxIN和一个TxEUD。TxIN可以用作门控模式,控制定时器启停,TxEUD可输入高低信号用定时器计数。

T3有一个输出引脚T3OUT,可将T3的溢出状态向外从引脚输出。

3个定时器各自都有一个中断请求源,连接中断路由模块IR,实现定时器中断。

如前所述,GPT1的时钟源是fGPT,在到达GPT1模块之后有一个可选分频BPS1,分频值可选4、8、16、32。然后T2~T4分别有各自的内部时钟分频TxI,其分频关系为2^TxI。所以定时模式下定时器频率计算公式为:

f T x = f G P T B P S 1 ∗ 2 T x I \begin{equation} f_{Tx} = \frac {f_{GPT }} {BPS1*2^{TxI}} \end{equation} fTx=BPS12TxIfGPT

一般我们配置fGPT=fSPB=100MHz,BPS1选择4,TxI配置为0,可得到25MHz的定时器频率。

2.2 独立运行模式

单独使用时3个定时器的功能一样,这里以T3为例。T3的定时器的Counter值就存储在GPT12_T3寄存器中,可以通过软件进行读写,重置定时器值或者读取当前值。T3的控制主要依赖控制寄存器GPT12_T3CON寄存器,其寄存器结构如下图所示。

在这里插入图片描述

其中T3R用来控制T3的运行,置1则启动定时器,清0则停止寄存器。如果是门控模式,则同时还需要引脚状态为激活态。

定时器支持累加/累减模式,当T3UDE=0时,该模式由T3UD控制;当T3UDE=1时,该模式由相连的输入引脚T3EUD控制。

T3的溢出控制连接关系如下图所示:

在这里插入图片描述

当T3溢出时,T3OTL置位,并将该状态传递给相连的引脚T3OUT。同时通过一个ShadowLatch将延迟前后的信号传递给辅助定时器,当出现溢出时,这两个延迟信号之前存在电平差,从而触发辅助定时器的相关功能。

2.2.1 定时器模式

T3作为定时器模式时的逻辑关系图如下图所示:

在这里插入图片描述

当设置T3M=000b时,T3为定时器模式。

如前所述,fGPT传入之后经过两级分频BPS1T3I,并经过开关T3R之后,到达内部定时器,推动其进行运转。累加或累减则取决于下方的T3UD、T3EUD、T3UDE等状态。

当定时器溢出时,触发中断信号,实现定时中断。同时通过引脚T3OUT将溢出信号传出去。

另外溢出信号还传递到辅助寄存器,实现T3的重载、捕获等功能。因为T3是没有内部重载的逻辑的,所以如果需要使用连续的定时功能,如OS Tick,则需要使用一个辅助寄存器,进行定时值的重载。

2.2.2 门控定时器模式

在这里插入图片描述

门控定时器逻辑整体和定时器模式相同,只是在入口处增加了一个与门逻辑GateCtrl。

当T3M=010b时,T3IN的低电平有效,会启动定时器,高电平则停止定时器;如果T3M=011b时,则相反是高电平启动定时器。

2.2.3 计数器模式

当设置T3M=001b时,T3为定时器模式。其逻辑关系图如下图所示。

在这里插入图片描述

在Counter模式下,T3I用来控制引脚输入的计数模式,比如上升沿计数、下降沿计数或双边计数。具体参考下表。
在这里插入图片描述

需要注意的是计数的最高分辨率等于经过BPS1分频后的时钟频率。

2.2.4 增量接口模式

当设置T3M=110b或111b时,T3为2.2.4 增量接口模式。其逻辑关系图如下图所示。

在这里插入图片描述

在增量接口模式下,与主定时器T3(T3IN, T3EUD)相关联的两个输入用于接口到增量编码器。T3由一个或两个外部输入引脚上的每个转换进行时钟处理,以提供编码器输入的2倍或4倍分辨率。

2.3 协同运行模式

GPT12的设计使用了一些协同设计,即主定时器和辅定时器在一起实现相关的功能。

2.3.1 重载定时模式

如前所述,T3定时器内部不具备重载的功能,因此要实现连续的周期定时功能,则需要依赖辅寄存器。在重载模式下需要将T2(假定辅定时器为T2)的T2RC设置为1,表示该定时器的启停由T3控制。同时模式T2M设置为100b,表示重载模式。

重载定时模式的逻辑关系图如下图所示。

在这里插入图片描述

从图中可以看出,T3正常按照定时器模式使用,同时其溢出信号连接至T2,用于触发T3的重载,重载值为T2中保存的值。

该模式下T2的值不再运转改变,而是仅作为T3的加载寄存器使用。

另外使用该模式还可以组合实现PWM信号,但是Aurix TC3XX配备了功能完备的GTM,因此GPT12硬件的PWM很少被使用,感兴趣的读者可自行研究。

2.3.2 串联定时模式

如前所述,GPT12中的每一个Timer都是16位定时器,因此在实现较长、精度较高的定时时,就可以使用串联模式。其逻辑关系图如下图所示。

在这里插入图片描述

如图所示,T3的溢出会输送到T2进行累加,因此该组合内定时器的最大位宽为两个定时器之和,即32位定时器。如果T3OUT使用单边沿触发T2,则可以实现33位的定时器。

3 MCAL配置及代码示例

这里使用GPT1的T2和T3组成一个重载定时器,用于系统的1ms Tick,来实现一个示例。

3.1 MCU

首先我们需要到MCU->McuHardwareResourceAllocationConf->McuGpt12ModuleAllocationConf中将我们需要使用的定时器资源分配到GPT软件模块。(这里的GPT是Autosar中的软件抽象定义,区别于硬件GPT12)

在这里插入图片描述

然后我们来到MCU->General,拉到McuGpt12PrescalerConf,前面一步配置了这里才允许配。我们使能GPT1,使用4倍分频。

在这里插入图片描述

3.2 Irq

我们需要使用T3连续触发中断,实现Tick,因此需要在Irq模块配置一个T3中断优先级。

在这里插入图片描述

这里中断优先级选择一个未使用的即可,中断类型选择一类,如果是用作OS Tick的话选作二类,我这里只有MCAL基础包,只能选择一类;方向选择CPU0即可,如果是多核,可以根据需求设置。

3.3 GPT

在这里插入图片描述

首先来到General,照例General中还是一些常规接口使能配置,按初始配置即可,把需要使用的接口使能。

在这里插入图片描述

然后来到GptChannelConfiguration,这里我配置了一路通道。

  • GptChannelId:通道ID;

  • GptAssignedHwUnit :硬件单元,这里可选GTM和GPT12,我们使用GPT12;

  • GptChannelMode:通道模式,我们是连续,设置为GPT_CH_MODE_CONTINUOUS

  • GptTimerChannelUsage:预设的通道频率,这里我们自行配置,选GPT_TIMER_CHANNEL_NORMAL即可;

  • GptChannelTickFrequency和GptChannelTickValueMax都不需要配置,硬件固定的;

  • GptEnableWakeup:GPT唤醒功能,需要配合EcuM使用,休眠唤醒逻辑中使用;

  • GptChannelClkSrcRef:这里配不配都行,我们是硬件自行设置的频率,不用参考;

    在这里插入图片描述

    然后来到第二页选项卡GptNotification,这里用来配置Gpt中断的通知函数,GPT中断中会调用该函数。

    在这里插入图片描述

最后我们来到Gpt12TimerOutputModuleConfiguration选项卡,这里配置GPT12的硬件定时器。我们选择定时器T2和T3,主、辅没有顺序要求,工具会自动识别。这里如果选择GPT12的GPT2子模块,则只能配置T5和T6。

3.4 代码及示例

首先是初始化,我们需要初始化GPT硬件,配置中断。

然后需要EnableNotification函数去使能GPT12内部相关中断,并使能通知。

StartTimer的Tick值是根据分频算出来的,前面提到我们SPB=100MHz,BPS1在MCU中配置为4分频,T3I=0,则T3的时钟频率为100/4/1=25MHz,因此定时器实现1ms的Tick值为25000。

IrqGpt_Init();
SRC_GPT120T3.B.SRE = 1;     /* Enable GPT12 T3 Source. */Gpt_EnableNotification(GptConf_GptChannelConfiguration_LwipTimer);
Gpt_StartTimer(GptConf_GptChannelConfiguration_LwipTimer, 25000);  /* 1ms */

然后每次Timer到期都会进入中断,然后执行上文所配置的Notification函数,然后我们在Notification函数中进行Tick的累加和Tick标志位的置位。

void SystemTickIsr()
{SystemTickUpdateFlag = TRUE;
}

在main中我们轮询标志位和Tick,实现简单的1ms周期系统,并在其中切换LED灯的状态。

while(!SystemTickUpdateFlag){/* wait for tick update. */
}
SystemTickUpdateFlag = FALSE;
localSysTick++;if(localSysTick%500 == 0){Dio_FlipChannel(DioConf_DioChannel_LED1);
}

这样我们就实现了一个简单的1ms系统Tick,观察LED灯。

1ms系统Tick的LED灯

4 小结

本文详细介绍了英飞凌Aurix TC3XX中的GPT12模块,对其内部硬件结构和原理进行了拆解说明。最后在MCAL中GPT模块进行了配置,并结合代码使用GPT12实现了1ms的系统Tick。GPT12功能相对来说比较简洁,常用于实现Autosar OS中的系统Timer,也常用于EcuM中的系统定时器。但该模块资源也有限,一共5个Timer,且实现连续定时器功能时由于需要主从配合,只能提供两个连续定时器。

参考资料

  1. Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN.pdf
  2. Infineon-AURIX_TC3xx_Part2-UserManual-v02_00-EN.pdf

如您有任何问题,欢迎关注公众号【TechLink汽车软件】与我们联系!

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

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

相关文章

Python小白学习教程从入门到入坑------第二十九课 访问模式(语法进阶)

目录 一、访问模式 1.1 r 1.2 w 1.3 1.3.1 r 1.3.2 w 1.3.3 a 1.4 a 一、访问模式 模式可做操作若文件不存在是否覆盖r只能读报错-r可读可写报错是w只能写创建是w可读可写创建是a只能写创建否,追加写a可读可写创建否,追加写 1.1 r r&…

【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销

一、Linux 概述 1. 应用领域 服务器领域 linux在服务器领域是最强的,因为它免费、开源、稳定。 嵌入式领域 它的内核最小可以达到几百KB, 可根据需求对软件剪裁,近些年在嵌入式领域得到了很大的应用。 主要应用:机顶盒、数字电视、网络…

十三:java web(5)-- Spring数据持久层

目录 Spring 数据持久层 1. Spring 与 JDBC 1.1 使用 Spring 管理数据库连接 1.1.2 Apache Commons DBCP 基于配置文件xml 使用 1.1.3 Apache Commons DBCP 基于配置类使用 1.1.4 HikariCP 基于配置文件xml 使用 推荐使用 Spring Boot 默认连接池 1.1.5 HikariCP 基于配置…

uniApp之uni-file-picker使用踩坑

标题党~也不算坑吧 就是初体验 上传是需要存储一下子的,我以为uniApp是自己免费开的服务给大家中转使用,就没管这个事,但是官网是这么说的: 就我是怎么发现的,使用了一段时间后,上传的图片都裂了&#xff…

开源竞争-大数据项目期末考核

开源竞争: 自己没有办法完全掌握技术的时候就开源这个技术,培养出更多的技术依赖,让更多人完善你的技术,那么这不就是在砸罐子吗?一个行业里面总会有人砸罐子的,你不如先砸还能听个想。 客观现实&#xf…

Flutter3.22.2中SliverAppBar设置背景色滑动显示颜色错误

在使用Flutter项目开发中,可能会有页面需要滑动收起标题栏的效果,一般都会使用SliverAppBar来实现,当项目的Flutter的SDK版本升级到3.4后,发现使用了SliverAppBar的页面,在滑动过程中,标题栏和状态栏的颜色…

SpringBoot3中swagger无法使用

前言 springboot 3开始javax包改成了jakarta,而swagger-oas等包中依然使用的是javax,所以报错。另外springfox已经停止更新有段时间了,并且不支持OpenAPI 3标准,升级Springboot 3.0以后会有更多问题暴露出来。而SpringBoot 3只支…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置,所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …

第九周预习报告

文章目录 密码系统设计第九周预习报告学习内容AI 对学习内容的总结(1分)要求总结 对 AI 总结的反思与补充(2分)反思与补充 补充内容反思学习思维导图(2分)要求思维导图代码导图 基于 AI 的学习(…

GB/T 43206—2023信息安全技术信息系统密码应用测评要求(五)

文章目录 附录AA.1 概述A.2 密钥产生A.3 密钥分发A.4 密钥存储A.5 密钥使用A.6 密钥更新A.7 密钥归档A. 8 密钥撤销A.9 密钥备份A.10 密钥恢复A.11 密钥销毁 附录B附录C 附录A A.1 概述 密钥管理对于保证密钥全生存周期的安全性至关重要 ,可以保证密钥(除公开密钥外) 不被非授…

phpstudy 使用php8.2.9版本报错问题

phpstudy 使用php8.2.9版本报错问题 1、如果php8的扩展控制面板开启无效的话,可以手动开启试试 2、php有报错日志: Fatal error: Directive ‘track_errors’ is no longer available in PHP in Unknown on line 0 在切换php版本到更高版本时在终端查…

【科普小白】LLM大语言模型的基本原理

一、要了解LLM大模型的基本原理就要先来了解一下自然语言处理(NLP)。 NLP 是 AI 的一个子领域,专注于使计算机能够处理、解释和生成人类语言,主要任务包括:文本分类、自动翻译、问题回答、生成文本等。到底是NLP促生了…

初识网络编程TCP/IP

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结…… 相关名词解释 ✨✨网络…

整合本地市场机会 同城小程序打造社区商圈

同城市场中,商家与消费者之间的互动和交易模式正在发生深刻变化,同城小程序成为了企业、商户和消费者之间连接的桥梁,成为打造社区商圈、整合本地市场机会的重要工具。今天小编分享,同城小程序怎么一个软件整合以前十几个APP做的事…

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 (1)安装 Keil5 MDK 文件路径:江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE,安装即可,路径不能有中文。 (2)安装器件支持包 文件路径:江科大stm32入门教程资料…

面试经典 150 题:121,125

121. 买卖股票的最佳时机 【参考代码】 动态规划解决 class Solution { public:int maxProfit(vector<int>& prices) {int size prices.size();int min_price 99999, max_profit 0;for(int i0; i<size; i){if(prices[i] < min_price){min_price prices[i…

Spring boot 读模块项目升级为spring cloud 项目步骤以及问题

1.结构说明 bean 模块 &#xff0c;public 模块&#xff0c; client 模块&#xff0c; erp模块&#xff0c;system 主模块。 2.环境说明以及pom 原本环境 新环境 mysql 5.7 -------------- mysql 8.0 maven 3.9.6 jdk 8 -----------…

Linux系统-初始化

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 这是Linux进阶部分的最后一大章。讲完这一章以后&#xff0c;我们Linux进阶部分讲完以后&#xff0c;我们的Linux操作部分就…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…