打印
[通用 MCU]

英飞凌Aurix2G TC3XX GPT12模块详解

[复制链接]
267|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wiba|  楼主 | 2024-11-30 16:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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。所以定时模式下定时器频率计算公式为:




一般我们配置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传入之后经过两级分频BPS1和T3I,并经过开关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,且实现连续定时器功能时由于需要主从配合,只能提供两个连续定时器。


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_44000419/article/details/143667117

使用特权

评论回复
沙发
申小林一号| | 2024-12-2 15:13 | 只看该作者
学习一下

使用特权

评论回复
板凳
l1uyn9b| | 2025-1-4 17:02 | 只看该作者
英飞凌的Aurix 2G TC3XX GPT12模块是一款高性能的嵌入式系统模块,广泛应用于汽车和工业自动化等领域

使用特权

评论回复
地板
g0d5xs| | 2025-1-4 18:09 | 只看该作者
Aurix 2G TC3XX GPT12模块是英飞凌推出的一款基于高性能微控制器(MCU)的解决方案,旨在满足现代汽车和工业自动化系统中对高性能、高可靠性和高安全性的需求。该模块集成了多个处理器核心、内存和多种接口,以实现复杂的功能和高效的性能。

使用特权

评论回复
5
b5z1giu| | 2025-1-4 19:21 | 只看该作者
其实Aurix 2G TC3XX GPT12模块采用先进的处理器架构,具备出色的计算能力和处理速度,可满足不同领域的高性能需求

使用特权

评论回复
6
w2nme1ai7| | 2025-1-4 20:30 | 只看该作者
该模块提供了多种接口,包括高速串行接口、CAN总线接口、LIN总线接口等,方便与其他设备和系统进行连接

使用特权

评论回复
7
p0gon9y| | 2025-1-4 21:39 | 只看该作者
Aurix 2G TC3XX GPT12模块具备高安全性,采用多种安全机制和措施,保护系统和数据的安全。

使用特权

评论回复
8
lamanius| | 2025-1-4 21:53 | 只看该作者
可靠性高,该模块经过严格的生产工艺和质量控制,具备出色的稳定性和可靠性,可在恶劣的环境下长时间稳定运行

使用特权

评论回复
9
lix1yr| | 2025-1-4 23:05 | 只看该作者
我觉得是这样,Aurix 2G TC3XX GPT12模块广泛应用于汽车和工业自动化领域,包括发动机控制、底盘控制、车身电子、自动驾驶、工业自动化控制系统等。

使用特权

评论回复
10
t1ngus4| | 2025-1-5 08:46 | 只看该作者
采用高性能的处理器架构,具备多个核心。具备一定的内存容量,满足存储需求。

使用特权

评论回复
11
ex7s4| | 2025-1-5 10:12 | 只看该作者
提供多种接口,包括高速串行接口、CAN总线接口、LIN总线接口等。适应不同的温度环境,可在恶劣环境下稳定运行

使用特权

评论回复
12
cen9ce| | 2025-1-5 13:55 | 只看该作者
在使用Aurix 2G TC3XX GPT12模块时,需要遵循相关的使用说明和操作规程,确保正确使用。在进行模块开发和应用时,需要充分了解模块的特性和性能,以确保系统的稳定性和可靠性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

3313

帖子

3

粉丝