前言
GTM模块功能非常的强大也就会非常的复杂,TC3xx的MCAL使用GTM作为其他AUTOSAR标准模块的输入时钟,如ICU和PWM模块都使用GTM作为时钟源。所以,学习TC3xx的MCAL,GTM必须熟悉。我们在介绍GTM模块的时候仅站在工程开发者的角度去介绍需要用户关注和配置的关键地方,且仅重点介绍GTM对于PWM信号的输入输出功能,对于原理其其他复杂功能仅粗略介绍,详细的原理介绍请参考芯片手册,复杂的GTM功能作者也没有实践经验。本文为TOM详解。
参考文章:
TC3xx芯片Clock System功能详解-时钟源OSC
TC3xx芯片Clock System功能详解-锁相环PLL
TC3xx芯片Clock System功能详解-时钟分配CCU
AUTOSAR架构下TC3xx平台的MCAL时钟系统配置实践
TC3xx芯片GTM模块详解-GTM功能概述及GTM输入时钟介绍
TC3xx芯片GTM模块-CMU,CCM,TBU详解
缩略词
简写 | 全称 |
GTM | General Time Module |
PWM | Pulse Width Modulation |
CMU | Clock Management Unit |
CCM | Cluster Configuration Module |
TBU | Time Base Unit |
TOM | Timer Output Module |
CCU | Counter Compare Unit |
注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!
正文
TOM主要用来输出简单的PWM信号。此外,在 Tom 输出 TOM[I]_CH15_OUT 时,可以生成脉冲计数调制信号。
以TC377为例。TC377有3个TOM硬件单元,每个TOM Unit有16个Channel(Channel0 – Channel15),也就是总共有3 * 16 = 48 Channel. 每个TOM Unit的16个Channel分为两组(Group 0和Group 1),Group 0为Channel0 – Channel7, Group 1为Channel8 – Channel15.
Channelx和Channelx+1共用一个IRQ.
For Example:
为GTMTOM1Channel7配置中断,中断地址为:0xE10 + 1*0x20 + 3*4 == 0xE3C,在Os中配置IRQ的时候需要配置。
由上图可知CMU.FXU的输入时钟选用GTM_GLOBAL_CLOCK,也就是fCLS0_CLK,也就是200MHz.
CMU.FXU的输出时钟为:
CMU_FXCLK0 = 200MHz / 1 = 200 MHz
CMU_FXCLK1 = 200MHz / 16 = 12.5 MHz
CMU_FXCLK2 = 200MHz / 256 = 781.25KHz
CMU_FXCLK3 = 200MHz / 4096 = 48.828125KHz
CMU_FXCLK4 = 200MHz / 655336 = 3051.7578Hz
TOM每个通道的时钟源由TOMi_CHx_CTRL. CLK_SRC_SR配置。
问题:EB上MCU模块的GtmGlobalConfiguration上没有配置使用哪个CMU_FXCLKx?
答:EB上MCU模块的GtmGlobalConfiguration值配置Gtm的一切Global配置项,具体的PWM输出也就是TOM Channel的时钟配置,TIM Channel的输入也就是TIM Channel的时钟配置,需要在对应的PWM,ICU AUTOSAR标准模块配置。
如上图所示,主要控制的就是TOM模块的使能和更新,也就是上图模块的三个输出,由TOM[x]_TGC[y]_FUPD_CTRL, TOM[x]_TGC[y]_OUTEN_CTRL, TOM[x]_TGC[y]_ ENDIS_CTRL三个寄存器体现:
TOM[x]_TGC[y]_FUPD_CTRL:强制更新CM1(PWM占空比), CM0(PWM周期), CLK_SRC(时钟源信号),以及复位CN0(时钟计数寄存器).
TOM[x]_TGC[y]_OUTEN_CTRL:控制Channel的Enable/Disable.
TOM[x]_TGC[y]_ ENDIS_CTRL:控制Output的Enable/Disable.
如果我们直接配置TOM[x]_TGC[y]_FUPD_CTRL, TOM[x]_TGC[y]_OUTEN_CTRL, TOM[x]_TGC[y]_ ENDIS_CTRL三个寄存器,那它们既是输入也是输出,作为输入也就是我们配置这三个寄存器,作为输出就是这三个寄存器控制TOM通道的使能和更新。
除了直接配置TOM[x]_TGC[y]_FUPD_CTRL, TOM[x]_TGC[y]_OUTEN_CTRL, TOM[x]_TGC[y]_ ENDIS_CTRL三个寄存器外,我们还可以通过以下三种Global方式来控制TOM通道的使能和更新,这样TOM[x]_TGC[y]_FUPD_CTRL, TOM[x]_TGC[y]_OUTEN_CTRL, TOM[x]_TGC[y]_ ENDIS_CTRL这三个寄存器仅仅作为输出:
方式一:Host CPU触发方式
TOMi(i=0-5)_TGCx(x=0-1)_GLB_CTRL. HOST_TRIG: Enable/Disable所有通道的Channel和Output.
TOMi(i=0-5)_TGCx(x=0-1)_GLB_CTRL. RST_CHx: Reset CN0 寄存器(时钟计数)。
TOMi(i=0-5)_TGCx(x=0-1)_GLB_CTRL. UPEN_CTRLx: 强制更新CM1(占空比), CM0(PWM周期)和CLK_SRC寄存器(时钟源)。
方式二:TBU时间戳触发方式
TOMi_TGCx_ACT_TB((i=0-5),x=0-1).ACT_TB: 配置Compare的值。
TOMi_TGCx_ACT_TB((i=0-5),x=0-1).TB_TRIG: Timeout发生后自动置为,请求Enable所有TOM通道。
TOMi_TGCx_ACT_TB((i=0-5),x=0-1).TBU_SEL: 选择需要Compare的TBU时基。
方式三:其他TOM通道信号触发方式
TOM[i]_TGC[y]_INT_TRIG是一个掩码寄存器。也就是说,其他8个TOM的输出信号作为TRIG_[X]本身都可以Enable Channel的,通过配置TOM[i]_TGC[y]_INT_TRIG.INT_TRIGx可以Mask掉哪些通道有Enable的功能。
问题:TOM[i]_TGC[y]_ENDIS_CTRL和TOM[i]_TGC[y]_ENDIS_STAT寄存器的layout和位域信号完全一样,功能上有啥区别了?
答:Enable/Disable一个TOM通道,TOM[i]_TGC[y]_ENDIS_CTRL和TOM[i]_TGC[y]_ENDIS_STAT寄存器必须都被Used,寄存器 TOM[I]_TGC[y]_ENDIS_STAT 直接控制信号 ENDIS。 可以对该寄存器进行写访问。寄存器 TOM[I]_TGC[y]_ENDIS_CTRL 是一个阴影寄存器(SR, Shadow Register),如果三个触发条件之一匹配,它将覆盖寄存器 TOM[I]_TGC[y]_ENDIS_STAT 的值。
TOM[i]_CH[y]_CN0保存了输入时钟CMU_FXCLKx的计数值(Counter)。
TOM[i]_CH[y]_CM0保存了TOM通道输出的周期数(Period, 由用户配置PWM的周期)。
TOM[i]_CH[y]_CM1保存了TOM通道输出的占空比(Duty Cycle, 由用户配置PWM的占空比)。
问题:以上三个寄存器里面的具体值代表什么物理意义了?比如三个寄存器值是100,400,200。
答:以上三个寄存器保存的是基于通道时钟的Ticks数,比如我们使用的CMU_FXCLKx为200MHz,则一个tick的时间为1/200(us) = 5ms,那么:
TOM[i]_CH[y]_CN0 = 100 –>当前计数值为100个ticks,也就是500ms.
TOM[i]_CH[y]_CM0= 400 -> Period为400个Ticks,也就是2000ms,
TOM[i]_CH[y]_CM1=200 ->Duty Cycle为200个Ticks,也就是1000ms,也就是占空比为50%。
TOM[i]_CH[y]_CN0寄存器的清零由TOM[i]_CH[x]_CTRL寄存器的RST_CCU0位域信号。
两种清零方式:
方式一:CN0的计数值等于CM0是自动清零。
方式二:由上衣一个TOM通道TRIG_[x-1]或者外部捕获信号TIM_EXT_CAPTURE(x)清零。
当CN0寄存器的值大于CM0寄存器值的时候,触发TRIG_CC0信号;当CN0寄存器的值大于CM1寄存器值的时候,触发TRIG_CC1信号。也就是计数值大于PWM周期值和PWM占空比值都有内部信号产生,这样能触发对应的PWM脉冲输出。
如果配置CN0寄存器的配置为它自己CCU0清零(RST_CCU0 = 0,CN0 >= CM0 -1),那么以下说明是有效的:
. CN0的变化规律为0 -> CM0 – 1 -> 0 -> …
. 如果CN0计数器达到CN0 > CM1,则一个!SL的边沿输出信号产生(比如SL配置为低电平1,!SL则为低电平0)。
. 如果CM0 = 0或者CM0=1,则CN0的值永远为0。
. 如果CM1=0,则TOM通道的输出(PWM输出)的占空比永远为0%(占空比 = CM1 / CM0),电平状态为!SL(SL配置为1,则占空比由SL也就是高电平1来计算,输出!SL也就是低电平0)。
. 如果CM1 >= CM0且CM0 > 1,则输出为SL(SL配置为1,则占空比由SL也就是高电平1来计算,输出SL也就是高电平1),占空比为100%。
如果配置CN0寄存器的配置为其他TOM Channel清零或者TIM模块的外部捕获信号清零(RST_CCU0 = 1),那么以下说明是有效的:
TOM Channel的初始电平状态由SL的反向状态确定。
CM0寄存器保存PWM输出的周期计数值,SR0为CM0的Shadow Register.
CM1寄存器保存PWM输出的频率计数值,SR1为CM1的Shadow Register.
CLK_SRC确定PWM输出使用的时钟频率,TOM[i]_CH[x]_CTRL寄存器的CLK_SRC_SR位域信号为CLK_SRC的Shadow Register.
问题:怎么理解Shadow Register?
答:Shadow Register保存了下一次寄存器需要更新的值。比如TOM通道的PWM正在以CM0的周期,CM1的占空比,以及CLK_SRC的时钟正在对外输出,我们需要Update PWM输出的参数,那么我们可以先更CM0,CM1和CLK_SRC的Shadow Register,也就是先更新SR0,SR1和CLK_SRC_SR,这样在某个确定时刻统一把Shadow Register中内容更新到寄存器中。
问题:在哪个时间点把SR寄存器的内容更新到CM0,CM1和CLK_SR寄存器?
答:在CN0寄存器的值被Reset的时刻。
通过执行以下步骤,可以获得Duty Cycle,Period和计数器 CN0 时钟频率的同步更新,该更新将与新周期的开始同步生效:
第一步:
通过将寄存器 TOM[I]_TGC[y]_GLB_CTRL 的通道特定配置位 UPEN_CTRL[z] 设置为“ 0 ”,禁用使用相应阴影寄存器内容更新操作寄存器。
第二步:
往SR0,SR1,CLK_SRC_SR寄存器中写入期望的更新值。
第三步:
通过将寄存器 TOM[I]_TGC[y]_GLB_CTRL 的通道特定配置位 UPEN_CTRL[z] 设置为“ 1 ”,启用操作寄存器的更新。
注意:往SR寄存器中写入新的值,只会在Reset CN0的时候更新到CM0,CM1和CLK_SR,只有在UPEN_CTRL[z] == 1的前提下才能在下一个新的周期完成实际输出更新。也就是说,往SR寄存器写入新的值一定是同步更新的。
只需将所需的新值写入 SR1,而无需事先禁用更新机制,即可实现仅占空比的同步更新 (如上一章所述)。新的占空比下一个周期开始体现。
如果想独立于新Period (异步) 的开始执行占空比的更新,则所需的新值可以直接写入寄存器 CM1。在这种情况下,建议额外禁用整个同步更新机制 (即,在寄存器 TOM[i]_TGX[y]_GLB_CTRL中清除对应通道 [x] 的位 UPEN_CTRL[z] ,或者在写入 CM1 之前更新 SR1 的值与 CM1 相同。
在连续模式下, Tom 通道通过在寄存器 TOM[I]_TGC[y]_ENDIS_STAT 中设置相应的位来启用计数器寄存器 CN0 后,开始递增计数器寄存器 CN0。
生成的输出信号的电平状态(高电平 or 低电平)可以使用通道配置寄存器 TOM[I]_CH[x]_CTRL 的配置位 SL 进行配置。
如果计数器 CN0 从 CM0 重置为零,则期间的第一个边缘将在 TOM[I]_CH[x]_OUT 处生成。
如果 CN0 达到 CM1 ,则会生成周期的第二个边缘。
每次计数器 CN0 达到 CM0 的值时,它都会重置为零,并继续递增。
注意:这个模式应该是PWM输出的最常用模式,以下的几种模式应该是用于特殊的PWM输出常见,不在详述,具体可以去参考芯片手册。
关注本公众号了解GTM后续更精彩内容!
End
「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」
点击文章最后左下角的阅读原文可以获取更多信息
或者复制如下链接到浏览器获取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
文末福利
2.为便于技术交流,创建了汽车电子嵌入式技术交流群,可尽情探讨AP,CP,DDS,SOME/IP等前沿热点话题,后台回复“加群”即可加入;
注:本文引用了一些第三方工具和文档,若有侵权,请联系作者删除!
推荐阅读
汽车电子嵌入式精彩文章汇总第一期:20210530-20230703
汽车电子嵌入式精彩文章汇总第2期
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号