英飞凌Aurix2G TC3XX GTM模块详解

admin 2024年10月16日18:21:45评论155 views字数 12763阅读42分32秒阅读模式

主要内容

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

  1. 模块简介

  2. 功能介绍

    2.1 GTM总览

    2.2 CMU

           2.2.1 功能介绍

           2.2.2 MCAL配置

    2.3 TOM

           2.3.1 功能介绍

           2.3.2 TOM通道

           2.3.3 MCAL配置

    2.4 ATOM

           2.4.1 功能介绍

           2.4.2 ATOM通道

           2.4.3 MCAL配置

    2.5 TIM

           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与PortAdc等连接的查询方式。

2

功能介绍

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

英飞凌Aurix2G TC3XX GTM模块详解
  • 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模块详解

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

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

下面我们主要介绍CMU、TOM、ATOMTIM模块。

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模块详解

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。计算公式如下:

英飞凌Aurix2G TC3XX GTM模块详解
  • 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为时钟源时,计算公式如下:

英飞凌Aurix2G TC3XX GTM模块详解

与可配置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模块详解

2.然后我们回到MCU->GtmGlobalConfiguration_0->General,这里有两个参数,就是上文中决定全局分频GLOBALDIVGCLK_NUMGCLK_DEN,这里一般都配置成1,也就是全局1比1分频。

英飞凌Aurix2G TC3XX GTM模块详解

3.然后下面有一个FixedClock配置,前面提到因为FXU是不可配置分频的,但是可以配置时钟源和开关,就是下面这两个配置参数。

英飞凌Aurix2G TC3XX GTM模块详解

4.然后再往下就是CFGU的分频配置了,一共有8路,和对应的时钟开关。这里注意CLKCNTx等于配置参数加1,也就是说0代表1比1分频,3表示四分之一分频。

英飞凌Aurix2G TC3XX GTM模块详解

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模块详解

每个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模块详解

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模块详解

Up-Down模式(中央对齐)

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

英飞凌Aurix2G TC3XX GTM模块详解

在该模式下其电平起点在周期中间,因此称为中央对齐,一般为电机控制使用。在该模式下其周期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模块详解

2.然后我们来到MCU->GtmGlobalConfiguration_0->GtmTomGlobalConf_0->GtmTomGroupConf_0,这里有一个TBU时间基准模块的选择,这里我们不需要动,直接用默认的TOM_ACT_TB_TBU_TS0就行,这个不影响输出的PWM波形,只是不同模块的同步基准。

英飞凌Aurix2G TC3XX GTM模块详解

3.然后在MCU->GtmGlobalConfiguration_0->GtmTomGlobalConf_0->GtmTomChannelConf_13,选择我们需要输出的PIN脚,GTM与Port的连接关系我们下文会讲,这里我们根据硬件LED等的位置,选择P00.6.

英飞凌Aurix2G TC3XX GTM模块详解

4.然后在PWM模块配置一路通道。如下硬件选择GTMPwmDutycycleDefault占空比TICK值,PwmPeriodDefault为周期TICK值,关于周期占空比的计算,下面我们会讲。PwmPolarity极性选择起始高电平。

英飞凌Aurix2G TC3XX GTM模块详解

5.然后我们来到下一页PwmChannelClass,这里配置成PWM_VARIABLE_PERIOD,能够运行时修改波形参数。

英飞凌Aurix2G TC3XX GTM模块详解

6.然后我们来到GtmTimerOutputModuleConfiguration这里,配置PWM使用TOM通道和时钟源,这里我们选择刚才MCU中配置的TOM0_13,然后根据需求选择分频值。

英飞凌Aurix2G TC3XX GTM模块详解

这里我们讲一下怎么计算周期和选择时钟源,因为我们的目标是实现LED灯一秒闪烁一次,也就是周期为1s,占空比为50%,注意TOM的时钟TICK是16位的,也就是最高65535,因此频率选择太高的话分不出低频的信号。通过前面计算我们得出FXU的输入时钟为50MHz,如果我们选择FIXED_CLOCK1,分频2的4次方为16分频,那么频率为3.125MHz,根据公式:

英飞凌Aurix2G TC3XX GTM模块详解

那我们的TICK最小为3.125*10^6,65535是肯定不够的。通过计算选择FIXED_CLOCK2也是不够的,因此我们选择FIXED_CLOCK3,分频为2的12次方,通过计算得出FIXED_CLOCK3时钟频率为50MHz/2^12=12207Hz,小于我们的TICK位宽的。

然后再根据上面公式,算出周期TICK=T*f=12207Hz*1s=12207次。占空比我们选择50%,因此占空比TICK=12207*50%=6103.这里我们在周期TICK配置参数填上12207,但是占空比这里不能直接填6103,因为MCAL中对占空比的配置有额外定义。我们看这个配置的描述:

英飞凌Aurix2G TC3XX GTM模块详解

这段话的意思是如果通道Class没有配置为PWM_FIXED_PERIOD_SHIFTED,则计算的时候0表示0占空比,0x8000表示100%占空比,只有当配置了PWM_FIXED_PERIOD_SHIFTED的时候,才是按照实际占空比计算。因此我们需要配置50%占空比,TICK为0x4000,也就是上图中的16384

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

英飞凌Aurix2G TC3XX GTM模块详解

7.最后我们还需要配置一下Port,根据DataSheet选择对应的输出模式ALT1(DataSheet中查询引脚模式对应功能)。

英飞凌Aurix2G TC3XX GTM模块详解

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

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

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模块详解

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模块详解

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模块详解

每个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模块详解

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

英飞凌Aurix2G TC3XX GTM模块详解

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

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

英飞凌Aurix2G TC3XX GTM模块详解

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

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模块详解

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模块详解

2.然后在MCU->GtmGlobalConfiguration_0->GtmTimGlobalConf_0->GtmTimChannelConf_5,为TIM0_5选定引脚:

英飞凌Aurix2G TC3XX GTM模块详解

3.然后我们来到Icu模块中,创建一路Icu通道,选择上升沿起始,选择SIGNAL_MEASUREMENT,硬件选择GTM

英飞凌Aurix2G TC3XX GTM模块详解

4.然后在IcuSignalMeasurement_0页面配置为PWM采样(ICU_DUTY_CYCLE):

英飞凌Aurix2G TC3XX GTM模块详解

5.然后到GtmTimerInputConfiguration_0配置采样相关参数设置,这里我们选定TIM0_5通道即可,其他配置不使用。这里需要注意的是TimChannelClockSelect参数,该参数决定TIM通道使用的时钟源,时钟源频率是计算采样数据的关键参数,因为采样得到的是TICK值,需要结合采样频率进行计算。

英飞凌Aurix2G TC3XX GTM模块详解

6.最后我们需要在Port中将P02.5配置为输入模式即可(其实默认就是输入),与输出不同的是,输入不需要选择模式。

英飞凌Aurix2G TC3XX GTM模块详解

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);}
英飞凌Aurix2G TC3XX GTM模块详解

最后我们需要对上面测量得到的结果进行换算,因为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模块详解

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

英飞凌Aurix2G TC3XX GTM模块详解

2.然后在芯片型号对应的用户手册中,查询GTM连接Table 234,我们通过TOUT4,得到查表信息:TOUTSEL0_SEL4

英飞凌Aurix2G TC3XX GTM模块详解

3.点击Page92到对应的寄存器定义位置,可以看到TOUTSEL0的寄存器,然后查询SEL5位域,到这里我们就得到了这个引脚所能够连接的所有GTM对应的输出。

英飞凌Aurix2G TC3XX GTM模块详解
英飞凌Aurix2G TC3XX GTM模块详解

如果要查询某个TOM能够输出到哪些PIN脚,则在用户手册中反向搜索即可,这里有一个技巧,在MCAL配置中可以直接下拉查看某个通道的可用Pin脚。

英飞凌Aurix2G TC3XX GTM模块详解

  3.1.2 TIM与引脚连接

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

英飞凌Aurix2G TC3XX GTM模块详解

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

英飞凌Aurix2G TC3XX GTM模块详解

打开用户手册在寄存器表格中也可以直接看到某路TIM通道能够连接的Port引脚。

英飞凌Aurix2G TC3XX GTM模块详解
英飞凌Aurix2G TC3XX GTM模块详解

3.2 ADC连接

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

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

英飞凌Aurix2G TC3XX GTM模块详解

从图上我们可以看出,从左侧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模块详解

2.然后我们来到Table 240 GTM to EVADC Connections Registers Overview,我们选择的是Trigger2ADC_G3,则对应的寄存器为ADCTRIG2OUT0(如果是ADC_G8到G11,则需要查询ADCTRIG2OUT1)。

英飞凌Aurix2G TC3XX GTM模块详解

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

英飞凌Aurix2G TC3XX GTM模块详解
英飞凌Aurix2G TC3XX GTM模块详解

4.然后我们来到MCAL配置,MCU->GtmGlobalConfiguration_0->GtmTriggerForAdc,将GtmTriggerForAdc_3行的GtmAdcTrigger2Select列,置为14。(这里行代表对应的ADC硬件,列代表对应的某路Trigger)。

英飞凌Aurix2G TC3XX GTM模块详解

5.至此我们完成了GTM触发源的配置,然后需要到ADC中对应的通道选择该触发源,这里来到ADC3中的Group,选择硬件触发,触发源刚才我们配置的Trigger2,所以AdcHwExtTrigSelect这里选择ADC_TRIG_10_GxREQTRK_GTM_ADCx_TRIG2

英飞凌Aurix2G TC3XX GTM模块详解

6.然后AdcHwTrigSignal这页我们选择上升沿

英飞凌Aurix2G TC3XX GTM模块详解

7.GtmTriggerTimerConfig_0这里就可以根据自己的实际触发需求,配置触发频率,这里我们选择1ms触发一次采样。这里需要注意触发间隔时间不能过长,否则超出定时器位宽,出现非预期的频率,原理同前面的TIM采样。

英飞凌Aurix2G TC3XX GTM模块详解

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

Adc_Init(&Adc_Config);Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_3_HW, &Adc3GroupHWResult);Adc_EnableHardwareTrigger(AdcConf_AdcGroup_AdcGroup_3_HW);
英飞凌Aurix2G TC3XX GTM模块详解

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 GTM模块详解

·END·

点击蓝字,关注我们

原文始发于微信公众号(汽车电子嵌入式):英飞凌Aurix2G TC3XX GTM模块详解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月16日18:21:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   英飞凌Aurix2G TC3XX GTM模块详解https://cn-sec.com/archives/3274783.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息