在上一篇文章中介绍了GTM的时钟管理单元MCAL-GTM之时钟管理CMU。本篇文章介绍GTM中TIM模块的配置,用于测量PWM输入。
TC27x芯片TIM有四路,每路有8个通道。
定时器输入模块(TIM)负责对GTM的输入信号进行滤波和捕获。输入信号的一些特性可以在TIM通道内测量。对于高级数据处理,TIM模块检测到的输入特征可以通过ARU路由到GTM的后续处理单元。
输入特性是指检测到的输入上升沿或下降沿的时间戳值,以及新的信号电平,或自通道启用以来接收的边缘数,以及整个PWM周期的实际时间戳或PWM信号持续时间
配置TIM通道的基础配置项
选择TIM通道输入源
INPUT_OF_CURRENT_TIM_CHANNEL:当前TIM通道的输入将是分配给该通道的输入。
INPUT_OF_PREVIOUS_TIM_CHANNEL:当前TIM通道的输入将是分配给前一个通道的输入。如果通道为0,则使用TIM_IN(7)。
INPUT_OF_AUX_IN_TOM:当前TIM通道的输入将是相应TOM通道的输出
INPUT_OF_AUX_IN_ATOM:当前TIM通道的输入将是相应ATOM通道的输出
INPUT_OF_VAL:当前TIM通道的输入将是TimChannelValInitSignal选择的固定值,该值即表示VAL_x
GTM_TIMi_IN_SRC寄存器定义了MODE_x和VAL_x,通道Mode和Val,还有GTM_TIMx_CHy_CTRL寄存器中的CICTRL位,GTM_TIMi_AUX_IN_SRC寄存器中的SRC_CHx一起决定最终的输入信号。
MODE_x(1)=0, VAL_x(1)=0:TIM通道的位字段CICTRL定义的输入信号用作输入源
MODE_x(1)=0, VAL_x(1)=1:TIM通道的信号TIM_AUX_IN用作输入源
MODE_x(1)=1: 状态VAL_x(1)定义TIM通道的输入电平
ATOM_OUT和TOM_OUT也可以作为TIM的输入信号(即选项INPUT_OF_AUX_IN_TOM和INPUT_OF_AUX_IN_ATOM):
根据GTM_TIMy_AUX_IN.SRCx来选择输入信号:
选择Tim通道的模式,此处选择TPWM,即采集PWM信号频率及占空比。
对应寄存器CTRL中的TIM_MODE
cfg中配置:
Tim通道使能,对应寄存器CTRL中的TIM_EN,若在one-shot模式下,该位在操作完成后自动清除
cfg中配置:
选择测量边沿,对应寄存器CTRL中的DSL
0:测量从下降沿开始(低电平测量)
1:测量从上升沿开始(高电平测量)
cfg中配置:
是否使能单次测量模式,对应寄存器CTRL中的OSM,此处选择不使能
选择TIM输入对应的Port口。需要按照引脚定义和原理图来确定。实际使用的引脚需要和TIM通道对应
cfg中配置:
如何对应Port和TIM通道?
以Port P00.9为例,引脚定义P00.9作为PWM输入信号采集
在用户手册中搜素P00.9,找到GTM to Port Mapping表
此处可知,TIM0的通道0和TIM1的通道0都可以map到该引脚上。这里我们使用TIM0_0,
每个通道都可以在外部捕获信号EXT_capture上运行。用于此信号的源可以由寄存器TIMi_CHx_ECTRL中的位字段EXT_CAP_SRCx配置
可以使用寄存器TIMi_CHx_CTRL中的位EXT_CAP_EN为TIM信道x启用外部捕获功能,它将在每个上升沿触发。为所选输入信号TIM_IN[x]和AUX_IN[x]的每个上升沿应用脉冲生成.
选择通道时钟,根据GTM_TIM1-3_CHx_CTRL寄存器
TIM只能选择CFGU中的时钟
cfg配置Tim时钟:
此时表示Tim0通道0的时钟为CLOCK_0,由CMU配置可得,此处时钟为10MHz
选择Cnts的输入,对应寄存器为CTRL中的CNTS_SEL,为0时使用CNT寄存器作为输入,为1时使用TBU_TS0作为输入。芯片手册中的下图可以很好的表示该位的选择。
对于Value来说,只有在TIPM、TBCM和TGPS模式下才可以写入,此处我们使用的是TPWM模式,该配置项没有意义。
cfg中配置:
Ecnt计数溢出设置,对应寄存器为CTRL中的FR_ECNT_OFL,该配置项默认选择0,溢出将在ECNT位宽度=8,为1时溢出将在EECNT位宽度上发出信号(全范围)(EECNT没找到,不是很明白)
Ecnt:边沿计数,ECNT统计每个传入的过滤边(上升和下降)。输入信号电平是计数器的一部分,可以通过ECNT的位0获得。
由上图可知,溢出后会产生一个中断ECNTOFL_IRQ,是否使能中断还有一个配置项。
cfg中配置:
Ecnt复位设置,对应寄存器CTRL中的ECNT_RESET,配置为是否允许定期采样模式下重置ECNT计数器,此处配置为不允许。
cfg中配置:
Gpr0表示测量的占空比时间,Gpr1表示测量的周期时间。
这两个输入对应的寄存器为CTRL中的GPR0_SEL,EGPR0_SEL,GPR1_SEL,EGPR1_SEL。此处配置的还是TIMEBASE_TBU_TS0,可以实现PWM采集。TBU默认的时钟为CMU_CLK0(实际应该还要配置TBU模块中的时钟和使能)
cfg中配置:
Gpr0,Gpr1配置的都是TIMEBASE_TBU_TS0
选择TBU0的位,对应寄存器GTM_TBU_CH0_CTRL中的LOW_RES,可以选择Base寄存器中的0-23位或3-26位
cfg中配置:
这决定了该频道是否将用作复杂驱动程序或ICU,或者将不使用它。
USED_BY_OTHER_DRIVERS_OR_UNUSED:指定此通道未使用或由其他模块(ICU配置。
USED_BY_GTM_DRIVER:指定将此通道配置为复杂驱动程序。
此处配置为USED_BY_OTHER_DRIVERS_OR_UNUSED,后面配合ICU使用
cfg中配置:
至此,基础配置项就完成了。其他配置项保持默认即可,对于PWM采集来说可以暂不使用。
在配置完TIM模块后,还需要配置ICU模块,并关联对应的TIM通道。ICU模块是Autosar Mcal定义的模块。将在下一篇文章中介绍相关配置。
若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~
你的鼓励是对小弟的最大支持~~~
建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~