英飞凌 Aurix2G TC3XX GTM 模块详解

英飞凌 Aurix2G TC3XX GTM 模块详解

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

目录

  • 英飞凌 Aurix2G TC3XX GTM 模块详解
  • 1 模块简介
  • 2 功能介绍
    • 2.1 GTM 总览
    • 2.2 CMU(Clock Management Unit)
      • 2.2.1 功能介绍
      • 2.2.2 MCAL 配置
    • 2.3 TOM(Timer Output Module)
      • 2.3.1 功能介绍
      • 2.3.2 TOM 通道
      • 2.3.3 MCAL 配置
    • 2.4 ATOM(ARU-connected Timer Output Module )
      • 2.4.1 功能介绍
      • 2.4.2 ATOM 通道
      • 2.4.3 MCAL 配置
    • 2.5 TIM(Timer Input Module)
      • 2.5.1 功能介绍
      • 2.5.2 TIM 通道
      • 2.5.3 MCAL 配置
  • 3 GTM 连接
    • 3.1 Port 连接
      • 3.1.1 TOM/ATOM 与引脚连接
      • 3.1.2 TIM 与引脚连接
    • 3.2 ADC 连接
  • 4 小结
  • 参考资料


1 模块简介

GTM(Generic Timer Module,通用定时器)是德国博世公司开发的定时器内核架构,它包含一个模块框架,其中包含具有不同功能的子模块。这些子模块可以以可配置的方式组合起来,形成一个复杂的计时器模块,为不同的应用程序域和一个应用程序域中的不同类提供服务。由于这种可伸缩性和可配置性,计时器被称为通用计时器。

GTM 具有多个子模块,模块可单独工作,包括高精度定时功能、Pwm 波输出功能和 Icu 波形监控功能,也可进行组合实现各种复杂功能,如电机半桥死区输出功能霍尔电机控制功能等。

GTM 模块具有独立的内核,支持对其进行编程调试,也可作为芯片外设,通过外设寄存器进行访问控制。Aurix2G 系列芯片中集成的版本为 GTM IP v3.1.5.1,支持作为外设使用,通过 SPB 总线控制,且与芯片内部其他模块如中 IR 中断路由模块、Adc 模块等进行了连接设计,可配合实现复杂外设功能,同时解放 CPU 负载。

本文结合代码和配置,主要介绍时钟控制模块 CMU、定时器输出模块 ATOM/TOM、定时器输入模块 TIM,同时还将介绍 Aurix2G 芯片中 GTM 与 Port、Adc等连接的查询方式。

2 功能介绍

作为定时器模块,时钟的频率计算至关重要。Aurix2G 中 Gtm 的时钟源有两个,取决与用户设置的时钟频率。其计算公式如下:

f G T M = f S O U R C E G T M G T M D I V \begin{equation} f_{GTM} = \frac {f_{SOURCEGTM}} {GTMDIV} \end{equation} fGTM=GTMDIVfSOURCEGTM

f S O U R C E G T M = f S P B ∗ 2 i f G T M D I V = = 1 e l s e f S O U R C E G T M = f S O U R C E 0 \begin{equation} f_{SOURCEGTM} = f_{SPB}*2 if GTMDIV==1 else f_{SOURCEGTM} = f_{SOURCE0} \end{equation} fSOURCEGTM=fSPB2ifGTMDIV==1elsefSOURCEGTM=fSOURCE0

  • GTMDIV:GTM 分频系数,为寄存器 CCUCON0.GTMDIV 的值,0 表示 GTM 模块关闭
  • fSPB:外设总线时钟值,一般为 100MHz
  • fSOURCE0:系统总线时钟值,一般为 300MHz

也就是说,当 GTMDIV==1 时,GTM 的输入时钟频率等于外设总线时钟的 2 倍,否则等于系统时钟除以分频系数 GTMDIV。比如 SPB 为 100MHz 时,配置 GTMDIV 为 1,则 GTM 模块时钟为 2*100MHz=200MHz;系统时钟为 300MH 时,配置 GTMDIV 为 3,则 GTM 模块时钟为 300/3=100MHz。GTM 手册推荐时钟频率不高于 100MHz,主要考虑因素为功耗。

2.1 GTM 总览

GTM 子模块包括 ARU、BRC、FIFO、AFD、F2A、CMU、CCM、TBU、TIM、TOM、ATOM、DTM、MCS、MCFG、MAP、DPLL、SPE、ICM、CMP、MON,其架构框图如下图所示:

英飞凌 Aurix2G TC3XX GTM 模块详解_第1张图片

如图所示,GTM 内部由多个簇(cluster)组成,有些模块如 ATOMTOMSPE 在多个簇里面存在,每个簇中功能相同,具体的数量取决于芯片型号;而有些模块如 CMUTBU 只在主簇(Cluster0)中存在。每个簇有一个独立的输入时钟源,多个输入信号到 TIM 模块,多个输出经过 TOM/ATOM 然后从 DTM 输出;输入/输出信号一般是通过 Port 与外部进行信号交互,也可与其他模块如 Adc、Iom 等模块进行交互。

每个簇及其中的模块都有相应的配置寄存器,可直接通过 Aurix2G 的外设总线进行设置。

下面我们主要介绍 CMUTOMATOMTIM 模块。

2.2 CMU(Clock Management Unit)

2.2.1 功能介绍

时钟管理单元(Clock Management Unit, CMU)负责生成计数器和 GTM 的时钟。CMU 由三个子单元组成,包括 CFGUFXUEGU,为整个 GTM 模块生成不同的时钟源。CMU 的主时钟源是簇 0 时钟信号 cls0_clk,该信号由寄存器 GTM_CLS_CLK_CFG 中的位字段 CLS0_CLK_DIV 的值定义(默认为 2)。CMU 模块框图如图示。

英飞凌 Aurix2G TC3XX GTM 模块详解_第2张图片

CFGU(Configurable Clock Generation Unit,可配置时钟生成模块)可根据用户需求进行较大范围的时钟配置(分频参数为 24 位宽),是 CMU 主要的时钟控制单元。其输入源为簇 0 的输入时钟 CLS0_CLK,可输出 8 路不同频率的时钟,供 TIM, ATOM, TBU 等模块使用,且连接丰富,例如同一 ATOM 模块内部多个通道可使用不同的 CMU_CLK。每路 CMU_CLK 与 GTM 总时钟源之间有 3 层分频,第一层经过簇 0 分频得到 CLS0_CLK,第二层经过 Global Clock Divider 得到 CMU_GCLK_EN,然后经过 Clock Sourcex Divider 分频得到 CMU_CLKx。计算公式如下:

f C M U C L K x = f G T M C L S 0 C L K D I V ∗ G L O B A L D I V ∗ C L K C N T x \begin{equation} f_{CMUCLKx} = \frac {f_{GTM}} {CLS0CLKDIV*GLOBALDIV*CLKCNTx} \end{equation} fCMUCLKx=CLS0CLKDIVGLOBALDIVCLKCNTxfGTM

  • fCMUCLKx:CMU 通道 x 可配置时钟输出,x 取 0~8
  • fGTM:GTM 模块主时钟
  • CLS0CLKDIV:簇 0 分频系数,寄存器 CLS0_CLK_DIV,只可选 1 或者 2,默认为 2,即半分频
  • GLOBALDIV:全局分频,为 GCLK_NUM/GCLK_DEN 的值
  • CLKCNTx:CMU 时钟通道 x 分频系数,对应寄存器 CLK_CNT

FXU(Fixed Clock Generation Unit)为固定分频时钟,所有通道共用一个时钟源,时钟源可选 CFGU输出的通道时钟或者 CMU_GCLK_EN 时钟,如图所示其每路分频参数不可配置。FXU 主要供 TOM 模块使用。当选择 CMU_GCLK_EN 为时钟源时,计算公式如下:

f C M U C L K x = f G T M C L S 0 C L K D I V ∗ G L O B A L D I V ∗ F X C L K D I V x \begin{equation} f_{CMUCLKx} = \frac {f_{GTM}} {CLS0CLKDIV*GLOBALDIV*FXCLKDIVx} \end{equation} fCMUCLKx=CLS0CLKDIVGLOBALDIVFXCLKDIVxfGTM

与可配置 CMU 时钟的计算公式仅有 FXCLKDIV 不同。

EGU(External Generation Unit)可供外部外设使用,也可作为第二时钟域输出到其他 GTM 模块使用。

2.2.2 MCAL 配置

GTM 在 MCAL 中没有专门的模块,而是依附在 MCU 模块内的。详细配置如下:

  1. 这里我们先来到 MCU->GtmGlobalConfiguration_0->GtmClusterConf_0,配置 Cluster0 的分频值,也就是上文的 CLS0CLKDIV,这个值只能选 0,1,2,0 表示关闭该簇。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第3张图片

  2. 然后我们回到 MCU->GtmGlobalConfiguration_0->General,这里有两个参数,就是上文中决定全局分频 GLOBALDIVGCLK_NUMGCLK_DEN,这里一般都配置成 1,也就是全局 1 比 1 分频。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第4张图片

  3. 然后下面有一个 FixedClock 配置,前面提到因为 FXU 是不可配置分频的,但是可以配置时钟源和开关,就是下面这两个配置参数。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第5张图片

  4. 然后再往下就是 CFGU 的分频配置了,一共有 8 路,和对应的时钟开关。这里注意 CLKCNTx 等于配置参数加 1,也就是说 0 代表 1 比 1 分频,3 表示四分之一分频
    英飞凌 Aurix2G TC3XX GTM 模块详解_第6张图片

  5. 然后对应用到 FXU 的模块比如 TOM,使用时的分频值就需要根据上图选用的 FXU 中的固定分频比进行计算。

这里我们完成了 CMU 的时钟配置,假设我们配置的 GTM 总时钟为 100MHz,结合上面的配置,Cluster0 经过 2 倍分频得到 CLS0_CLK=50MHz**,全局分频配置为 1 则 CMU_GCLK_EN**=50MHz。CMU_CLKx 的分频参数全部为 1,也就是 CMU_CLKx(x=0~7)=50MHz。FXU 时钟源选择 CMU_GCLK_EN=50MHz,则各路 CUM_FXCLK 根据固定分频比计算得出。

2.3 TOM(Timer Output Module)

2.3.1 功能介绍

定时器输出单元 TOM 是 GTM 的主要输出模块之一,负责输出 Pwm****波形,一般每个 GTM 簇内有一个 TOM 模块,一个 TOM 模块内最多 16 个通道,每个通道可以独立输出,也可以进行关联做 Pwm 波的相位对齐,TOM[i]_CH[x]_OUT 表示 TOMi 的通道 x 输出。TOM 模块的模块框图如图所示:

英飞凌 Aurix2G TC3XX GTM 模块详解_第7张图片

每个 TOM 模块内部有两个 TGC 子模块,分别控制 8 个通道的使能及配置更新;每个 TGC 可从 TBU 模块选择一路通道作为时间基准以进行对齐同步。右上角的 CMU_FXCLK 为 TOM 输入时钟,是计算 Pwm****周期占空比的 Tick 基准,这里每路通道都可任意从 5 路 CMU_FXCLK 通道中任选其一,可以灵活配置精度。

2.3.2 TOM 通道

每个 TOM 模块有 16 个通道,每个通道包含两个比较单元 CCU0CCU1,以及一个输出单元 SOU。通道之间些许差异,通道 8~15 不支持 SPE,通道 0~7 如图所示:

英飞凌 Aurix2G TC3XX GTM 模块详解_第8张图片

CCU0 中包含一个 16 位累加器 CN0 和一个 16 位比较器 CM0,CCU1 主要包含一个 16 位比较器 CM1。CN0 在通道启动后会持续累加,在不同模式下有不同的归零逻辑;CM0 和 CM1 两个比较器用于控制通道输出的占空比和周期,无法直接修改,需要通过操作 SR0SR1 两个影子寄存器来进行修改。通道有两种输出模式,一种是持续累加模式(边缘对齐),一种是 Up-Down 模式(中央对齐)。

持续累加模式(边缘对齐)

持续累加模式下 CN0 会从 0 开始累加,达到 CM0 之后归零继续累加。

当 CN0 归零时,SOU 会根据 SL(Signal Level)输出起始电平;当 CN0 到达 CM1 时,SOU 会翻转电平。因此 CM0 的值为周期 Tick 值占空比****为 CM1/CM0。其输出波形与寄存器的值如下图所示,为边缘对齐:

英飞凌 Aurix2G TC3XX GTM 模块详解_第9张图片

Up-Down 模式(中央对齐)

在 Up-Down 模式下,CN0 仍然会持续累加,但是在到达 CM0 之后不归零,而是反向递减,之后到达 0 之后再累加。递增经过 CM1 时,设置电平为 SL,递减经过 CM1 时,设置电平为 SL 取反。其输出波形与寄存器关系如下图所示:

英飞凌 Aurix2G TC3XX GTM 模块详解_第10张图片

在该模式下其电平起点在周期中间,因此称为中央对齐,一般为电机控制使用。在该模式下其周期 Tick 值为 2*CM0占空比****仍为 CM1/CM0

除了以上两种模式 TOM 还支持通道相位对齐功能,即前一个通道复位时发出 Trigger 信号,当前通道收到信号后 CN0 归零,电平复位为初始电平,最终实现对齐功能。

2.3.3 MCAL 配置

TOM 可以被很多 MCAL 使用,比如 ADC、PWM、WDG、GPT、OGU 等,因此 TOM 的资源分频和引脚选择在 MCU 配置中,详细的其他配置在对对应的使用模块中。这里使用 TOM 实现一路 PWM 波作为实例,实现一个每秒闪烁一次的 LED 灯功能。

  1. 首先我们来到 MCU->McuGtmAllocationConf_0->McuGtmTomAllocationConf_0->McuGtmTomChannelAllocationConf_13,这里我们选用 TOM0_13,将硬件资源分配给 PWM
    英飞凌 Aurix2G TC3XX GTM 模块详解_第11张图片

  2. 然后我们来到 MCU->GtmGlobalConfiguration_0->GtmTomGlobalConf_0->GtmTomGroupConf_0,这里有一个 TBU 时间基准模块的选择,这里我们不需要动,直接用默认的 TOM_ACT_TB_TBU_TS0 就行,这个不影响输出的 PWM 波形,只是不同模块的同步基准。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第12张图片

  3. 然后在 MCU->GtmGlobalConfiguration_0->GtmTomGlobalConf_0->GtmTomChannelConf_13,选择我们需要输出的 PIN 脚,GTM 与 Port 的连接关系我们下文会讲,这里我们根据硬件 LED 等的位置,选择 P00.6
    英飞凌 Aurix2G TC3XX GTM 模块详解_第13张图片

  4. 然后在 PWM 模块配置一路通道。如下硬件选择 GTMPwmDutycycleDefault占空比 TICK 值,PwmPeriodDefault周期 TICK 值,关于周期占空比的计算,下面我们会讲。PwmPolarity 极性选择起始高电平。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第14张图片

  5. 然后我们来到下一页 PwmChannelClass,这里配置成 PWM_VARIABLE_PERIOD,能够运行时修改波形参数。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第15张图片

  6. 然后我们来到 GtmTimerOutputModuleConfiguration 这里,配置 PWM 使用 TOM 通道和时钟源,这里我们选择刚才 MCU 中配置的 TOM0_13,然后根据需求选择分频值。
    在这里插入图片描述
    这里我们讲一下怎么计算周期和选择时钟源,因为我们的目标是实现 LED 灯一秒闪烁一次,也就是周期为 1s,占空比为 50%,注意 TOM 的时钟 TICK 是 16 位的,也就是最高 65535,因此频率选择太高的话分不出低频的信号。通过前面计算我们得出 FXU 的输入时钟为 50****MHz,如果我们选择 FIXED_CLOCK1,分频 2 的 4 次方为 16 分频,那么频率为 3.125MHz,根据公式:
    f = T I C K T \begin{equation} f = \frac {TICK} {T} \end{equation} f=TTICK
    那我们的 TICK 最小为 3.125*10^6,65535 是肯定不够的。通过计算选择 FIXED_CLOCK2 也是不够的,因此我们选择 FIXED_CLOCK3,分频为 2 的 12 次方,通过计算得出 FIXED_CLOCK3 时钟频率为 50MHz/2^12=12207****Hz,小于我们的 TICK 位宽的。

    然后再根据上面公式,算出周期 TICK=Tf=12207Hz1s=12207次。占空比我们选择 50%,因此占空比 TICK=12207*50%=6103.这里我们在周期 TICK 配置参数填上 12207,但是占空比这里不能直接填 6103,因为 MCAL 中对占空比的配置有额外定义。我们看这个配置的描述:
    英飞凌 Aurix2G TC3XX GTM 模块详解_第16张图片
    这段话的意思是如果通道 Class 没有配置为 PWM_FIXED_PERIOD_SHIFTED,则计算的时候 0 表示 0 占空比,0x8000 表示 100% 占空比,只有当配置了 PWM_FIXED_PERIOD_SHIFTED 的时候,才是按照实际占空比计算。因此我们需要配置 50% 占空比,TICK 为 0x4000,也就是上图中的 16384

    但是配置生成的代码这里,我们可以看出工具帮我们计算了的,得到的寄存器值实际还是我们计算出来的值(16 进制):
    在这里插入图片描述

  7. 最后我们还需要配置一下 Port,根据 DataSheet 选择对应的输出模式 ALT1(DataSheet 中查询引脚模式对应功能)。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第17张图片

到这里我们就完成了 LED 闪烁的配置,代码中只需要对 Port 和 Pwm 模块进行初始化,TOM 通道就会发波,LED 灯就会闪烁。

	Port_Init(&Port_Config);
	Pwm_17_GtmCcu6_Init(&Pwm_17_GtmCcu6_Config);    
	/* 17是Infineon识别号,Pwm可以用Gtm也可以用Ccu6,所以这里名字后缀包含了二者 */

Pwm控制LED灯闪烁

2.4 ATOM(ARU-connected Timer Output Module )

ATOM 和 TOM 一样同为定时器输出单元,能够实现 TOM 的功能,同时功能更加强大。ATOM 和 TOM 主要有以下几点不同:

  • ATOM 可以通过路由功能和其他模块如 MCS、DPLL、PSM 进行数据交互,实现复杂功能
  • ATOM 可跟根据 TBU 的时间基准进行输出
  • ATOM 可以进行串行数据输出
  • ATOM 定时器位宽为 24 位,比 TOM 多了 8 位
  • ATOM 使用的时钟源为 CFGU,也就是有更灵活的分频配置的时钟源,而 TOM 使用 FXU
  • 一路 ATOM 为 8 通道,而一路 TOM 为 16 通道

除此之外,ATOM 和 TOM 在使用方法上基本相同。

2.4.1 功能介绍

ATOM 的结构和 TOM 类似,内部有一个 AGC 控制单元,和 8 路通道控制单元,有 TBU 时间基准输入和 CMU_CLK 时钟输入。

英飞凌 Aurix2G TC3XX GTM 模块详解_第18张图片

AGC 类似 TOM 的 TGC,主要控制模块的使能、通道参数等,通道控制单元 ATOM_CHx 负责通道的输出。这里我们注意到,和 TOM 一样,ATOM 也可以进行关联触发,图上位置 ATOM_TRIG_[i-1]表示可以接收来自上一个 ATOM 的触发,同时可以向下传递生成 ATOM_TRIG_[i],以进行通道的相位同步。

2.4.2 ATOM 通道

ATOM 通道相对于 TOM 通道,多了一个 ARU 通信接口 ACI,用来进行 ARU 数据路由的交互。

英飞凌 Aurix2G TC3XX GTM 模块详解_第19张图片

ATOM 通道中也是有两个比较单元 CCU0CCU1,在不同的 ATOM 模式下有不同的功能。ATOM 模块有以下功能:

  • ATOM Signal Output Mode Immediate (SOMI)
  • ATOM Signal Output Mode Compare (SOMC)
  • ATOM Signal Output Mode PWM (SOMP)
  • ATOM Signal Output Mode Serial (SOMS)
  • ATOM Signal Output Mode Buffered Compare (SOMB)

其中 SOMI 模式为立即输出模式,即通过 ACI 接口接收 ARU 路由数据,进行通道的立即输出。

SOMC 为比较输出模式,可以与 TBU 模块的时间基准进行比较,根据结果进行通道输出。

SOMP 即 PWM****输出模式,也是最常用的模式,功能上同 TOM。同样可以实现边缘对齐和中央对齐波形输出。

SOMS 模式下,ATOM 可以进行串行数据输出。

SOMB 模式可根据 CM0 和 CM1 两个 Buffer 中的值与 TBU 的比较结果进行 PWM 输出。

另外需要注意不同的模式下寄存器的功能有所不同,使用上需要参考手册的描述。

2.4.3 MCAL 配置

在 MCAL 中 ATOM 一般使用 SOMP 模式,与 TOM 功能类似,如果要进行复杂的功能,则需要进行手写来实现。这里在功能上 ATOM 的配置和 TOM 的配置基本类似,就不加以赘述了。

2.5 TIM(Timer Input Module)

2.5.1 功能介绍

定时器输入单元 TIM 是 GTM 中的重要模块,负责过滤和捕获 GTM 的输入信号。可以在 TIM 通道内测量输入信号的几个特性。对于高级数据处理,TIM 模块检测到的输入特性可以通过 ARU 路由到 GTM 的后续处理单元。单个 TIM 模块的功能框图如图所示:

英飞凌 Aurix2G TC3XX GTM 模块详解_第20张图片

每个 TIM 内部的通道数量取决于硬件型号,一般是 8 路。每路有两个输入信号,一个是 TIM 主输入 TIM_IN,一般用于连接外部 Port 口;另一个是辅助输入 AUX_IN,用于采集测量 GTM 中 TOM 或 ATOM 的输出信号。TIM 的输入时钟源为 CMU 的 CFGU 模块,也就是灵活可配置时钟源。同样 TIM 也有 TBU 时间基准模块输入。

2.5.2 TIM 通道

TIM 通道内部有输入选择模块、过滤模块、中断输出模块、超时检测模块 TDU、和 TIM 测量单元 TIM_CHx

英飞凌 Aurix2G TC3XX GTM 模块详解_第21张图片

输入选择模块主要用来进行输入源的选择,TIM 的输入不仅可以选择本通道,还可选择 x-1 通道,以及辅助通道。

英飞凌 Aurix2G TC3XX GTM 模块详解_第22张图片

TIM 过滤模块 FLT 负责信号的过滤,我们知道既然是采样测量就有可能出现信号抖动,那就需要过滤模块。该模块有不同的模式,在这里就不展开讨论了。

TIM 采样测量单元 TIM_CHx 是 TIM 通道的核心模块,用于进行信号的测量,根据不同的模式,有不同的测量输出内容。

英飞凌 Aurix2G TC3XX GTM 模块详解_第23张图片

每个 TIM 通道都可以从 8 路 CMU_CLK 可配置时钟源中灵活选用。FEDGE_DETx 则是通道经过过滤后的信号输入,如果没有使能过滤功能,FEDGE_DETx 就是直接的外部输入。输入信号每次上升沿和下降沿都可以产生对应的中断信号。FEDGE_DETx 最终也会输入到信号测量单元(SMU)中,以进行基于不同模式下的测量。同时 TIM 也会使用右上角的 TBU 时间基准输入,进行时间戳功能的实现。最后测量的结果会输出到 GPR0GPR1 中,不同的模式下这两个寄存器有不同的含义。

TIM PWM Measurement Mode (TPWM)

TIM 的 PWM 输入测量模式是最常用的模式,用来测量信号的 PWM 输入信号的周期和****占空比信号。

根据上图,在 TPWM 模式下,在每一个上升沿(假设高电平为起始),CNT 会从零开始计数,CNT 值会根据 CMU_CLKx 的输入进行累加,当出现下降沿时,会将值保存到 CNTS 中,CNT 继续累加。在下一个上升沿时 CNTS 中存储的值会传递到 GPR0 中,CNT 中的值会传递到 GPR1 中。因此 GPR1 为周期 TICK 值,GPR0 为占空比****TICK 值。至此完成了一个周期的测量。如果测量成功且值合理,则 TIM[i]_CH[x]_IRQ_NOTIFY 寄存器中的 NEWVAL 位会置位。

**TIM Pulse Integration Mode (TPIM) **

TIM 脉冲积分模式可以用来测量某个脉冲的边沿时间,比如设置 DSL**=1**,测量高电平时间,那在上升沿时 TIM 通道开始进行采样,当下降沿时测量结束,测量结果值可根据配置选择存放到 GPR0 或者 GPR1,具体可查询寄存器 EGPR0_SEL, EGPR1_SEL, GPR0_SEL, GPR1_SEL。

**TIM Input Event Mode (TIEM) **

在 TIM 输入事件模式下,TIM 能够进行边沿计数。可以通过配置选择上升或者下降沿计数,也可以双边计数。计数的结果同样可以选择配置到 GPR0 或者 GPR1,在每次计数值 CNT 发生变化时,结果寄存器都会更新。

**TIM Input Prescaler Mode (TIPM) **

TIM 输入分频模式下,可通过设置触发中断的 Cnt 数量,来进行分频信号接收。通过设置 CNTS 寄存器的值,来决定输入信号多少次跳变以后,TIM[i]NEWVAL[x]****IRQ会置位,以进行中断触发,以达到分频计数的功能。

**TIM Bit Compression Mode (TBCM) **

位压缩模式下可进行多路组合的位检测功能,比如将多路的输入连接到一起,任意一路信号都可触发中断通知。同时组合的数据也能够被 ARU 路由到其他模块。

英飞凌 Aurix2G TC3XX GTM 模块详解_第24张图片

**TIM Gated Periodic Sampling Mode (TGPS) **

在门控采样下,可以设置电平的定时触发功能。比如信号发生上升沿跳变,且高电平大于 N 个时钟周期则触发中断。可配置目标输入电平 DSL,目标时钟 TICK 数来进行门控电平时间长度捕获。

**TIM Serial Shift Mode (TSSM) **

在 TIM 串口输入模式下,可进行输入的串行输入功能,配合对端 GTM 模块的 ATOM 串口输出或其他数据串口输出,可进行数据交互。

2.5.3 MCAL 配置

TIM 具有多种采样模式,最常见的就是 PWM 采样模式,本文就以该模式为例,进行输入采样配置。需要配置的模块有 Icu 和 MCU。我们配置 P02.4 为 Pwm 输出,使用 TOM0_12,周期 1ms,占空比 50%。这里参考上文中 TOM 配置,不再详细赘述。配置 P02.5 为 Icu 输入,使用 TIM0_5,捕获 P02.4 的输出内容。

  1. 首先我们来到 MCU->McuGtmAllocationConf_0->McuGtmTimAllocationConf_0->McuGtmTimChannelAllocationConf_5,将硬件资源分配给 Icu 模块。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第25张图片

  2. 然后在 MCU->GtmGlobalConfiguration_0->GtmTimGlobalConf_0->GtmTimChannelConf_5,为 TIM0_5 选定引脚:
    英飞凌 Aurix2G TC3XX GTM 模块详解_第26张图片

  3. 然后我们来到 Icu 模块中,创建一路 Icu 通道,选择上升沿起始,选择 SIGNAL_MEASUREMENT,硬件选择 GTM:
    英飞凌 Aurix2G TC3XX GTM 模块详解_第27张图片

  4. 然后在 IcuSignalMeasurement_0 页面配置为 PWM 采样(ICU_DUTY_CYCLE):
    英飞凌 Aurix2G TC3XX GTM 模块详解_第28张图片

  5. 然后到 GtmTimerInputConfiguration_0 配置采样相关参数设置,这里我们选定 TIM0_5 通道即可,其他配置不使用。这里需要注意的是 TimChannelClockSelect 参数,该参数决定 TIM 通道使用的时钟源,时钟源频率是计算采样数据的关键参数,因为采样得到的是 TICK 值,需要结合采样频率进行计算。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第29张图片

  6. 最后我们需要在 Port 中将 P02.5 配置为输入模式即可(其实默认就是输入),与输出不同的是,输入不需要选择模式。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第30张图片

  7. 然后在初始化中同样初始化 Icu 模块,并启动测量,然后在周期任务中读取结果(也可以直接读取寄存器 GPR0 和 GPR1)。

Icu_17_TimerIp_Init(&Icu_17_TimerIp_Config);    /* 初始化模块 */
Icu_17_TimerIp_StartSignalMeasurement(IcuConf_IcuChannel_IcuChannel_0); /* 启动测量 */

Task()
{
    Icu_17_TimerIp_DutyCycleType PwmMeasureValue;
    Icu_17_TimerIp_GetDutyCycleValues(IcuConf_IcuChannel_IcuChannel_0, &PwmMeasureValue);
}

在这里插入图片描述

最后我们需要对上面测量得到的结果进行换算,因为 TIM 口测量得到的是 TICK 值,我们可以根据 CMU 时钟分频,以及 TIM 通道时钟源选择,得出 TIM 当前使用的时钟源为 50MHz,根据频率时间公式,得出采样的周期和占空比:

周期:P=PeriodTime/f=50000/50MHz=0.001s,
占空比:Duty=ActiveTime/PeriodTime=24992/50000=50%。

这里有一个关键的注意事项,就是 TIM 采样寄存器的位宽问题,TIM 采样的宽度为 24 位,也就是最大结果为 0xFF FFFF,在 50MHz 输入时钟下,我们用频率时间公式得出最大测量周期为 335.5ms,超过该时长结果寄存器就会溢出,得到错误值

3 GTM 连接

在 Aurix2G 芯片中,GTM 和其他模块提供了非常丰富的连接,这些连接在使用中非常灵活,下面我们就通过实例介绍如何查询手册进行引脚连接,需要用到的手册包括芯片用户手册(芯片用户手册,非 Family 手册)、DataSheet

3.1 Port 连接

GTM 的输入和输出模块与 Port 引脚有着丰富的连接,GTM 与 Port 的连接中间存在 MultiPlexer 转接器,能够实现多对多的丰富连接,同一个Pin能够选择多个 GTM 通道,一个 GTM 通道也可以选择多个 Pin 脚。下面介绍如何查询。

3.1.1 TOM/ATOM 与引脚连接

下面我们通过实例讲解如何查询 Port 引脚与 ATOM/TOM 的连接。

英飞凌 Aurix2G TC3XX GTM 模块详解_第31张图片

  1. 第一步,如果选定了某个引脚,想要查询对应的 Port,首先打开 DataSheet,查询该引脚的输出信息。比如 P02.4,可以看到表中该引脚支持的所有功能以及配置选择,这里 GTM 输出选择 O1,我们得到 GTM_TOUT4 信息(IOM_REF0_4 为 IOM 监控连接,与输出无关)
    英飞凌 Aurix2G TC3XX GTM 模块详解_第32张图片

  2. 然后在芯片型号对应的用户手册中,查询 GTM 连接 Table 234,我们通过 TOUT4,得到查表信息:TOUTSEL0_SEL4
    英飞凌 Aurix2G TC3XX GTM 模块详解_第33张图片

  3. 点击 Page92 到对应的寄存器定义位置,可以看到 TOUTSEL0 的寄存器,然后查询 SEL5 位域,到这里我们就得到了这个引脚所能够连接的所有 GTM 对应的输出。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第34张图片
    英飞凌 Aurix2G TC3XX GTM 模块详解_第35张图片
    如果要查询某个 TOM 能够输出到哪些 PIN 脚,则在用户手册中反向搜索即可,这里有一个技巧,在 MCAL 配置中可以直接下拉查看某个通道的可用 Pin 脚。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第36张图片

3.1.2 TIM 与引脚连接

TIM 与其他模块的多对多关系如图所示。

英飞凌 Aurix2G TC3XX GTM 模块详解_第37张图片

TIM 的引脚连接相对简单,我们打开 DataSheet,搜索引脚即可以看到该引脚输入模式下能够连接的 TIM 通道:

英飞凌 Aurix2G TC3XX GTM 模块详解_第38张图片
打开用户手册在寄存器表格中也可以直接看到某路 TIM 通道能够连接的 Port 引脚。

英飞凌 Aurix2G TC3XX GTM 模块详解_第39张图片
英飞凌 Aurix2G TC3XX GTM 模块详解_第40张图片

3.2 ADC 连接

Aurix2G 中 GTM 和****ADC 之间提供了丰富的连接,用户可以用 GTM 进行硬件采样触发功能,关于 ADC 的内容,我们后续章节再讨论,本文中就只关注 GTM 与 ADC 的连接。

我们打开芯片用户手册(非 Family 手册)26.3.9 GTM to EVADC Connections 章节,可以看到 GTM 和 ADC 之间也存在一个 Multiplexer,以进行多对多连接。

英飞凌 Aurix2G TC3XX GTM 模块详解_第41张图片

从图上我们可以看出,从左侧 GTM 的输出从 ADCTRIG0ADCTRIG4 一共 5 路输出,每路输出共 12 组(Aurix2G 最多 12 路****ADC,此为对应),每组 16 个选择源。也就是说每路输出都可以连接任一 ADC 单元,且每路输出对任一路 ADC 单元提供最多 16 种选择。对于每路 ADC 硬件来说,也可以从 5 组 Trigger 中选择一组进行连接。

这里的连接比较复杂,也是最容易迷糊的地方。我们通过实例来为大家讲解具体连线及配置方式。

  1. 首先我们来到 Table 241 Connections of ADC_TRIGx Signals to ADC/SENT Modules,这里根据我们需要触发的 ADC,观察表种输出源,比如我们需要触发 ADC_G3,在表中 5 路 Trigger 中都能够支持,这里我们随机选择 Trigger2(先查询 GTM 资源,根据情况可以更换 Trigger)
    英飞凌 Aurix2G TC3XX GTM 模块详解_第42张图片

  2. 然后我们来到 Table 240 GTM to EVADC Connections Registers Overview,我们选择的是 Trigger2ADC_G3,则对应的寄存器为 ADCTRIG2OUT0(如果是 ADC_G8 到 G11,则需要查询 ADCTRIG2OUT1)。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第43张图片

  3. 我们来到 ADCTRIG2OUT0 寄存器,因为选择 ADC_G3,所以我们对应的是 SEL3 位域(这里 ADC3 和 ADC4 的触发源相同,所以寄存器域定义相同),从中我们可以选择第 14 个,TOM1_15(这里视硬件资源情况而定,如果已经被占用则需要换其他路 Trigger)。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第44张图片
    英飞凌 Aurix2G TC3XX GTM 模块详解_第45张图片

  4. 然后我们来到 MCAL 配置,MCU->GtmGlobalConfiguration_0->GtmTriggerForAdc,将 GtmTriggerForAdc_3 行的 GtmAdcTrigger2Select 列,置为 14。(这里代表对应的 ADC 硬件,代表对应的某路 Trigger)
    英飞凌 Aurix2G TC3XX GTM 模块详解_第46张图片

  5. 至此我们完成了 GTM 触发源的配置,然后需要到 ADC 中对应的通道选择该触发源,这里来到 ADC3 中的 Group,选择硬件触发,触发源刚才我们配置的 Trigger2,所以 AdcHwExtTrigSelect 这里选择 ADC_TRIG_10_GxREQTRK_GTM_ADCx_TRIG2
    英飞凌 Aurix2G TC3XX GTM 模块详解_第47张图片

  6. 然后 AdcHwTrigSignal 这页我们选择上升沿
    英飞凌 Aurix2G TC3XX GTM 模块详解_第48张图片

  7. GtmTriggerTimerConfig_0 这里就可以根据自己的实际触发需求,配置触发频率,这里我们选择 1ms 触发一次采样。这里需要注意触发间隔时间不能过长,否则超出定时器位宽,出现非预期的频率,原理同前面的 TIM 采样。
    英飞凌 Aurix2G TC3XX GTM 模块详解_第49张图片

  8. 然后我们在代码中,需要进行 Adc 的初始化,设置结果 Buffer硬件触发的使能(使能这里会自动配置 TOM 参数),然后在周期中读取结果值,也可配置中断读取。我这里没有打开中断,直接看的结果寄存器。

Adc_Init(&Adc_Config);
Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_3_HW, &Adc3GroupHWResult);
Adc_EnableHardwareTrigger(AdcConf_AdcGroup_AdcGroup_3_HW);

在这里插入图片描述

4 小结

本文介绍了 Infineon Aurix2G TC3XX 系列芯片中 GTM 模块硬件原理,并借助配置及代码示例,描述了配置和开发过程。GTM 作为博世 IP 的芯片内核,有着非常强大的功能,且 Aurix2G 芯片对其做了丰富的连接集成,为开发者提供了广阔的创造空间。

参考资料

  1. GTM-IP Specification.pdf (Revision: 3.1.5.1 )
  2. Infineon-AURIX_TC37x-UserManual-v02_00-EN.pdf
  3. Infineon-SAK-TC37x-DataSheet-v01_01-EN.pdf

你可能感兴趣的:(英飞凌Aurix2G,TC3XX芯片实战,c语言)