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

前言

上一篇关于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,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
AUTOSARAutomotive Open System Architecture)是一种用于汽车电子系统开发的开放式系统架构。MCAL(Microcontroller Abstraction Layer)是AUTOSAR架构中的一部分,用于抽象底层微控制器硬件的接口和功能。MCAL提供了一组标准化的API(Application Programming Interface),使上层应用程序可以与不同的微控制器硬件进行交互,而不需要关注底层硬件的细节。 在AUTOSAR MCAL中,Fls_Erase函数用于擦除一个或多个Sectors。它的参数包括起始地址和长度,根据这些信息,函数会计算出需要擦除的Sectors,并一次性擦除它们。需要注意的是,起始地址和长度的计算需要避免误擦,确保擦除的范围正确。 另外,AUTOSAR MCAL中的异步请求任务(如读、写、擦除、比较)是由主函数来执行的。主函数需要周期性地被调用,如果有任务需要处理,则执行相应的任务。而获取任务结果的函数用于获取最近一次任务的结果状态,但只能获取最后一个读任务的结果,无法获取之前的写任务的结果。 总之,AUTOSAR MCAL是一种用于汽车电子系统开发的开放式系统架构,其中的MCAL模块提供了对底层微控制器硬件的抽象和标准化接口。Fls_Erase函数用于擦除Sectors,而异步请求任务的执行和结果获取则由主函数来处理。 #### 引用[.reference_title] - *1* *2* *3* [AUTOSAR MCAL详解:FLS](https://blog.csdn.net/jsls135/article/details/115231597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞哥哥s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值