单片机/MCU论坛
直播中

楼斌

9年用户 962经验值
私信 关注
[问答]

GTM 时钟 CLS0_CLK 可以内部路由到 TIM 吗?

GTM 时钟 CLS0_CLK 能否在内部路由至 tiM?如何实现?

回帖(1)

神船大幅

2025-8-6 17:46:31

关于英飞凌AURIX™ TC2xx/TC3xx系列微控制器中GTM时钟CLS0_CLK能否在内部路由到TIM模块,以及如何实现的问题,答案是:可以实现的,但需要通过SCU(系统控制单元)进行配置。以下是详细的解释和实现步骤:




核心概念解析




  1. GTM (Generic Timer Module)



    • 复杂的高精度定时器系统,包含CLS(时钟分频子系统)、TOM/TIM等子模块。

    • CLS0_CLK 是CLS模块的输出时钟信号,可通过分频/门控生成特定频率的时钟。




  2. TIM (Timer Input Module)



    • GTM的子模块,用于捕获外部信号或测量脉冲宽度,需要外部时钟输入




  3. SCU (System Control Unit)



    • 系统的时钟和路由控制中心,负责全局时钟分配(如GTM时钟到其他模块)。






内部路由路径


graph LR
    GTM[GTM CLS0_CLK] --> SCU[SCU Clock Router]
    SCU --> TIMx[TIM Input Channel]


  1. 信号源CLS0_CLK 作为GTM内部生成的时钟。

  2. 路由枢纽:SCU的时钟配置寄存器(如 CLKCON 系列寄存器)。

  3. 目标:TIM模块的时钟输入引脚(需配置为内部时钟源)。




实现步骤


以下是关键配置流程(以TC3xx为例):


1. 使能GTM到SCU的输出



  • 配置 GTM外部时钟输出

    • 设置寄存器 GTM_CLS0_CLK_FDIV 生成所需频率。

    • 使能CLS0_CLK输出至SCU:
      GTM_CLS0_CLK_CTRL.B.CLS_CLK_OUT = 1;  // 输出CLS0_CLK到SCU



2. 配置SCU的路由



  • 选择TIM模块的时钟源:

    • 访问SCU的 CLKCON寄存器(例如 CLKCON2 控制TIM0/1时钟):
      // 将TIM0输入时钟源设为GTM输出的CLS0_CLK
      SCU_CLKCON2.B.TIM0INSEL = 1;  // 选择SCU_CLK0作为源
      SCU_CLKCON0.B.SCU_CLK0SEL = 0x7; // 设置SCU_CLK0 = GTM_CLS0_CLK(具体值需查手册)

    • 关键点:不同型号的TIM通道对应不同的 CLKCONx 寄存器,需查阅具体《SCU章节》的时钟映射表。



3. 配置TIM模块



  • 初始化TIM通道,选择时钟源为 内部输入
     TIM0_CH0_CTRL.B.CLK_SEL = 0;  // 使用内部时钟路由(非外部引脚)
    TIM0_CH0_CTRL.B.OSM = 1;      // 启用单次计数模式(按需配置)


4. 验证时钟路径



  • 通过调试器读取TIM计数寄存器,观察是否按预期递增。

  • 或配置TIM触发中断,验证时钟频率。




注意事项




  1. 时钟频率限制



    • CLS0_CLK 频率不得超过TIM模块最大输入频率(参考数据手册)。

    • 可选配置CLS模块的分频器(GTM_CLS0_CLK_FDIV)降频。




  2. 寄存器映射差异



    • TC2xx与TC3xx的SCU寄存器地址可能不同,需查阅对应型号的《用户手册》。




  3. 硬件支持



    • 确认您的具体型号支持此路由(多数TC2xx/TC3xx支持,但需验证)。






示例代码片段(TC397)


// Step 1: 配置GTM CLS0输出100MHz时钟(假设系统时钟200MHz)
GTM_CLS0_CLK_FDIV.B.FDIV = 1;       // 分频系数=1 (CLS0_CLK = GTM_FXCLK/2)
GTM_CLS0_CLK_CTRL.B.CLS_CLK_OUT = 1; // 使能输出到SCU

// Step 2: SCU路由至TIM0
SCU_CLKCON0.B.SCU_CLK0SEL = 0x7;    // SCU_CLK0 = GTM_CLS0_CLK
SCU_CLKCON2.B.TIM0INSEL = 1;        // TIM0时钟源 = SCU_CLK0

// Step 3: 配置TIM0通道0使用内部时钟
TIM0_CH0_CTRL.B.CLK_SEL = 0;        // 内部时钟源
TIM0_CH0_CTRL.B.OSM = 1;            // 单次计数模式
TIM0_CH0_CNTS.B.CNTS = 0;           // 清零计数器
TIM0_CH0_CTRL.B.TIM_EN = 1;         // 启动TIM0



故障排查



  1. TIM计数器不递增

    • 检查SCU路由路径是否完整(CLKCONx寄存器配置)。

    • 确认GTM_CLS0_CLK是否使能输出(GTM_CLS0_CLK_CTRL)。


  2. 频率异常

    • 检查GTM和SCU的分频设置(CLS_FDIVSCU_CCUCON等)。


  3. 寄存器访问错误

    • 确保已解锁SCU的写保护(SCU_WDTSCON0中的ENDINIT控制)。




关键提示:详细路由映射请查阅英飞凌手册 《TC3xx User Manual》中的 "SCU (System Control Unit) - Clock Routing" 章节"GTM (Generic Timer Module) - Clock Subsystem" 章节



通过以上步骤,即可实现 GTM_CLS0_CLKTIM 模块的内部路由。如有具体型号需求,可提供芯片型号进一步确认寄存器细节。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分