Infineon TRAVEO™ T2G仅以CYT2B 系列为例时钟系统功能与特点梳理一、整体概述TRAVEO T2G 面向汽车车身控制场景时钟系统采用多源输入 多级倍频 / 分频 分区域管理 全链路监控架构兼顾高性能、低功耗、高可靠性、汽车级 EMC支持多种工作模式切换同时提供时钟校准、故障检测、相位同步等工业 / 汽车常用功能。二、时钟源内部 外部共7类分为内部时钟源、外部时钟源适配高速运算、低速待机、RTC 实时时钟等不同场景部分时钟跨功耗域运行。1. 内部时钟源3 路芯片外无外围器件1IMO 内部主振荡器典型频率8 MHz高精度无晶振高速时钟默认上电使能。工作域仅支持Active、Sleep模式DeepSleep / 休眠模式自动关闭。用途CPU 主时钟基准、PLL/FLL 参考时钟、定时器时钟源若作为CLK_HF0CPU 时钟源禁止关闭否则 CPU 停跑。2ILO0/ILO1 内部低速振荡器典型频率32.768 kHz低功耗、精度一般无外围器件。工作域全功耗模式Active/DeepSleep/ 休眠 均可运行。分工- ILO0默认使能看门狗 (WDT)、时钟监控 (CSV)、备份时钟核心禁止随意关闭关 WDT 后才可操作- ILO1默认关闭仅用于 DeepSleep 下 ILO0 的时钟监控作为 WCO 备用。拓展支持软件修调 (Trim)可通过校准补偿温漂 / 压漂。2. 外部时钟源4路需外接器件1ECO 外部晶体振荡器默认关闭频率范围3.988 MHz ~ 33.34 MHz外接无源晶振高精度高速时钟。工作域Active、Sleep 模式支持硬件幅度 / 增益 / 滤波修调ATRIM/GTRIM/WDTR 等适配不同晶振参数自带 EMI 优化设计。配套集成ECO 预分频器10 位整数 8 位小数分频可将高频 ECO 降频供给低速时钟CLK_LF。2WCO 看门狗 / 实时晶振默认关闭标准频率32.768 kHz专为 RTC 设计高精度低速时钟。工作域全功耗模式RTC 首选时钟支持旁路功能可外接 32.768 kHz 方波替代晶振。3LPECO 低功耗外部晶振CYT2B系列不支持定位低功耗模式下替代 WCO专供 RTCXRES 复位期间仍可运行。配套 LPECO 预分频器支持小数分频Active/DeepSleep/ 休眠模式均可用部分器件不搭载需参考芯片手册。4EXT_CLK 外部输入时钟默认关闭频率范围0.25 MHz ~ 80 MHz专用 IO 引脚输入外部方波。特性引脚双向复用可输入外部时钟也可输出内部时钟至片外作为输入时 IO 需配置为高阻模式。补充所有外部晶振均提供参数计算公式峰峰值电压(V_P)、跨导(g_m)、负电阻保证晶振起振与长期可靠性符合汽车严苛工况。三、时钟倍频模块FLL 两类 PLLT2G 集成1 路 FLL 多路 PLLCYT2B系列只有1路基于基准时钟生成高频系统时钟满足 CPU、高速外设需求各模块特性差异明显。1. FLL 锁频环仅 1 路挂载 CLK_PATH0核心特点起振快、功耗低、不锁相位基于电流控制振荡器 (CCO)。频率范围CCO 输出 48 MHz ~ 200 MHz分为 5 个子频段支持二分频输出。参考源可选 IMO、WCO 等任意周期性时钟典型搭配 8 MHz IMO。配置逻辑通过FLL_REF_DIV参考分频、FLL_MULT倍频系数权衡锁定速度与时钟精度分频值越大精度越高、锁定越慢反之则快速锁定、误差偏大。适用场景对相位无要求、追求低功耗 / 快速启动的高速时钟场景。2. PLL 锁相环两类数量依芯片而定1基础 PLL无 SSC、无小数架构参考分频 (Q)、反馈分频 (P)、输出分频 (OUTPUT_DIV) 三级架构。约束需满足 PFD 鉴相频率、VCO 频率范围配置时必须先关闭 PLL 再修改分频参数禁止运行中改写。流程配置参数 → 使能 → 等待锁定 → 自动切换至 PLL 输出支持旁路模式。2400MHz PLL带 SSC 扩频 小数分频CYT2B系列不支持小数分频24 位小数域高 21 位保证精度实现精细频率配置。SSC 扩频时钟汽车 EMC 核心功能仅支持向下扩频通过调制时钟频谱降低辐射干扰可配置调制速率、调制深度。限制SSC 与小数分频不能同时开启。3模块对比总结模块相位功耗锁定速度特色功能FLL不锁相低快低功耗、宽频范围基础 PLL锁相中慢纯整数分频时钟抖动小400MHz PLL锁相中高慢小数分频 SSC EMI 优化四、时钟树架构分层分发多级选择 分频时钟树分为路径时钟 (CLK_PATH) → 高频根时钟 (CLK_HF) → 系统 / 外设时钟三级架构层级清晰路由灵活。1. CLK_PATH 时钟路径多路 MUX 选择作用作为 PLL/FLL 与 CLK_HF 之间的中转通道CYT2B 系列包含 CLK_PATH0~3。多路选择器- PATH_MUX可选四种输入源 IMO、EXT_CLK、ECO、DSI_MUX- DSI_MUX低速时钟路由可选三种输入源 ILO0、ILO1、WCO旁路功能PLL/FLL 可BYPASS_MUX旁路直接将源时钟输出至后级。2. CLK_HF 高频根时钟系统主时钟数量N 路依芯片而定CYT2B系列典型 CLK_HF0/1/2CLK_HF0 固定为 CPU 时钟永久使能其余 CLK_HF 可软件关闭。预分频每路 CLK_HF 自带固定预分频器可选1/2/4/8 分频。路由通过ROOT_MUX从多路CLK_PATH中选择输入源是整个数字域的时钟根基。3. 下级系统时钟由 CLK_HF0 衍生全部基于 CPU 根时钟 CLK_HF0 分频得到服务不同内核与片上模块CLK_FASTCortex-M4 内核时钟可编程 1~256 分频CYT2B系列最高160MHzCLK_PERI 外设总时钟衍生出 CLK_SLOW、CLK_GR、外设分频器1~256 可编程分频CYT2B系列最高100MHzCLK_SLOWCortex-M0 内核时钟由 CLK_PERI 分频得到CYT2B系列最高100MHzCLK_GR 分组时钟按功能分组供给各类外设每组独立分频、门控使能主要用于外设的控制和寄存器/缓存的访问部分时钟。用户不能修改外设所属分组。CYT2B 上电默认不分频系数 01:1 输出多数常规应用无需修改按照要求外设的CLK_GR频率应不低于分频器分频后的PCLK注意外设内部双时钟分工硬件逻辑以 SCB SPI/I2C/UART 为例CLK_GR6 供电SCB 总线接口、FIFO 控制逻辑、中断生成、IO 同步、片选控制、硬件状态机外设 “底座电路”PCLK 供电SPI SCLK 发生器、UART 波特率发生器、I2C SCL 生成、收发移位寄存器外设 “干活核心电路”。4. CLK_LF 低速时钟RTC / 看门狗专用输入源五选一ILO0、ILO1、WCO、ECO 预分频输出、LPECO 预分频输出CYT2B系列不支持。用途MCWDT 多功能看门狗、RTC 实时时钟、低功耗唤醒源。5. 定时器时钟 CLK_TIMER输入二选一IMO 或 CLK_HF0自带 1/2/4/8 分频用途SysTick 系统定时器CYT2B 系列外的器件CLK_TIMER_CTL寄存器已废弃其他系列默认选用IMO8分频。SysTick 定时器工作时钟由 CPUSS_SYSTICK_CTL 寄存器选择。可选时钟包括CLK_L、IMO、ECO以及CLK_TIMER。可借助MTB验证配置6. 外设专用时钟分频器PCLK专为通信、定时器、ADC 等外设设计共 4 类分频器支持相位同步是 T2G 外设时钟核心8 位整数分频、16 位整数分频纯整数低抖动16.5 位 / 24.5 位小数分频整数 5 位小数分频精度高适合 UART高精度串口缺点是存在单周期抖动CYT2B系列不支持16.5分频器。相位同步功能多个分频器可对齐相位满足电机、同步总线等时序要求DeepSleep 唤醒后硬件自动重新同步配置流程关闭分频器 → 设置分频系数 → 绑定外设 → 使能支持灵活路由到任意外设。外设分频器的选择UART可选整数和小数分频器I2C/SPI/PWM/CAN建议选整数分频器(SDL库例程只为演示用)多个不同外设可选用同一分频器号但是修改会联动。五.内核和外设频率配置1.内核时钟Cortex-M0 内核的运行时钟必须是 Cortex-M4F 内核时钟的整数分频。2.时钟树频率极限值时钟配置在SDL库system_tviibe1m_cm0plus.c中如下代码实现//PLL相关配置 #if CY_SYSTEM_USE_CLOCK CY_SYSTEM_USE_ECO #define CY_SYSTEM_PLL_INPUT_SOURCE CY_SYSCLK_CLKPATH_IN_ECO // Reference divider value: 2 // Feed back divider value: 40 // Out put divider value : 2 // PLL_OUT 16,000,000(Feco) / 2 * 40 / 2 160,000,000Hz // Restriction: 300,000,000 Fvco 400,000,000 // This time, Fvco 16,000,000 *40 /2 320,000,000. #define CY_SYSTEM_PLL_CONFIG_REFDIV (2UL) #define CY_SYSTEM_PLL_CONFIG_FEEDBACKDIV (40UL) #define CY_SYSTEM_PLL_CONFIG_OUTDIV (2UL) #elif CY_SYSTEM_USE_CLOCK CY_SYSTEM_USE_IMO #define CY_SYSTEM_PLL_INPUT_SOURCE CY_SYSCLK_CLKPATH_IN_IMO // Reference divider value: 1 // Feed back divider value: 40 // Out put divider value : 2 // PLL_OUT 8,000,000(Fimo) / 1 * 40 / 2 160,000,000Hz // Restriction: 300,000,000 Fvco 400,000,000 // This time, Fvco 8,000,000 * 40 / 1 320,000,000. #define CY_SYSTEM_PLL_CONFIG_REFDIV (1UL) #define CY_SYSTEM_PLL_CONFIG_FEEDBACKDIV (40UL) #define CY_SYSTEM_PLL_CONFIG_OUTDIV (2UL) #elif CY_SYSTEM_USE_CLOCK CY_SYSTEM_USE_EXT #warning Not implemented yet!! #endif void SystemInit (void) { #if defined(CY_SYSTEM_WDT_DISABLE) /* disable WDT */ Cy_WDT_Disable(); #endif /* CY_SYSTEM_WDT_DISABLE */ #if (CY_USE_PSVP 0u) /*********** Setting wait state for ROM **********/ CPUSS-unROM_CTL.stcField.u2SLOW_WS 1u; CPUSS-unROM_CTL.stcField.u2FAST_WS 0u; /*********** Setting wait state for RAM **********/ CPUSS-unRAM0_CTL0.stcField.u2SLOW_WS 1u; CPUSS-unRAM0_CTL0.stcField.u2FAST_WS 0u; #if defined (CPUSS_RAMC1_PRESENT) (CPUSS_RAMC1_PRESENT 1UL) CPUSS-unRAM1_CTL0.stcField.u2SLOW_WS 1u; CPUSS-unRAM1_CTL0.stcField.u2FAST_WS 0u; #endif /* defined (CPUSS_RAMC1_PRESENT) (CPUSS_RAMC1_PRESENT 1UL) */ #if defined (CPUSS_RAMC2_PRESENT) (CPUSS_RAMC2_PRESENT 1UL) CPUSS-unRAM2_CTL0.stcField.u2SLOW_WS 1u; CPUSS-unRAM2_CTL0.stcField.u2FAST_WS 0u; #endif /* defined (CPUSS_RAMC2_PRESENT) (CPUSS_RAMC2_PRESENT 1UL) */ /*********** Setting wait state for FLASH **********/ FLASHC-unFLASH_CTL.stcField.u4MAIN_WS 1u; /*** Set clock LF source ***/ SRSS-unCLK_SELECT.stcField.u3LFCLK_SEL CY_SYSCLK_LFCLK_IN_ILO0; #if CY_SYSTEM_USE_CLOCK CY_SYSTEM_USE_ECO /*** ECO port settings ***/ /* Default settings should be OK. */ /*** ECO setting and enabling ***/ // These values need to be confirmed SRSS-unCLK_ECO_CONFIG2.stcField.u3WDTRIM 4u; SRSS-unCLK_ECO_CONFIG2.stcField.u4ATRIM 12u; SRSS-unCLK_ECO_CONFIG2.stcField.u2FTRIM 3u; SRSS-unCLK_ECO_CONFIG2.stcField.u2RTRIM 3u; SRSS-unCLK_ECO_CONFIG2.stcField.u3GTRIM 1u; SRSS-unCLK_ECO_CONFIG.stcField.u1ECO_EN 1ul; while(SRSS-unCLK_ECO_STATUS.stcField.u1ECO_OK 0ul); while(SRSS-unCLK_ECO_STATUS.stcField.u1ECO_READY 0ul); #endif #if defined(CY_SYSTEM_WCO_ENABLE) // Enable WCO BACKUP-unCTL.stcField.u1WCO_EN 1ul; // Wait until WCO status becomes OK, 如果开启外部WCO会影响启动时间可以将等待ready部分手动移到user代码 while(BACKUP-unSTATUS.stcField.u1WCO_OK 0ul); #endif /*** Set CPUSS dividrs as required ***/ // FAST 160,000,000; PERI and SLOW FAST / 2; PCLK由CLK_PERI在用户代码中经过整数或小数分频器得到所有外设时钟由CLK_PERI决定 CPUSS-unCM4_CLOCK_CTL.stcField.u8FAST_INT_DIV 0u; // no division不分频CLK_HF0CM4CLK_FAST配置为160MHz CPUSS-unCM0_CLOCK_CTL.stcField.u8PERI_INT_DIV 1u; // divided by 2二分频得到CLK_PERI配置为80MHz CPUSS-unCM0_CLOCK_CTL.stcField.u8SLOW_INT_DIV 0u; // no divisionCLK_PERICM0CLK_SLOW /*** PLL setting and enabling ***/ SRSS-unCLK_PATH_SELECT[1/*PLL0*/].stcField.u3PATH_MUX CY_SYSTEM_PLL_INPUT_SOURCE; //在system_tviibe1m_cm0plus.c文件中定义为CY_SYSCLK_CLKPATH_IN_IMO也就是8MHz SRSS-unCLK_PLL_CONFIG[0].stcField.u5REFERENCE_DIV CY_SYSTEM_PLL_CONFIG_REFDIV; SRSS-unCLK_PLL_CONFIG[0].stcField.u7FEEDBACK_DIV CY_SYSTEM_PLL_CONFIG_FEEDBACKDIV; SRSS-unCLK_PLL_CONFIG[0].stcField.u5OUTPUT_DIV CY_SYSTEM_PLL_CONFIG_OUTDIV; SRSS-unCLK_PLL_CONFIG[0].stcField.u1ENABLE 1ul; while(SRSS-unCLK_PLL_STATUS[0].stcField.u1LOCKED 0ul); //根据该文件中的相关宏定义配置得到PLL_OUT为160MHz /*** Setting PATH2 source ***/ SRSS-unCLK_PATH_SELECT[2].stcField.u3PATH_MUX CY_SYSCLK_CLKPATH_IN_IMO; /*** Assign PLL0 as source of clk_hf0 ***/ /* Select source of clk_hf0 */ /*** Set HF source, divider, enable ***/ SRSS-unCLK_ROOT_SELECT[0/*clk_hf0*/].stcField.u4ROOT_MUX CY_SYSCLK_HFCLK_IN_CLKPATH1; SRSS-unCLK_ROOT_SELECT[0].stcField.u2ROOT_DIV 0u; /* no div */ SRSS-unCLK_ROOT_SELECT[0].stcField.u1ENABLE 1u; /* 1 enable */ /* Select source of clk_hf1 */ /*** Set HF1 source, divider, enable ***/ SRSS-unCLK_ROOT_SELECT[1/*clk_hf1*/].stcField.u4ROOT_MUX CY_SYSCLK_HFCLK_IN_CLKPATH1; SRSS-unCLK_ROOT_SELECT[1].stcField.u2ROOT_DIV 1u; /* divided by 2 */ SRSS-unCLK_ROOT_SELECT[1].stcField.u1ENABLE 1u; /* 1 enable */ /*** Enabling ILO0 ***/ Cy_WDT_Unlock(); SRSS-unCLK_ILO0_CONFIG.stcField.u1ENABLE 1; /* 1 enable */ SRSS-unCLK_ILO0_CONFIG.stcField.u1ILO0_BACKUP 1ul; /* Ilo HibernateOn */ Cy_WDT_Lock(); #endif // CY_USE_PSVP 0u SystemCoreClockUpdate(); }借助MTB配置CYT2B时钟六、功耗域划分时钟电路按功耗域分区不同域对应不同工作模式模式切换时时钟自动启停是低功耗设计核心Active 域仅在Active / 运行模式工作包含 CLK_HF、PLL、FLL、ECO、EXT_CLK进入 DeepSleep 自动停止。DeepSleep 域Active DeepSleep 模式均可工作包含 CLK_LF、ILO0/ILO1、对应 CSV 监控电路。Hibernate休眠域所有功耗模式含复位 XRES 持续运行包含 WCO、LPECO、CLK_BAK备份时钟、RTC保证休眠 / 复位后 RTC、唤醒功能不掉电。七、UART外设波特率配置举例举例一个24.5位的除法器整数除法值为3小数除法值为16从48MHz产生一个48/(3 16/32) 48/3.5 13.7 MHz的时钟以函数Cy_SysClk_PeriphSetFracDivider(CY_SYSCLK_DIV_24_5_BIT, 0u, 85u, 26u);为例这个分频器的时钟源是peri_clk它由hf_clk[0]分频得到。整数分频值dividerIntValue 85分频器值分频器值 1会对输入时钟进行整数除法即除以 1 至 1677721624 位分频器。分数分频值dividerFracValue 26数值可以是 1 到 32 之间。因此每次计数时它会将时钟频率降低至原来的 1/32。若要将时钟频率降低至 26/320.8125 倍请将此值设为 26。那么在串口应用中即可按照如下计算- CLK_PERI频率80MHz- 目标 UART baud rate(Bit rate) 115,200 [bps]- OVS 8 [oversamples]理想的 input clock 目标 baud rate * OVS 115,200 * 8 921,600 [Hz]接下来可以计算出所需的时钟分频控制寄存器DIV24.5的理想值理想的 DIV24.5 80 [MHz] / 921,600 [Hz] 86.80556然而DIV24.5寄存器有24位用于整数部分只有5位用于小数部分(基数1/32)。因此实际的分频值和实际的UART波特率可以计算如下实际 DIV24.5 86.8056 (整数: 851, 小数: 26/32)实际 UART baud rate 80 [MHz] / 86.8056 / 8 115,199 [bps]八、CSV时钟监控监控指定时钟是否产生异常然后通过Fault单元通知给内核后续再展开介绍。