在英飞凌 TC234 的 GTM(Generic Timer Module,通用定时器模块)中,TOM(Timer Output Module) 是最常用的子模块之一。它的核心功能是产生脉冲信号(如 PWM)。
1.1 整体框图

1.2 全局通道控制TGC
(1)通过外部或内部事件同步驱动多个TOM通道
TGC0控制通道0-7,TGC1控制通道8-15
支持4中同步控制机制:
-
全局使能/禁用
-
全局输出使能
-
强制更新寄存器
-
时钟源更新使能
(2)触发源
-
主机CPU
-
时间基准单元TBU
-
内部触发信号TRIG
- 通道 x 的 CCU0 触发(TRIG_CCU0)
- 前一个通道 x-1 的触发(TRIG_x-1)
- 外部 TIM 通道捕获信号(TIM_EXT_CAPTURE[t])
1.3 TOM通道TOM_CHx
(1)核心组成
-
CCU0,设定PWM周期,设置CM0寄存器,生成周期匹配触发信号 TRIG_CCU0(用于同步或级联其他通道)。
-
CCU1,设定PWM占空比,设置CM1寄存器,生成占空比匹配触发信号 TRIG_CCU1。
-
SOU,配置输出起始电平,根据 TRIG_CCU0 和 TRIG_CCU1 的触发,通过 SR 触发器生成最终的 PWM 波形。
2.1 配置Mcu-Gtm->Cmu模块
(1)选择Mcu->McuModuleConfiguration选项卡,双击选择打开其中的配置文件McuModuleConfiguration_0,找到GtmConfiguration选项卡。

(2)双击打开配置文件GtmConfiguration_0,找到Cmu选项卡,点击“+”添加GTM时钟管理模块Cmu_0。

(3)双击进入Cmu_0选项卡,
使能CmuFixedClock时钟,该时钟为TOM模块提供时钟。时钟可选择GTM的全局时钟,也可选择GTM全局时钟分频值,CMU_CLOCK_0_DIVIDER分频值为2,CMU_CLOCK_1_DIVIDER分频值为24,CMU_CLOCK_2_DIVIDER分频值为28,CMU_CLOCK_3_DIVIDER分频值为212,CMU_CLOCK_4_DIVIDER分频值为216。用户手册提到该时钟仅有上述5个分频值,剩余5,6,7分频选项不应该被选择。

2.2 配置Mcu-Gtm->Tom模块(1路PWM)
(1)点击Tom进入TOM配置界面, 可看到TOM分为两个模块TOM0和TOM1,这里我们选择Tom_1的通道2作为PWM输出。


(2)双击Tom_1进入该选项卡,包含Tom的所有通道

(3)双击打开TomChannel_2配置Tom通道2,每个通道都有如下5个配置项。

①TomChannelUsage:选择USED_BY_GTM_DRIVER
②TomChannelEnable:
-
AT_START,通道在初始化后立即自动启用,无需等待外部触发
-
ON_GLOBAL_TRIGGER,通道初始化后保持禁用,直到收到 TGC的触发信 号
不使能TomChDisableOnTgcTrigger
③TomChannelOut:
-
TomChannelOutputControl选择ENABLE_OUT_AT_START,通道初始化后立即激活输出引脚,输出初始电平
-
TomChOutputDisableOnTgcTrig选择为禁能
-
TomChannelOutputSignalLevel选择LOW,占空比计算基于低电平持续时间
-
TomChannelPortPinSelect选择TOUT70_SELA_PORT20_PIN14
④TomChannelTimerParameters:该项可配置PWM的占空比和周期,例输出频率为20KHZ,占空比为50%的PWM。GTM当前频率为100MHZ,该通道选择的分频系数为1,所以Tom1_Channel2频率为100MHZ。
CM0控制周期值,CM1控制占空比。当设置CM0等于5000时,周期为50ns,即频率为20KHZ。PWM_HZ = 100M/5000 = 20KHZ
1)CN0 = 0,计数器初始值
2)CM0=5000,周期
3)CM1=2500,占空比
4)Sr0=5000,周期影子寄存器
5)Sr1=2500,占空比影子寄存器
6)使能TomChUpdateEnableOnCn0Reset
7)TomChannelClockSelect,配置该通道的时钟
8)TomChannelCounterCn0Reset,CN0复位由本通道事件触发
-
ON_COMPARE_MATCH_ON_CHANNEL:每当CN0大于等于CM0时复位
-
ON_TRIGGER_FROM_PREV_CHANNEL:由前一个通道的特殊事件触发
9)TomChannelExtCounterCn0Reset,CN0复位由外部事件触发
10)TomChannelTriggerOutput,这个配置决定 TOM通道在什么情况下会发出一个“触发信号”,用来控制其他模块(比如其他通道、ADC、CCU等)
-
CCU0_TRIG_OF_CHANNEL,根据CCU0模块的判断结果触发
-
TRIG_FROM_PREVIOUS_CHANNEL,前一个通道的触发信号直接复制给我
11)TomChannelExtTriggerOutput,同上
⑤TomChannelInterrupt不使能

2.3 配置Mcu-Gtm->Tom模块(6路PWM)
时钟配置与1路PWM相同
(1)点击Tom进入TOM配置界面, 可看到TOM分为两个模块TOM0和TOM1,这里我们选择Tom_1的通道1-6作为PWM输出,通道0作为基准,通道7重点触发ADC采样。
(2)配置TomChannel_0
通道0作为所有PWM输出周期基准。即所有通道CN0跟随Channel0通道的CN0复位
TomChannelCounterCn0Reset= ON_COMPARE_MATCH_ON_CHANNEL
ON_COMPARE_MATCH_ON_CHANNEL,当本通道的比较匹配事件发生时,复位自己的计数器 CN0
ON_TRIGGER_FROM_PREV_CHANNEL,当前一个通道触发时,本通道的 CN0 被复位
TomChannelTriggerOutput= CCU0_TRIG_OF_CHANNEL
TRIG_FROM_PREVIOUS_CHANNEL,触发信号来自上一个通道的触发输出
CCU0_TRIG_OF_CHANNEL,触发信号来自当前通道的比较单元(CCU0)


(3)配置TomChannel_1
CM0、CM1根据实际情况配置
TomChannelOutputSignalLeve= LOW
TomChannelCounterCn0Reset = ON_TRIGGER_FROM_PREV_CHANNEL
TomChannelTriggerOutput = TRIG_FROM_PREVIOUS_CHANNEL


(4)配置TomChannel_2
TomChannelOutputSignalLevel = HIGH
TomChannelCounterCn0Reset = ON_TRIGGER_FROM_PREV_CHANNEL
TomChannelTriggerOutput = TRIG_FROM_PREVIOUS_CHANNEL


(5)Channel3-Channel6配置与通道1,2类似,不再赘述
(6)Channel7触发ADC采样


2.4 配置Port
这里TOM1的CH0到CH7都按照如下配置。

2.5 生成配置文件

3.1 导入库文件和EB生产的配置文件
不需要添加额为的库文件
替换一下重新生成的配置文件即可

3.3 添加导入文件的路径在Include Paths项目下
跳过,参考【AUTOSAR实战系列】(6):MCAL之GTM-TIM模块原理与EB配置。
5.1 一路通道输出PWM
int main(void)
Mcu_DistributePllClock();
}
Port_Init(&Port_ConfigRoot[0]); // 初始化Port
Dio_Init(&Dio_ConfigRoot[0]); // 初始化Dio
Icu_17_GtmCcu6_Init(&Icu_ConfigRoot[0U]); // 初始化Icu
Icu_17_GtmCcu6_StartSignalMeasurement(0); // 开始测量,EB中配置的是监测P33.4IO口
Gtm_EnableTomChannel(1,12); //一路PWM输出
while(1)
}
}
5.2 六路通道输出PWM
调用的接口相同,只是EB里面的配置不同
MCU:TC234
调试器:Lauterbach
调试软件:TRACE32 ICD TriCore USB
使用示波器连接到MCU的P20.14引脚,可观察到如下图:











