TC3xx系列芯片--GPT12模块介绍

1、模块介绍

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

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

2、功能介绍

2.1、功能列表

GPT1 包含三个定时器/计数器:核心定时器 T3 和两个辅助定时器 T2/T4。最大分辨率为 fGPT/4。

GPT1 的辅助定时器可选地配置为核心定时器的重新加载或捕获寄存器。

如下列表列出了支持的功能:

fGPT/4 最大分辨率

3 个独立的定时器/计数器

4 种操作模式:1、定时器模式。2、门控定时器模式。3、计数器模式。4、增量接口模式

重新加载和捕获功能

单独中断

GPT2 块包含两个定时器/计数器:核心定时器 T6 和辅助定时器 T5。最大分辨率为 fGPT/2。

附加的捕获/重新加载寄存器(CAPREL)支持捕获和重新加载操作,并具有扩展功能。

如下列表列出了支持的功能:

fGPT/2 最大分辨率

2 个独立的计时器/计数器

3 种操作模式:1、定时器模式。2、门控定时器模式。3、计数器模式

通过 16 位捕获/重载寄存器 CAPREL 扩展捕获/重载功能

单独中断

2.2、功能结构

GPT12 中两个子模块功能类似,其中 GPT1 的功能更多,以 GPT1 子模块为示例介绍 GPT12 硬件原理。如下图是 GPT1 模块内部结构图:

如上图所示 GPT1 包含了 3 个定时器 T2、T3、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 分别有各自内部时钟分频 Txl,其分频关系位 2^Txl。所以定时模式下定时器频率计算公式 为:

fTx = fGPT/(BPS1 * 2TxI )

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

2.3、独立运行模式

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

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

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

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

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

2.3.1、定时器模式

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

当设置 T3M = 000B 时,T3 为定时器模式。T3M 位字段处于 T3CON 寄存器中。


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


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


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

2.3.2、门控定时器模式

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

当 T3M = 010b 时,T3IN 的低电平有效,会启动定时器,高电平则停止定时器;

当 T3M = 011b 时,则相反是高电平启动定时器。

2.3.3、计数器模式

当设置 T3M = 001B 时,T3 为计数器模式,其逻辑关系如下图所示:

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

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

2.3.4、增量接口模式

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

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

2.4、协同运行模式

2.4.1、重载定时模式

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

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

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


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


另外使用该模式还可以组合实现 PWM 信号,但是 Aurix TC3xx 具有功能完备的 GTM 外设。因此 GPT12 硬件的 PWM 很少被使用。

2.4.2、串联定时模式

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

如上图所示,T3 的溢出会输送到 T2 进行累加,因此可以实现位宽位 32 位的定时器。

若 T3OUT 使用单边沿触发 T2,则可以实现 33 位的定时器。

3、MCAL &ETAS 配置及代码

以使用 GPT12 的 T2 和 T3 组成一个重载定时器,用于系统的 1ms Tick。

3.1、MCU

首先需要在 MCU 中将需要使用的定时器资源分配到 GPT 软件模块。(这里的 GPT 是 AutoSar 中的软件抽象定义,区别于硬件 GPT12)具体操作如下图:

然后需要在 MCU 的 General 中,设置 GPT 的分配系数,这里 GPT1 设置 4 分配。如下图:

3.2、Irq

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

若使用 ETAS 的 ISOAB 工具配置,会使用 OS 模块中配置的优先级。

3.3、GPT

首先需要在 General 中,使能一些常规接口使能配置,按初始配置即可。如下图:

GptChannelId:通道 ID;

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

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

GptTimerChannelUage:预设的通道频率,自行配置,选择 GPT_TIMER_CHANNEL_NORMAL

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

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

GptChannelClkSrcRef:关联的 GPT 时钟。

对于 GptNotification 选项卡,这里用来配置 Gpt 中断的通知函数,GPT 中断中会调用该函数。但是若使用 ETAS 中的 OS 模块,则不需要配置该选项。中断回调函数在 OS 模块中生成。

最后配置 Cpt12TimerOutputModleConfiguration 选项卡,这里配置 GPT12 的硬件定时器。选择定时器 T2 和 T3,主、辅没有顺序要求。若选择 GPT12 的 GPT2 子模块,则只能配置 T5 和 T6。

3.4、ETAS 工具中配置

ETAS 工具如下图:

3.5、代码

首先需要在 EcuM 中添加 Gpt 初始化函数,如下图:

StartTimer 的 Tick 值是根据分频算出的,T3 的时钟频率为 100/4/1 = 25MHz,因此定时器实现 1ms 的 Tick 值为 25000。如下图

最后在 Timer 的中断回调函数中添加调度表回调函数,如下:

ISR(GPTT3SR_ISR)
{
    Os_IncrementCounter_Rte_TickCounter();
}
相关推荐
哔哥哔特商务网2 小时前
特斯拉公布汽车连接器设计,助推行业标准化
汽车
智源笔记4 小时前
车载ADB:让汽车更智能的桥梁
adb·汽车
康谋自动驾驶8 小时前
康谋方案 | 多源相机数据采集与算法集成测试方案
人工智能·科技·数据分析·自动驾驶·汽车
电子科技圈10 小时前
XMOS将在CES 2025上展出多款由边缘AI驱动的创新音效、音频、识别和处理解决方案
人工智能·科技·嵌入式硬件·mcu·物联网·音视频·iot
勇敢许牛牛在线大闯关12 小时前
Vue项目实战-新能源汽车可视化(二)(持续更新中)
javascript·vue.js·汽车
仿真APP12 小时前
汽车零部件设计之——发动机曲轴预应力模态分析仿真APP
汽车·振动·仿真app·发动机曲轴·模态分析
老猿讲编程12 小时前
【零成本抽象】汽车嵌入式软件开发中零成本抽象的功能安全考量与应对策略
c++·安全·汽车·零成本抽象
ws20190712 小时前
AUTO TECH China 2025华南展:一起探索汽车零部件的未来
大数据·人工智能·汽车
kirito学长-Java1 天前
springboot/ssm车辆违章信息管理系统Java代码web项目汽车违章处罚源码
java·spring boot·汽车
Modest1y1 天前
VAS1260Q奇力LED驱动芯片DCDC降压恒流可替代Diodes8860
单片机·嵌入式硬件·汽车·硬件工程·pcb工艺