【MCAL】TC397+EB-tresos之MCU配置实战 - 芯片时钟
本篇文章介绍了在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-tresos:用于生成动态代码,具体工程搭建参考《【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.
欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。
相关文章:
【MCAL】TC397+EB-tresos之MCU配置实战 - 芯片时钟
本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程,主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分,帮助读者了解TC397芯片的时钟树结构,在后续计算配置不同外设模块诸如通信速率,定时器周期等&…...
最新AI系统ChatGPT网站H5系统源码,支持AI绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…...
如何在MAC OS中的XCODE下添加 <bits/stdc++.h>
mac上使用的编译器是Clang,但是没有万能头文件bits/stdc.h\,本文介绍如何添加万能头文件 Xcode 版本:15.1 - 打开应用程序-Xcode-右键显示包内容 Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/includ…...
Maven项目提示Ignored pom.xml问题
1 环境 (1)IDEA开发工具:2022.2.1 (2)JDK:Java17(Spring6要求JDK最低版本是Java17) (3)Spring:6.1.2 (4)Maven 3.8.8 2 …...
SQL学习汇总
数据库将两张没有关联的表进行横向连接数据库将两张表进行横向连接(拼接成一张表的形式显示)_db2 两条记录如果相同就横向显示-CSDN博客 mysql统计某个字段的比例_mysql查询一行某个字段占整个字段sum的比例-CSDN博客 Spark 系列(十二&…...
单片机MCU堆栈概念与区别
C语言中的堆栈是用于存储函数调用、局部变量以及程序执行期间所需的临时数据的内存区域。堆栈由编译器自动管理,是一种后进先出(LIFO)的数据结构。堆栈空间大小指的是分配给堆栈的内存空间大小,它限制了函数调用和局部变量的深度和…...
C#中使用is关键字检查对象是否与给定类型兼容
目录 一、定义 二、示例 三、生成 在程序的开发过程中经常会使用类型转换,如果类型转换不成功则会出现异常,从抛出异常到捕获并处理异常,无形中增加了系统的开销,而且太过频繁地处理异常还会严重地影响系统的稳定性。is关键字可…...
AI时代下,如何看待“算法利维坦”?
ChatGPT的浪潮从2022年袭来后,至今热度不减,呈现出蓬勃发展的趋势。AI家居、医疗、教育、金融、公益、农业、艺术......AI真的已经走进了生活的方方面面,我们仿佛已经进入了AI时代,势不可挡。人工智能水平如此之高,不禁…...
Linux上管理不同版本的 JDK
当在 Linux 上管理不同版本的 JDK 时,使用 yum 和 dnf 可以方便地安装和切换不同的 JDK 版本。本文将介绍如何通过这两个包管理工具安装 JDK 1.8 和 JDK 11,并利用软连接动态关联这些版本。 安装 JDK 1.8 和 JDK 11 使用 yum 安装 JDK 1.8 打开终端并…...
直方图与均衡化
直方图 统计图像中相同像素点的数量。 使用cv2.calcHist(images, channels, mask, histSize, ranges)函数 images:原图像图像格式为uint8或float32,当传入函数时应用[]括起来,例如[img]。 channels:同样用中括号括起来ÿ…...
Java——猫猫图鉴微信小程序(前后端分离版)
目录 一、开源项目 二、项目来源 三、使用框架 四、小程序功能 1、用户功能 2、管理员功能 五、使用docker快速部署 六、更新信息 审核说明 一、开源项目 猫咪信息点-ruoyi-cat: 1、一直想做点项目进行学习与练手,所以做了一个对自己来说可以完成的…...
PiflowX组件-ReadFromKafka
ReadFromKafka组件 组件说明 从kafka中读取数据。 计算引擎 flink 有界性 Unbounded 组件分组 kafka 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_hostKAFKA_HOST“”无是逗号分隔的Ka…...
Ubuntu 安装MySQL以及基本使用
前言 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分安装。它使用关系数据库和SQL(结构化查询语言)来管理其数据。 安装…...
基于Freeswitch实现的Volte网视频通知应用
现在运营商的Volte网络已经很好的支持视频通话了,因此在原来的电话语音通知的基础上,可以更进一步实现视频的通知,让用户有更好的体验,本文就从技术角度,基于Freeswitch来实现此类应用(本文假设读者已对Fre…...
怎么实现Servlet的自动加载
在实际开发时,有时候会希望某些Servlet程序可以在Tomcat启动时随即启动。但在默认情况下,第一次访问servlet的时候,才创建servlet对象。 如果servlet构造函数里面的代码或者init方法里面的代码比较多,就会导致用户第一次访问serv…...
15. Mysql 变量的使用
目录 变量的概述自定义变量系统变量查看系统变量系统变量赋值 局部变量总结参考资料 变量的概述 MySQL支持不同类型的变量,包括自定义变量、系统变量和局部变量。自定义变量是在会话中定义的变量,用于存储临时数据。系统变量是MySQL服务器提供的全局变量…...
为什么ChatGPT采用SSE协议而不是Websocket?
在探索ChatGPT的使用过程中,我们发现GPT采用了流式数据返回的方式。理论上,这种情况可以通过全双工通信协议实现持久化连接,或者依赖于基于EventStream的事件流。然而,ChatGPT选择了后者,也就是本文即将深入探讨的SSE&…...
Elasticsearch:使用 ELSER v2 文本扩展进行语义搜索
Elastic 提供了一个强大的 ELSER 供我们进行语义搜索。ELSER 是一种稀疏向量的搜索方法。我们无需对它做任何的微调及训练。它是一种 out-of-domain 的模型。目前它仅对英文进行支持。希望将来它能对其它的语言支持的更好。更多关于 ELSER 的知识,请参阅文章 “Elas…...
Matlab:BP神经网络算法,二叉决策树
1、BP神经网络算法 (1)步骤 1.准备训练数据和目标值 2.创建并配置BP神经网络模型 3.训练BP神经网络模型 4.用BP神经网络模型预测数据 例:某企业第一年度营业额为132468,第二年度为158948,第三年度为183737,预测第四年度的营…...
Python实现员工管理系统(Django页面版 ) 七
各位小伙伴们好久不见,2024年即将到来,小编在这里提前祝大家新的一年快快乐乐,能够事业有成,学习顺心,家庭和睦,事事顺利。 今天我们本篇要实现的是一个登录界面的实现,其实登录界面的实现看着挺…...
听GPT 讲Rust源代码--src/tools(34)
File: rust/src/tools/clippy/clippy_lints/src/collection_is_never_read.rs 文件"collection_is_never_read.rs"位于Rust源代码中的clippy_lints工具中,其作用是检查在集合类型(如Vec、HashMap等)的实例上执行的操作是否被忽略了…...
k8s的陈述式资源管理(命令行操作)
(一)k8s的陈述式资源管理 1、命令行:kubectl命令行工具——用于一般的资源管理 (1)优点:90%以上ce场景都可以满足 (2)特点:对资源的增、删、查比较方便,对…...
uniapp uview裁剪组件源码修改(u-avatar-cropper),裁出可自定义固定大小图片
u-avatar-cropper修改后 <template><view class"index"><!-- {{userinfo}} --><view class"top"><view class"bg"><image src"../../static/electronic_card/bg.png"></image></view&g…...
【机器学习前置知识】Beta分布
Beta分布与二项分布的关系 Beta分布与二项分布密切相关,由二项分布扩展而来,它是用来描述一个连续型随机变量出现的概率的概率密度分布,表示为 X X X~ B e t a ( a , b ) Beta(a,b) Beta(a,b) , a 、 b a、b a、b 是形状参数。Beta分布本质上也是一个概率密度函数,只是这…...
Notepad++批量更改文件编码格式及文档格式
背景: 在项目中遇到Windows平台VS的MSVC编译不识别Unix下UTF-8编码导致的编译失败问题。需要将Unix下的UTF-8转为UTF-8-BOM格式。网上找了些方式,之后又深入探究了下文档转换的可能性,共享给大家。(当然Windows和Unix平台代码格式…...
Linux驱动开发学习笔记6《蜂鸣器实验》
目录 一、蜂鸣器驱动原理 二、硬件原理分析 三、实验程序编写 1、 修改设备树文件 (1)添加pinctrl节点 (2)添加BEEP设备节点 (3)检查PIN 是否被其他外设使用 2、蜂鸣器驱动程序编写 3、编写测试AP…...
鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化
鸿蒙(HarmonyOS 3.1) DevEco Studio 3.1开发环境汉化 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、设置过程 打开IDE,在第一个菜单File 中找到Settings...菜单 在Setting...中找到Plugins…...
毫米波雷达:从 3D 走向 4D
1 毫米波雷达已广泛应用于汽车 ADAS 系统 汽车智能驾驶需要感知层、决策层、执行层三大核心系统的高效配合,其中感知层通过传感器探知周围的环境。汽车智能驾驶感知层将真实世界的视觉、物理、事件等信息转变成数字信号,为车辆了解周边环境、制定驾驶操…...
CENTOS docker拉取私服镜像
概述 docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker镜像的拉取。 centos6版本太老,docker的使用过程中问题较多,centos7相对简单容易。 本文档主要介绍centos系统安装docker和拉取docker私…...
【前端面经】即时设计
目录 前言一面git 常见命令跨窗口通信vue 响应式原理发布订阅模式翻转二叉树Promise.all()扁平化数组面试官建议 二面Event Loop 原理Promise 相关css 描边方式requestAnimationReact 18 新特性JSX 相关react 输出两次函数式编程React 批处理机制http请求头有哪些本地存储性能优…...
php动态网站开发说课/百度推广新手入门
答:请参考这个网址:https://docs.microsoft.com/zh-cn/office/vba/access/concepts/database-programming-with-vba/database-programming-with-vba,它提供了一个使用 VBA 连接 Access 数据库的教程。...
怎样跟网站做优化呢/腾讯nba新闻
数控车床操作方法与应用 数控车床、车削中心,是一种高精度、高效率的自动化机床。配备多工位刀塔或动力刀塔,机床就具有广泛的加工工艺性能,可加工直线圆柱、斜线圆柱、圆弧和各种螺纹、槽、蜗杆等复杂工件,具有直线插补、圆弧插…...
阅读网站怎么做/头条新闻最新消息
1.21 简单的将书上代码敲了一遍。 非常顺利就过了。 1.22 就悲剧了。 先按书本的意思。代码非常快就写完了。但计算的时间在机子上漂浮不定。 3-5倍之间。 代码例如以下: (define (search-for-primes start end count) (define (timed-prime-test n)(newline) …...
做网站个体户经营范围/百度知道网址
介绍: MongoDB是一个基于分布式文件存储的数据库。高性能,开源,无模式的文档型数据库,为WEB应用提供可扩展的高性能数据存储,是当前NoSql数据库中比较热门的一种,由C语言编写。 MongoDB是一个介于关系数据库…...
Dell网站建设建议/简述什么是网络营销
在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合。 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存…...
八大处做双眼预约网站/app开发公司排名
你还在为了Word、Excel、PDF、CAD等文档格式转换而发愁吗? 你是否在寻找一款能够在应用程序中文档管理的工具呢? Aspose——支持100多种文件格式创建、编辑、转换和打印! 往下看,找一找哪款产品满足您的开发需求~ ▼▼▼▼▼ ★…...