英飞凌 Aurix2G TC3XX GTM 模块详解

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

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_{GTM} =\frac{f_{SOURCEGTM}}{GTMDIV}

f_{SOURCEGTM} = f_{SPB}*2if_{GTMDIV} = 1elsef_{SOURCEGTM} = f_{SOURCE0}

  • 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,其架构框图如下图所示:

如图所示,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由三个子单元组成,包括CFGU 、FXUEGU,为整个GTM模块生成不同的时钟源。CMU的主时钟源是簇0时钟信号cls0_clk,该信号由寄存器GTM_CLS_CLK_CFG中的位字段CLS0_CLK_DIV的值定义(默认为2)。CMU模块框图如图示。

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

f_{CMUCLK_{x}} = \frac{f_{GTM}}{CLS_{0}CLKDIV*GLOBALDIV*CLKCNT_{x}}

  • 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_{CMUCLK_{x}} = \frac{f_{GTM}}{CLS_{0}CLKDIV*GLOBALDIV*FXCLKCNT_{x}}

与可配置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表示关闭该簇。

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

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

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

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模块的模块框图如图所示:

每个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如图所示:

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。其输出波形与寄存器的值如下图所示,为边缘对齐:

Up-Down模式(中央对齐)

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

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

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

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

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

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

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

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

f=\frac{TICK}{T}
那我们的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中对占空比的配置有额外定义。我们看这个配置的描述:

这段话的意思是如果通道Class没有配置为PWM_FIXED_PERIOD_SHIFTED,则计算的时候0表示0占空比,0x8000表示100%占空比,只有当配置了PWM_FIXED_PERIOD_SHIFTED的时候,才是按照实际占空比计算。因此我们需要配置50%占空比,TICK为0x4000,也就是上图中的16384
但是配置生成的代码这里,我们可以看出工具帮我们计算了的,得到的寄存器值实际还是我们计算出来的值(16进制):

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

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

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

00:05

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时钟输入。

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

2.4.2 ATOM通道

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

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模块的功能框图如图所示:

每个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

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

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

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

每个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路由到其他模块。

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模块。

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

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

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

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

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

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的连接。

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

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

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

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

3.1.2 TIM与引脚连接

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

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

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

3.2 ADC连接

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

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

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

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

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

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

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

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

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

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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值