【MCAL】TC397+EB-treso之MCU配置实战 - 芯片时钟

news2024/12/28 3:36:24

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程,主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分,帮助读者了解TC397芯片的时钟树结构,在后续计算配置不同外设模块诸如通信速率,定时器周期等,都能有一个清晰的输入频率来源理解。

目录

概述

MCU配置 

General:McuGeneralConfiguration

General:McuModuleConfiguration

McuResetSettingConf 

McuTrapSettingConf

McuClockSettingConfig 

McuSystemPllSettingConfig 

McuPeripheralPllSettingConfig

McuPllDistributionSettingConfig

McuExternalClockOutputConfig

McuClockMonitorConfig 

McuModeSettingConf

McuDemEventParameter

McuRamSectorSettingConf

McuResetReasonConf

MCU驱动使用与调试


概述

当我们使用需要用到时钟的外设时,基本都需要对MCU驱动模块进行配置。驱动程序提供AUTOSAR指定的运行时服务接口。MCU驱动模块负责以下工作:

  • 完成AUTOSAR上层组件指定的时钟、复位和静态低功耗模式功能配置。
  • Trap功能的配置。
  • 配置 BASIC 驱动程序所涉及的GTM、CCU6 和GPT12的全局特性。
  • 为定时器IP的其他驱动程序提供库支持 - GTM、CCU6、GPT12和STM。
  • 模拟转换器所需的相位同步器配置。
  • 符合AUTOSAR规范的Runtime APIs,用于时钟、复位、低功耗管理和RAM初始化。
  • 用于Trap管理的Runtime APIs。

本文的参考资料见下表。

序号参考资料内容
1《MC-ISAR_TC3xx_UM_Mcu.pdf》英飞凌提供的针对TC3xx芯片MCAL配置用户手册
2《MC-ISAR_TC3xx_Config_Verification_Manual_Mcu.pdf》英飞凌提供的针对TC3xx芯片配置验证手册,介绍动态代码与配置项的对应
3《Infineon-AURIX_TC39x-UserManual-v02_00-EN》英飞凌提供的TC39x芯片用户手册

下图为MCAL驱动模块涉及的软硬件接口关系图。

本次配置主要描述MCU本身需要配置的功能(主要为系统时钟),牵扯到独立功能的诸如GTM部分我们会在单独介绍其功能时描述对应MCU需要完成的配置。MCAL针对不同的驱动模块的配置项根据功能进行了容器的划分,下面是后边配置涉及的容器。


MCU配置 

我们首先打开EB,导入Mcu与McalLib(McalLib里面的函数会贯穿整个MCAL)。本文只介绍MCU本身需要配置的部分。

本次配置的主要目标是完成芯片的时钟配置。板卡为英飞凌提供的KIT_A2G_TC397XA_TFT。涉及的软件包括:

  • EB-treso:用于生成动态代码,具体工程搭建参考《【AUTOSAR MCAL】MCAL基础与EB tresos工程新建》。
  • HighTech:用于编译生成elf文件,具体的工程搭建参考《【MCAL】HighTec集成TC3xx对应MCAL的Demo》。
  • UDE 5.2:用于下载和调试程序。

需要注意的是MCU配置尤其是时钟这块儿的依赖项比较多,建议先使用MCAL EB-tresos Demo中的配置,需要特殊处理时钟分频系数或者某模块的时钟时,再单独修改,路径为:MC-ISAR_AS422_TC3xx_BASIC_2.20.0\DemoWorkspace\McalDemo\TC39B\1_ToolEnv\2_Tresos\AS422\DemoApp\config\Mcu.xdm。


General:McuGeneralConfiguration

下图为General配置界面,需要修改的一个配置选项如下。

  • McuSafetyEnable:因为我们的DEM没有对应的配置,所以我们需要关闭安全检查,否则报错生成动态代码会报错。

其余的选项根据功能开发需要选宏开关即可,我们这里直接采取默认的选项即可。需要着重理解的选项如下:

  • McuInitClock:Mcu_InitClock API可用,用作初始化芯片时钟。
  • McuMainOscillatorFrequency :外部部晶体或陶瓷谐振器频率为20Mhz。
  • McuOscillatorMode:芯片时钟源是外部晶体或陶瓷谐振器模式。


General:McuModuleConfiguration

这部分为MCU模式相关的通用配置,我们暂时不需要改动。


McuResetSettingConf 

此部分包含芯片复位的配置,这部分我们需要修改的配置如下。

  • McuSWResetConf ::软件复位选择导致的,有系统复位与应用复位,这里选择应用复位,应用复位后芯片的所有外设、CPU和部分SCU寄存器会回到初始状态,其他部分(如RAM,时钟)状态维持不变,影响范围比系统复位要小,也因此应用复位耗时最短。因为APP跳转Boot的是通过软件复位来实现的,为了保持编程标志位在RAM中的值,需要选择应用复位。
  • McuSTMxResetOnApplResetEnable :STM定时器的计数值会在清零,重新计数。


McuTrapSettingConf

这部分功能为各核心Trap使能相关配置,我们暂时不需要改动。


McuClockSettingConfig 

这里是Mcu时钟配置的容器,其中主要包含了以下一些容器。

时钟系统本身是由不同的构建块组成的时钟树,下面是几个构建块包含的内容。

  • Clock Source:时钟树源头,可以是外部晶振或者内部系统时钟。 
  • Clock speed up-scaling:时钟的缩放部分,主要由PLL(锁相环)构成。
  • Clock distribution:时钟分配,由CCU负责。
  • Individual clock configuration:单独的时钟配置,针对片内外设(Peripherals)。


McuSystemPllSettingConfig 

此容器包含系统锁相环的配置,主要完成对时钟源晶振频率的倍/分频,从而达到配置的频率。下图为系统PLL功能逻辑图。

需要注意的配置如下。

  • McuClockReferencePointFrequency0:系统时钟,它的计算公式为Fpll =( (Fosc * (McuNDivider + 1)) / ((McuK2Divider+1)*(McuPDivider+1)))。  


McuPeripheralPllSettingConfig

此容器包含外设PLL的配置,下图为对应的功能逻辑图。

这里我们主要关注下面的配置项。

  • McuClockReferencePointFrequency1 (dynamic range):外设时钟1,Fpll1 =( (Fosc * (McuNDivider + 1)) / ((McuK2Divider+1)*(McuPDivider+1)))
  • McuClockReferencePointFrequency2 (dynamic range):外设时钟2,Fpll2 =( (Fosc * (McuNDivider + 1)) / ((McuK3Divider+1)*(McuPDivider+1)))


McuPllDistributionSettingConfig

这个容器包含在时钟树内的各种片内外设时钟配置。 

这里需要我们首先注意的是以下的配置。

  • McuClockDistributionInpClockSel:将备用时钟或者PLLx选为时钟分配单元输入,这里选用的是PLLx。
  • McuLowPowerDivValue:这个参数定义了低功率分频特性是否启用。这里为不启用。

剩下的配置则对应了各个片内外设,我们用到哪里就需要关注那部分。


McuExternalClockOutputConfig

包含MCU外部时钟的配置参数,因为我们用的是外部晶振,这里就不涉及了。


McuClockMonitorConfig 

这个容器定义了TC3xx时钟监视的配置,这里我们不需要改动。


McuModeSettingConf

这个容器主要包含Mcu不同模式的配置集合。主要需要我们关注的为:

  • McuMode:当前配置集合为空闲模式的集合,用于正常的程序运行。1为睡眠模式,2为待机模式。


McuDemEventParameter

这是一个容器,用于引用 DemEventParameter元素,这些元素使用Dem_ReportErrorStatus() API,以防发生相应的错误。EventId 取自引用的DemEventParameter的DemEventId符号名称。容器中提供了标准化错误,并且可以通过特定于供应商的错误引用进行扩展。这部分我们不需要修改。


McuRamSectorSettingConf

此部分容器包含初始化设置一部分RAM区域,通过Mcu_InitRamSection()函数来实现,我们没有使用。


McuResetReasonConf

这里在配置完芯片类型,建立MCU模块,这部分重启原因配置就会生成了。用户可以通过Mcu_GetResetReason()获取重启原因。


MCU驱动使用与调试

MCU驱动使用主要涉及的是系统时钟的初始化,首先调用Mcu_Init()初始化MCU通用配置,然后调用Mcu_InitClock()初始化芯片的时钟部分,最后使用Mcu_GetPllStatus()获取PLL状态,相位锁定之后(频率稳定),表示初始化完成,调用Mcu_DistributePllClock()将PLL时钟作为MCU时钟的源头。代码实现如下。

	volatile Mcu_ClockType ClockID = 0;
	Mcu_Init(&Mcu_Config);
	Mcu_InitClock(ClockID);
	Mcu GetPllStatusRetVal=Mcu_GetPllStatus ();
	while (MCU_PLL_UNLOCKED == Mcu_GetPllStatus())
	{
	     /* wait for PLL locked */
	}
	Mcu_DistributePllClock ();

工程准备好之后,编译生成.elf文件然后将PLS正确与开发板相连(JTAG接口),然后打开UDE,与PLS连接上之后下载程序到办卡上,在Mcu_DistributePllClock ()接口前设置断点,如果能跑到这句话能初步说明PLL锁相环生成系统成功是OK的。


十六宿舍 原创作品,转载必须标注原文链接。

©2023 Yang Li. All rights reserved.

欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1333250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

LINUX系统安装和管理

目录 一.应用程序 对比应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包装类型 二.RPM软件包管理 1.RPM是什么? 2.RPM命令的格式 查看已安装的软件包格式 查看未安装的软件包 3.RPM安装包从哪里来? 4.挂载的定义 挂载命令moun…

设计模式--外观模式

实验12:外观模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解外观模式的动机,掌握该模式的结构; 2、能够利用外观模式解决实际问题。 [实验任务]:计算机开启 在计算机主机(Main…

带您了解目前AI在测试领域能够解决的那些问题

AI在测试领域主要应用场景 话不多说,直接给结论: 接口测试脚本的自动生成和校验(依赖研发ai工具)测试用例的自动生成UI自动化测试脚本的自动生成和校验测试文档的自动生成快速了解初涉的业务领域 关于ai对研发和测试的整体影响…

简析七款无线话筒电路图

简易无线话筒电路图(一) 无线话筒线圈L1匝间距离变近和换容量大一点的电容关联会使发射频率变低;要使发射频率变高,就需要采取相反的措施。和L1并联的电容变化范围不可以太大和太小,否则发射频率会偏到离谱,甚至不会产…

ubuntu docker 进入容器内使用ping 指令,提示bash: ping: command not found问题

解决方法 #更新软件列表 apt update #安装 ping 工具iputils-ping apt install -y iputils-ping #最后使用ping一下容器ping 172.18.0.3欢迎关注我的公众号“点滴分享技术猿”,原创技术文章第一时间推送。

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库,旨在解决时序数据存储与分析问题,为用户提供高效的时序数据管理与查询便利。为了实现这一目标,CnosDB 实现了一系列专用函数,快来和CC一起来看看吧! CnosDB:深入了…

TLS 1.2详解

TSL由多个协议组成的两层协议集合,工作与应用层和传输层之间。 TLS协议包含两层协议:记录层协议(TLS Record Protocol协议)和 握手协议(TLS Handshake Protocol协议),底层采用可靠传输协议&…

深度神经网络下的风格迁移模型(C#)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 这个是C#版本的,这里就只放出代码。VB.Net版本请参看 深度神经网络下的风格迁移模型-CSDN博客 斯坦福大学李飞飞团队的…

虚拟机安装windows2012和虚拟机安装国产系统deepin

虚拟机安装windows2012和虚拟机安装国产系统deepin 一.安装windows20121.安装VMWare虚拟机2.1.注意点一:VMWare虚拟网卡2.2.注意点二:配置虚拟网络编辑器3.安装配置Windows Server 2012 R2 二.虚拟机安装deepin1.deepin官网下载ios镜像2.deepin下载合适的…

Webpack基础使用

目录 一.什么是Webpack 二.为什么要使用Webpack 三.Webpack的使用 1.下载yarn包管理器 2.Webpack的安装 3.Webpack的简单使用 4.效果 四.Webpack打包流程 一.什么是Webpack Webpack是一个静态模块打包工具 二.为什么要使用Webpack 在开发中,我们常常会遇到…

Python中NumPy详解

文章目录 NumPyNumPy介绍导入NumPyNumPy数组序列生成数组函数生成数组range,arange,linspace 其他常用函数 N维数组的属性NumPy数组的运算向量运算算数运算逐元素运算、点乘运算 操作数组元素索引访问数组切片访问数组转置与展平 NumPy的广播NumPy的高级…

ISP 状态机轮转和bubble恢复机制

1 ISP的中断类型 ISP中断类型 SOF: 一帧图像数据开始传输 EOF: 一帧图像数据传输完成 REG_UPDATE: ISP寄存器更新完成(每个reg group都有独立的这个中断) EPOCH: ISP某一行结尾(默认20)就会产生此中断 BUFFER DONE: 一帧图像数据ISP完全写到DDR了 2 ISP驱动状态机 通过camer…

看图学源码之FutureTask

RunnableFuture 源码学习: 成员变量 任务的运行状态的转化 package java.util.concurrent; import java.util.concurrent.locks.LockSupport;/**可取消的异步计算。该类提供了Future的基本实现,包括启动和取消计算的方法,查询计算是否完成以…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端,EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法,FreeRedis和CsRedis算是近亲(都是GitHub中账号为2881099下的开源项目),因此其用法特别相似。FreeRedis的主要…

WT2605C高品质音频蓝牙语音芯片:外接功放实现双声道DAC输出的优势

在音频处理领域,双声道DAC输出能够提供更为清晰、逼真的音效,增强用户的听觉体验。针对这一需求,唯创知音的WT2605C高品质音频蓝牙语音芯片,通过外接功放实现双声道DAC输出,展现出独特的应用优势。 一、高品质音频处理…

Altium Designer(AD24)新工程复用设计文件图文教程及视频演示

🏡《专栏目录》 目录 1,概述2,复用方法一视频演示2.1,创建工程2.2,复用设计文件 3,复用方法二视频演示4,总结 欢迎点击浏览更多高清视频演示 1,概述 本文简述使用AD软件复用设计文件…

ARM GIC (五)gicv3架构-LPI

在gicv3中,引入了一种新的中断类型。message based interrupts,消息中断。 一、消息中断 外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断。 这样的一个好处是,可以减少中断线的个数。 为了支持消息中断,gicv3,增加了LPI,来支持消息中断。并且…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(一)

社会工程学—世界头号黑客凯文米特尼克在《欺骗的艺术》中曾提到,这是一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段。 SET最常用的攻击方法有:用恶意附件对目标进行 E-mail 钓鱼攻击、Java Applet攻…

分布式任务调度QuartZ框架使用(通过注解使用quartz)

1、Quartz概述 quartz官网文档:http://www.quartz-scheduler.org/ quartz是一个定时调度的框架,属于比较早期的产品,现在市面上流行的xxl-Job,elastic-Job分布式调度框架都是基于该产品。虽然很多人说quartz的使用不是很方便&am…