Autosar MCAL-ADC详解(二)-基于Tc27x的cfg软件

article/2025/10/11 8:51:50

文章目录

  • 前言
  • AdcHwUnit
    • AdcGroup
      • Channel Emux Select
      • Group Access Mode
        • 配置
        • 结果指针初始化
        • 结果访问
        • 读取buffer中的结果
      • Group Buffer Marker
      • Group Conversion Mode
      • Group Id
      • Group Priority
      • Group Replacement
      • Group Request Source
      • AdcGroupTriggSrc
      • AdcHwTrigSignal
      • Hw Gate Signal
      • AdcStreamingBufferMode
      • AdcStreamingNumSamples
      • Group Definition
  • AdcGeneral
    • AdcEnableStartStopGroupApi
    • AdcPriorityImplementation
    • AdcReadGroupApi
    • AdcResultAlignment
  • 实际使用示例
    • 初始化
    • 循环开始Group转换
    • 通过buffer读取转换结果
  • 总结

前言

上一篇关于ADC的文章介绍了AdcChannel的配置Autosar MCAL-ADC详解(一)-基于Tc27x的cfg软件,本文继续介绍Autosar ADC的其他配置项。

AdcHwUnit

AdcGroup

AdcGroup也是Autosar规范中的配置项,传送门,属于AdcHwUnit的子配置项。该Group并不是芯片硬件中的Group,Autosar AdcGroup中包含了AdcHwUnit定义的AdcChannel,Adc的转换模式,触发方式等。

Channel Emux Select

该配置是外部输入信号作为扩展的ADC通道,可以映射到AdcChannel上,作为外部多通道转换。具体可以参考芯片手册,目前没有用到。

Group Access Mode

该配置项是Autosar定义的标准配置,有single和streaming两种模式。


streaming模式不允许在one-shot模式下软件触发时使用

single模式:直接访问

streaming模式:缓存访问

Autosar标准中给的示例:

配置


Group1包含2个通道CH0和CH1,结果存放在指针G1_ResultPtr中,访问模式为streaming,每个通道采样缓存大小为3
Group2包含2个通道CH2,结果存放在指针G2_ResultPtr中,访问模式为streaming,每个通道采样缓存大小为2
Group3包含2个通道CH3,结果存放在指针G3_ResultPtr中.访问模式为single,每个通道采样缓存大小为1,即不缓存。

结果指针初始化


使用API函数Adc_SetupResultBuffer初始化结果指针,该函数初始化结果指针以指向指定的应用程序结果缓冲区

结果访问


调用Adc_GetStreamLastPointer来访问结果缓冲区中最新转换轮的结果

读取buffer中的结果


调用Adc_ReadGroup,它将结果从结果缓冲区复制到可选的读缓冲区
上面这些数组不是从0开始的,不是表示C语言数组,这里应该只是一个示例,G1读取每个通道buffer2的数据,G2和G3读取每个通道buffer1的数据(G3只有一个buffer,实际没有缓存)

在Tc27x系列SIP包MCAL中,没有实现该功能(c代码中没有定义streaming模式)。只有single模式。

Group Buffer Marker

定义每个通道的buffer,与streaming模式一起使用。
cfg中配置Group Access Mode和Group Buffer Marker:

Group Conversion Mode

该配置项是Autosar定义的标准配置,有ONESHOT和CONTINUOUS两种模式。

ONESHOT:触发一次,转换一次

CONTINUOUS:触发一次后连续转换,不需要再触发

Autosar标准中定义:


注意:连续转换模式只能在软件触发的组中使用

Autosar标准中给的示例:

例1:连续转换模式配置了包含通道[CH0, CH1, CH2, CH3, CH4]的通道组。完成每次扫描后,调用notification(如果启用)。然后会自动启动新的扫描。

例2:以One-Shot模式配置了包含通道[CH0, CH1, CH2, CH3, CH4]的通道组。完成扫描后,调用notification(如果启用)。

例3:连续转换模式配置了包含通道[CH3]的通道组。完成每次扫描后,调用notification(如果启用)。然后会自动启动新的扫描。

例4:以OneShot转换模式配置包含通道[CH4]的通道组。完成扫描后,调用notification(如果启用)。


cfg中配置转换模式:

Group Id

该配置项也是Autosar标准配置。

组的ID号。这个参数是要在API上使用的符号名称。这个符号名称允许访问通道组数据。

该值将分配给AdcGroup容器shortName派生的符号名。
每个ADC Hw单元的ID范围:

ADC0:0至31

ADC1:32至63

ADC2:64至95

ADC3:96至127

ADC4:128至159

ADC5:160至191

ADC6:192至223

ADC7:224至255

ADC8:256至287

ADC9:288至319

ADC10:320至351

注意:该值将由工具自动生成,用户应使用符号名称(即AdcGroup容器名称)引用组。

cfg中配置Group Id:

Group Priority

该配置项也是Autosar标准配置。

cfg中此参数仅在考虑HW_SW_PRIORITY时有效(在AdcGeneral中配置)。
最大值限制为254,因为优先级255被分配给带有HW触发源的Adc channel group。该配置非寄存器实现,应该由软件实现。

cfg中配置Group Priority:

Group Replacement

该配置项也是Autosar标准配置。


替换机制,Group转换过程中可以被具有更高优先级的Group中断。

ADC_GROUP_REPL_ABORT_RESTART:如果一个Group被更高优先级的Group中断,则在Group级别上使用中止/重启机制。在高优先级组转换完成后,中断的Group(所有Group通道)的完整转换循环将重新启动。如果Group配置为streaming模式,则只丢弃中断转换轮的结果。已经写入结果缓冲区的以前转换轮的结果不受影响。
ADC_GROUP_REPL_SUSPEND_RESUME:挂起/恢复机制用于Group优先级,如果一个Group被更高优先级的Group中断。中断Group的转换轮(所有Group通道的转换)在高优先级Group转换完成后完成。如果组配置为streaming模式模式,则只丢弃中断转换轮的结果。已经写入结果缓冲区的以前转换轮的结果不受影响。

目前cfg只支持第一种,也是软件实现的。

cfg中配置Group Replacement:

Group Request Source

该配置项不是Autoasr的标准配置,芯片手册中定义的请求源:

•仲裁槽0:Group Queued source,8级序列的任意顺序

•仲裁槽1:Group Scan source,组内定义顺序的序列
•仲裁槽2: Background Scan source,定义顺序的序列,所有组
•最后一个仲裁槽:Synchronization source,来自另一个ADC内核的同步转换请求(总是在同步从内核中以最高优先级处理)


与cfg中的对应:


REQSRC0_8STG_QUE对应Group Queued source,REQSRC1_NCH_SCAN对应Group Scan source,REQSRC2_BGND_SCAN对应Background Scan source,在寄存器中有GxARBPR.PRIO0-2设置请求源优先级,GxARBPR.ASENy设置是否使能对应的slot.

AdcGroupTriggSrc


ADC_TRIGG_SRC_HW:硬件触发Group转换

ADC_TRIGG_SRC_SW:软件API触发Group转换

AdcGroupConvMode:对于连续转换模式,触发源HW不可用

cfg中配置:

AdcHwTrigSignal


只有在AdcGroupTriggSrc配置为ADC_TRIGG_SRC_HW时才有效
ADC_HW_TRIG_BOTH_EDGES:在硬件触发信号的两边反应(仅当ADC硬件支持时)。

ADC_HW_TRIG_FALLING_EDGE:在硬件触发信号的下降边缘上做出反应(仅当ADC硬件支持时)。

ADC_HW_TRIG_RISING_EDGE:在硬件触发信号的上升边缘上进行响应(仅当ADC硬件支持时)。

此处我们配置的SW触发,不需要配置该项。

Hw Gate Signal

此处我们没有用到HW Request source,选择NONE。

AdcStreamingBufferMode

该配置项是Autosar标准配置


将流缓冲区配置为“线性缓冲区”(即,一旦流缓冲区满,ADC驱动程序就会停止转换)或“环形缓冲区”(如果到达流缓冲区的末端,则环绕)。
该配置项需要与前面的Group Access Mode配合使用,在前面我们没有选择streaming模式,此处选择Linear模式。

cfg配置:

AdcStreamingNumSamples

该配置项是Autosar标准配置


在streaming访问模式下,每个通道要获取的ADC值的数量

注意:在single access mode下,该参数取值为1,因为每个通道只处理一个采样值。
我们之前配置的Group Access Mode为single access mode,此处只能配置为1.

cfg配置:

Group Definition

定义Group中包含的Channel.

AdcGeneral

该配置是Autosar标准配置,本文只列出关键几个配置项

AdcEnableStartStopGroupApi

使能该API函数实现Group转换

true:可以使用Adc_StartGroupConversion()和Adc_StopGroupConversion()。

false:不能使用Adc_StartGroupConversion()和Adc_StopGroupConversion()。
cfg配置:

AdcPriorityImplementation


确定转换请求的优先级机制是否可用,如果可用,则确定优先级机制的类型。该选择适用于具有触发源软件和触发源硬件的组。可以选择两种类型的优先级机制。硬件优先级机制(AdcPriorityHw)使用ADC硬件特性对软件转换请求和具有触发源硬件的组的硬件触发信号进行优先级排序。硬件和软件混合优先级机制(AdcPriorityHwSw)使用ADC硬件特性对具有触发器源硬件的组进行ADC硬件触发器的优先级排序,并使用软件实现的优先级机制对具有触发器源软件的组进行优先级排序。软件触发组的组优先级通常配置为低于硬件触发组的组优先级级别。

此处我们主要使用软件触发,选择AdcPriorityHwSw

cfg配置:

AdcReadGroupApi

使能该API来获取Group中的转换结果


cfg中配置:

AdcResultAlignment

选择数据对齐方式,左对齐或右对齐


右对齐(right-alignment ),即向右侧LSB为对齐;

左对齐(left alignment ),即向左侧MSB位对齐
例如十位数据右对齐:


左对齐:


cfg中配置:

实际使用示例

初始化

使用Adc_SetupResultBuffer函数设置Group result buffer

** Syntax           : Std_ReturnType Adc_SetupResultBuffer                    **
**                    (                                                       **
**                      Adc_GroupType Group,                                  **
**                      Adc_ValueGroupType* DataBufferPtr                     **
**                    )                                                       **

输入参数为Group id和result buffer(有多少通道就设置多少数组长度)

循环开始Group转换

使用Adc_StartGroupConversion函数开始Group转换,该函数周期性调用。

通过buffer读取转换结果

转换完成的数据保存在DataBufferPtr中,读取该指针的数据即可获取转换结果。也可以通过Adc_ReadGroup函数获取Group转换结果。

规范中给的示例读取流程:

总结

以上关于ADC的配置及使用就介绍完了。后面介绍SPI的配置和使用.


参考资料:

Infineon-TC27x_D-step-UM-v02_02-EN.pdf

Infineon-TC27xDC-DataSheet-v01_00-EN.pdf

AURIX™公开课第15讲-逐次逼近模数转换器SAR ADC



若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~

你的鼓励是对小弟的最大支持~~~

建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新


http://chatgpt.dhexx.cn/article/4bL6gafp.shtml

相关文章

TC397 EB MCAL开发从0开始系列 之 [1.0]-MCAL结构及Demo介绍

MCAL结构介绍MCAL结构MCAL模块 MCAL安装包说明DemoWorkspaceMclsar EB 环境配置EB环境安装EB新建工程 ->返回总目录-< MCAL结构介绍 MCAL结构 MCAL是 Microcontroller Abstraction Layer&#xff08;微控制器抽象层)的简写&#xff0c;是AuoSar架构中的概念&#xff0…

MCAL中ADC的配置

根据硬件资源分配以及各信号的应用对ADC模块进行配置,使能正确采集信号,并提供转换结果。 1. ADC模块接口配置 使能AdcHwTriggerApi:硬件触发ADC转换,根据硬件需求,部分Channel的转换是通过硬件信号触发转换,因此需要使能该API。 使能AdcEnableStartStopGroupApi:软件…

AurixDevStudio集成MCAL

这是Tricore MCAL安装路径 打开ADS新建一个AURIX Project 我手上的是龙邱的TC377最小系统, 就这样选 理解下第一个选项 新建好的基础工程是这个样子 删除掉Library文件夹, 因为我们这里要使用的MCAL而不是iLLD库(虽然它们实现的功能大体相同) 在工程里新建一个文件夹为Mca…

AUTOSAR 学习笔记(一):NXP S32K14X AUTOSAR MCAL 软件下载及安装

AUTOSAR学习笔记(一)&#xff1a;NXP S32K14X AUTOSAR MCAL 软件下载及安装 目录 AUTOSAR学习笔记(一)&#xff1a;NXP S32K14X AUTOSAR MCAL 软件下载及安装1.下载MCAL 软件2、下载 AUTOSAR EB tresos 软件3、下载AUTOSAR 4.0 OS4、安装 EB tresos5、安装 MCAL6、安装 AUTOSAR…

[ 搞一点AutoSar ]基于EB的MCAL-GPT全模块配置与解析

笔者搞了快一个星期的GPT的测试了&#xff0c;从配置到代码一遍又一遍的操作和阅读。觉得有必要把学习成功稍微总结一下了&#xff1b;学AUTOSAR最后还是得熟悉代码&#xff0c;毕竟AUTOSAR只是目的&#xff0c;而代码才是实现的手段。中间的逻辑关系看代码一目了然&#xff1b…

【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 什么是FullCAN和BasicCAN 1.1 FullCAN / Basic CAN HRH区别 1.2 FullCAN / Basic CAN HTH区别 1.3 FullCAN和Basic CAN存在的原因 1.4 FullCAN/Basic CAN HRH/HTH如何选择 2 如何配置FullCAN和BasicCAN 3 来自CAN Dr…

MCAL MCU Module详解和配置说明

关注“嵌入式软件实战派”回复“AUTOSAR”获得更多实战教程。 以下内容包含&#xff1a;基本概念、模块依赖、应用时序、参数配置实践讲解&#xff0c;以及ECUM对其引用等。 1. 基本概念 描述了MCU&#xff08;Microcontroller Unit&#xff09; 驱动程序的功能和 API。 MCU 驱…

搞一点AutoSar--MCAL SPI-1

整理了一点SPI的资料 目录 1、SPI模块简介2、SPI驱动模块API的使用方法3、SPI通信主要概念4、选择SPI通道缓存&#xff08;Buffer&#xff09;位置5、SPI驱动模块API调用流程 1、SPI模块简介 图1 MCAL 4个驱动组与微控制器内核和外设的映射关系SPI属于MCAL模块中的通信驱动组&…

【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 关键字定义 2 Maibox与Hardware Object之间的关系 2.1 接收L-PDU 2.2 发送L-PDU 3 HOH&#xff0c;HRH&#xff0c;HTH&#xff0c;Hardware Object之间的关系 4 Message buffer(MB)结构 5 结尾 1 关键字定义 Mailb…

图解AUTOSAR(五)——微控制器抽象层(MCAL)

微控制器抽象层位于AUTOSAR分层模型中BSW最底层&#xff0c;包含内部驱动&#xff0c;可以直接访问微控制器和片内外设。更进一步地&#xff0c;MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分&#xff0c;各部分又由具体的与微控制器硬件相对应的驱动模块…

MCAL架构

MCAL位于AUTOSAR软件架构中基本软件&#xff08;BSW&#xff09;的底层&#xff0c;是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件&#xff08;如ECU抽象层、系统服务层等&#xff09;独立于MCU硬件平台&#xff0c;保证上层软件的标准化和通用性。…

AutoSar之微控制器抽象层MCAL

微控制器抽象层位于AUTOSAR BSW的最底层&#xff0c;包含内部驱动&#xff0c;可直接访问微控制器和外设芯片。从具体应用来看&#xff0c;MCAL主要包括微控制器驱动、存储器驱动、通信驱动和输入输出驱动四个部分&#xff0c;各部分又由具体的与微控制器硬件相对应的驱动模块组…

MCAL介绍及Module Plugin开发流程总结

Mcal–微控制器抽象层位于AUTOSAR分层模型中BSW最底层&#xff0c;包含内部驱动&#xff0c;可以直接访问微控制器和片内外设。 MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分&#xff0c;各部分又由具体的与微控制器硬件相对应的驱动模块组成。如图所示…

Autosar MCAL软件架构基本概念

MCAL架构介绍 Autosar整体架构图如下所示&#xff1a; MCAL是MicroController Abstraction Layer&#xff08;微控制器抽象层&#xff09;的缩写。如下图所示&#xff0c;MCAL位于AUTOSAR软件架构中基本软件&#xff08;Basic Software&#xff0c;BSW&#xff09;的底层&…

【Autosar】学习总结-MCAL

一、简介 MCAL&#xff1a;微控制器抽象层&#xff1b;位于BSW层中的最下层&#xff1b; MCAL细分&#xff0c;可将驱动分为&#xff1a;微控制器驱动、存储器驱动、通信驱动、IO驱动&#xff1a; 二、MCAL的配置&#xff08;EB-Tresos&#xff09; 1.PORT 我理解的PORT&…

Object数据转map类型

最近 因为调用接口 返回数据 原本项目中是用List<Map<String, Object>> a 接收的 等于说我只能获取到 Map m1 a.get(0); 到第一层的数据 m1.get(“HttpCode”)的数据 然后就是objcet的数据了 无法直接获取到 之前在网上找了好多 什么直接转成jsonObject因为格式的…

Javascript Object和Map之间的转换

简单的区分Map和Object Map是ES6退出的一个类型&#xff0c;特点&#xff1a;任何值都可作为属性名 Object特点&#xff1a;属性名只能是字符串(一开始我也不信&#xff0c;测试后才发现的) 代码图片 创建一个map类型 new Map([[key, value],[key1, value1] ])简单的介绍下面…

Object 转Map,Map转Object方式总结

商品业务对象定义&#xff1a;Product Product product new Product(); product.setId(1L); product.setName("爱他美") product.setProductDt("2022-03-16") 第一种&#xff1a;通过Alibaba Fastjson实现&#xff1a; pom.xml 文件依赖 <dependen…

使用PyQt打包命令pyinstall的几个问题

**问题1&#xff1a;**打包后无demo.spec文件 在windows下使用cmd界面打包时&#xff0c;可以将路径设置到目标文件目录&#xff0c;这样会生成demo.spec文件&#xff0c;方便后期改正软件。 问题2&#xff1a;打包好后提示如下错误&#xff1a; 解决办法&#xff1a;在demo.…

PyCharm打包失败及Pyinstall无法安装问题的解决

问题描述 Python的工程很多情况下需要打包成EXE文件&#xff0c;通过pyinstaller的工具进行打包&#xff0c;首先需 要安装PyInstaller的工具&#xff0c;然后再通过命令行进行打包&#xff0c;安装 PyInstaller 模块与安装其他 Python 模块一样&#xff0c;使用 pip 命令安装…