news 2026/6/10 15:32:34

【AUTOSAR实战系列 · TC23x篇】MCU时钟模块原理与EB配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【AUTOSAR实战系列 · TC23x篇】MCU时钟模块原理与EB配置

时钟和时钟控制单元CCU

1 功能及原理分析

1.1 TC23x时钟架构解析

核心构建模块:

  • Clock Source 基础时钟源(外部晶振/内部RC振荡器)

  • Clock Speed Upscaling PLL倍频电路(提升时钟频率)

  • Clock Distribution 时钟分配网络(将时钟分发至CPU/外设/GTM等)

  • Individual Clock Config 外设级时钟门控/分频(如单独配置ADC、PWM)

1.2 Clock Speed Upscaling

(1)相位锁相环PLL

模式控制:

  • Normal Mode 正常模型 (常用)

  • Prescaler Mode

  • Freerunning Mode

正常模式下,输入频率fosc先通过P分频,再乘以N,然后通过k2或k3再分频:

fPLL=N+1(P+1)(K2+1)fOSC f_{PLL} = \frac{N + 1}{(P + 1)(K2 + 1)}f_{OSC}fPLL=P+1)(K2+1N+1fOSC

fPLL2=N+1(P+1)(K3+1)fOSC f_{PLL2} = \frac{N + 1}{(P + 1)(K3 + 1)}f_{OSC}fPLL2=P+1)(K3+1N+1fOSC

例如:当
fOSC=20MHz,N=29,P=0,K2=2,K3=5 f_{OSC} = 20MHz,N=29,P=0,K2=2,K3=5fOSC=20MHzN=29P=0K2=2K3=5
计算得到:
fPLL=200MHz,fPLL2=100MHz f_{PLL} = 200MHz,f_{PLL2} = 100MHzfPLL=200MHzfPLL2=100MHz

(2)PLL_ERAY,为汽车以太网提供高精度时钟

模式控制:

  • Normal Mode 正常模型 (常用)

  • Prescaler Mode

  • Freerunning Mode

正常模式下,输入频率fosc先通过ErayP分频,再乘以ErayN,然后通过ErayK2或ErayK3再分频:

fPLLERAY=ErayN+1(ErayP+1)(ErayK2+1)fOSC f_{PLLERAY} = \frac{ErayN + 1}{(ErayP + 1)(ErayK2 + 1)}f_{OSC}fPLLERAY=ErayP+1)(ErayK2+1ErayN+1fOSC

fPLL2ERAY=ErayN+1(ErayP+1)(ErayK3+1)fOSC f_{PLL2ERAY} = \frac{ErayN + 1}{(ErayP + 1)(ErayK3 + 1)}f_{OSC}fPLL2ERAY=ErayP+1)(ErayK3+1ErayN+1fOSC

例如:当
fOSC=20MHz,ErayN=23,ErayP=0,ErayK2=2,ErayK3=4 f_{OSC} = 20MHz,ErayN=23,ErayP=0,ErayK2=2,ErayK3=4fOSC=20MHzErayN=23ErayP=0ErayK2=2ErayK3=4
计算得到:
fPLLERAY=160MHz,fPLL2ERAY=96MHz f_{PLLERAY} = 160MHz,f_{PLL2ERAY} = 96MHzfPLLERAY=160MHzfPLL2ERAY=96MHz

Note:这里P的值与外部晶振的频率有关,这里fPFD必须满足芯片手册规定范围(1−25MHz) Note:这里P的值与外部晶振的频率有关,这里f_{PFD}必须满足芯片手册规定范围(1-25MHz)Note:这里P的值与外部晶振的频率有关,这里fPFD必须满足芯片手册规定范围(125MHz

fPFD=fOSCP+1 f_{PFD} = \frac{f_{OSC}}{P + 1}fPFD=P+1fOSC

1.3 Clock Distribution

时钟来源:

PLL/PLL2、PLL_ERAY/PLL_ERAY2、back-up、OSC0

2 EB工程搭建

2.1 创建工程

(1)首先打开EB软件,依次点击File -> New -> Configuration Project

(2)在弹出的窗口中输入工程名称,选择路径。本例选择使用默认路径。之后点击Next继续

(3)此处选择需要的芯片型号并填写ECU ID

在下面第一个选项打钩,它会自动为新建工程添加最低需要的子元素。点击Next继续

(4)这一步选择工程需要的模块。 Resource为默认必选项,用来设置芯片具体型号。

在这里我们选择MCU模块,添加后点击Finsh完成

2.2 配置Resource模块

下图即为建好的EB工程,新工程首先要打开Resource模块,在ResourceSubDerivative中选择相应的芯片型号

TC234LP_32F200F:

  • TC234,是 AURIX™ TC23x 系列中的一个子系列,属于中端性能的 32 位多核微控制器(TriCore™架构),面向汽车和工业应用

  • LP,表示低功耗(Low Power)版本

  • 32F200F:3.2MB Flash容量,200MHZ主频,F封装

2.3 配置Mcu模块

(1)打开Mcu->General模块,配置晶振频率20MHz,使能McuPerformReset和McuClearColdReset功能。

McuPerformResetApi:触发微控制器的软件复位(Software Reset),使 MCU 重新启动(类似于看门狗复位或手动复位)。

McuClearColdResetApi:清除冷复位(Cold Reset)状态标志,用于识别复位源或初始化复位相关配置。

(2)选择McuModuleConfiguration选项卡,双击选择打开其中的配置文件McuModuleConfiguration_0;

(3)McuModuleConfiguration_0->General选项卡中,配置Mcu复位设置

(4)McuModuleConfiguration_0->McuClockSettingConfig选项卡中,双击打开McuClockSettingConfig_0,配置参数得到目标时钟

  • 配置项含义

  • 具体配置参数请参照下图(MCU频率200MHz):

2.4 生成配置文件

最后点击工具栏上的Generate按钮,生成配置好的文件(output\generated文件夹下),包括头文件(inc)和源文件(scr)

3 Tasking工程搭建

3.1 创建工程

(1)打开TASKING VX-toolset for TriCore软件,依次点击 File -> New ->
TASKING TriCore C/C++ Project

(2)在在弹出的窗口中输入工程名字,设置路径以及选择工程类型,这里为了方便直接选择了Hello World C Project。之后点击Next继续

(3)选择芯片(TC23X),之后点击Finish完成创建

3.2 导入库文件和EB生成的配置文件

(1)在建好的工程里做如下操作:

  • 在EB安装路径下找到Aurix_MC-ISAR文件夹,复制到工程中

  • 将EB生成的output文件夹复制到工程中

(2)此工程中只用到了MCU模块,Aurix_MC-ISAR文件夹中有很多多余文件,需要删掉保证编译正确

3.3 创建文件

  1. 在当前工程中新建头文件MemMap.h,代码中有调用,防止编译出错。

  2. 在ClockTest.c中添加代码,所用Demo板需要在BMHD位置写入起始地址才能启动程序。

  3. 添加Mcal_safeErrorHandler函数,代码中有调用

  4. 添加相应头文件

#include<stdio.h>#include"Std_Types.h"#include"Mcu.h"constunsignedintBMHD_VAL[]__at(0xa0000000)={0x80000020,0xB3590078,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x9BC407AB,0x643BF854};voidMcal_SafeErrorHandler(uint32 ErrorType){}intmain(void){Printf(“Hello world\n”);}

3.4 工程属性配置

(1)右键工程名,选择菜单中的Properties选项,弹出界面如下图所示

(2)点击C/C++ Build – Settings—Optimization Level 调为0-None

(3)将所需文件的路径都添加在Include Paths项目下

"${workspace_loc:/${ProjName}/Aurix_MC-ISAR}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/general}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/general/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/general/tricore}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/general/tricore/compiler}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/general/tricore/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/general/tricore/inc/TC23x}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/integration_general}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/integration_general/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/cfg1}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/cfg1/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/cfg1/lib}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/cfg1/obj}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/cfg1/src}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/ssc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/ssc/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/ssc/lib}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/ssc/obj}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/mcu_infineon_tricore/ssc/src}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/tricore_general}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/tricore_general/ssc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/tricore_general/ssc/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/tricore_general/ssc/lib}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/tricore_general/ssc/obj}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/tricore_general/ssc/src}""${workspace_loc:/${ProjName}/output}""${workspace_loc:/${ProjName}/output/inc}""${workspace_loc:/${ProjName}/output/src}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/dio_infineon_tricore}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/dio_infineon_tricore/ssc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/dio_infineon_tricore/ssc/inc}""${workspace_loc:/${ProjName}/Aurix_MC-ISAR/dio_infineon_tricore/ssc/src}"

(4)在Preprocessing项目中要讲Automatic include of ‘,sfr’ file 前面的钩取消掉。

在Defined symbols下添加一个条目:_TASKING_C_TRICORE_=1。

3.5 编译

完成上述操作后,此工程即可以被编译通过。

4 API接口

API接口解释
Mcu_InitMCU初始化
Mcu_InitClock时钟初始化
Mcu_DistributePllClock激活PLL时钟,并分配给系统时钟
Mcu_GetPllStatus获取PLL时钟锁定状态
Mcu_ClearColdResetStatus清除冷复位状态
Mcu_PerformReset软件复位MCU
Mcu_GetResetReason获取复位原因
Mcu_InitRamSection初始化RAM空间

5 Demo示例

在main函数中添加如下代码

intmain(void){Std_ReturnType RetVal;// MCU初始化,加载Mcu_ConfigRoot中的时钟参数(包括PLL/ERAY的预配置)Mcu_Init(&Mcu_ConfigRoot[0]);// 时钟初始化,实际配置PLL和ERAY,根据Mcu_kClockConfiguration0的参数设置寄存器RetVal=Mcu_InitClock(0);if(RetVal==E_OK){// 获取PLL时钟锁相状态,确认PLL稳定输出目标频率while((Mcu_GetPllStatus())==0){};// 激活PLL时钟,并分配给系统时钟,配置寄存机,将PLL时钟分配给CPU/SPB/SRI/外设(如ERAY、SPB等)Mcu_DistributePllClock();}Mcu_InitRamSection(0U);// 初始化RAM空间}

6 测试

通过劳德巴赫监测CPU寄存器,查看到寄存器中的值正是我们在EB中配置的值。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:32:32

GESP认证C++编程真题解析 | 202509 七级

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…

作者头像 李华
网站建设 2026/6/10 15:23:37

住宅代理 vs 链式代理:区别、原理与应用场景全解析

在跨境电商、海外社媒运营、国际业务访问等场景里&#xff0c;很多人第一次接触“住宅代理”和“链式代理”这两个词时&#xff0c;往往会把它们混在一起理解。实际上&#xff0c;这两者并不是同一类概念&#xff1a;住宅代理更偏向“出口资源”&#xff0c;链式代理更偏向“流…

作者头像 李华
网站建设 2026/6/10 15:23:35

实景孪生赋能智慧监管 | 黎阳之光监狱全域透明智能化管理解决方案

实景孪生赋能智慧监管 | 黎阳之光监狱全域透明智能化管理解决方案一、方案前言监狱作为国家司法执法核心场所&#xff0c;承担着服刑人员改造、安全管控、规范执法的重要职能。当前传统监狱安防普遍存在监控画面碎片化、场景可视化程度低、人员管控有盲区、数据分散不互通、事后…

作者头像 李华
网站建设 2026/6/10 15:20:12

全源码提供-便捷高效的家电清洗维修预约小程序

一个面向家电清洗维修行业的在线预约与派单平台&#xff0c;覆盖客户 师傅 管理后台&#xff0c;基于 Vue 3 构建。项目背景 每台空调每年至少需要深度清洗 1-2 次&#xff0c;每台油烟机使用 3 个月就开始积油&#xff0c;热水器用久了不加热、洗衣机用久了有异味——家电清…

作者头像 李华
网站建设 2026/6/10 15:17:49

腾讯QQ发布“新芽守护行动”,全面升级未成年人保护体系

当数字技术深度融入青少年的学习、社交与成长&#xff0c;如何从源头上构建安全、健康的网络环境&#xff0c;已成为全社会共同关注的命题。6月1日&#xff0c;腾讯QQ在北京举办“QQ新芽守护行动发布暨青少年网络保护研讨会”&#xff0c;正式宣布将多年的未成年保护实践升级为…

作者头像 李华