上一篇关于ADC的文章介绍了AdcChannel的配置Autosar MCAL-ADC详解(一)-基于Tc27x的cfg软件,本文继续介绍Autosar ADC的其他配置项。
AdcGroup也是Autosar规范中的配置项,传送门,属于AdcHwUnit的子配置项。该Group并不是芯片硬件中的Group,Autosar AdcGroup中包含了AdcHwUnit定义的AdcChannel,Adc的转换模式,触发方式等。
该配置是外部输入信号作为扩展的ADC通道,可以映射到AdcChannel上,作为外部多通道转换。具体可以参考芯片手册,目前没有用到。
该配置项是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来访问结果缓冲区中最新转换轮的结果
调用Adc_ReadGroup,它将结果从结果缓冲区复制到可选的读缓冲区
上面这些数组不是从0开始的,不是表示C语言数组,这里应该只是一个示例,G1读取每个通道buffer2的数据,G2和G3读取每个通道buffer1的数据(G3只有一个buffer,实际没有缓存)
在Tc27x系列SIP包MCAL中,没有实现该功能(c代码中没有定义streaming模式)。只有single模式。
定义每个通道的buffer,与streaming模式一起使用。
cfg中配置Group Access Mode和Group Buffer Marker:
该配置项是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(如果启用)。
该配置项也是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:
该配置项也是Autosar标准配置。
cfg中此参数仅在考虑HW_SW_PRIORITY时有效(在AdcGeneral中配置)。
最大值限制为254,因为优先级255被分配给带有HW触发源的Adc channel group。该配置非寄存器实现,应该由软件实现。
cfg中配置Group Priority:
该配置项也是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:
该配置项不是Autoasr的标准配置,芯片手册中定义的请求源:
•仲裁槽0:Group Queued source,8级序列的任意顺序
•仲裁槽1:Group Scan source,组内定义顺序的序列
•仲裁槽2: Background Scan source,定义顺序的序列,所有组
•最后一个仲裁槽:Synchronization source,来自另一个ADC内核的同步转换请求(总是在同步从内核中以最高优先级处理)
REQSRC0_8STG_QUE对应Group Queued source,REQSRC1_NCH_SCAN对应Group Scan source,REQSRC2_BGND_SCAN对应Background Scan source,在寄存器中有GxARBPR.PRIO0-2设置请求源优先级,GxARBPR.ASENy设置是否使能对应的slot.
ADC_TRIGG_SRC_HW:硬件触发Group转换
ADC_TRIGG_SRC_SW:软件API触发Group转换
AdcGroupConvMode:对于连续转换模式,触发源HW不可用
cfg中配置:
只有在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 Request source,选择NONE。
该配置项是Autosar标准配置
将流缓冲区配置为“线性缓冲区”(即,一旦流缓冲区满,ADC驱动程序就会停止转换)或“环形缓冲区”(如果到达流缓冲区的末端,则环绕)。
该配置项需要与前面的Group Access Mode配合使用,在前面我们没有选择streaming模式,此处选择Linear模式。
cfg配置:
该配置项是Autosar标准配置
在streaming访问模式下,每个通道要获取的ADC值的数量。
注意:在single access mode下,该参数取值为1,因为每个通道只处理一个采样值。
我们之前配置的Group Access Mode为single access mode,此处只能配置为1.
cfg配置:
定义Group中包含的Channel.
该配置是Autosar标准配置,本文只列出关键几个配置项
使能该API函数实现Group转换
true:可以使用Adc_StartGroupConversion()和Adc_StopGroupConversion()。
false:不能使用Adc_StartGroupConversion()和Adc_StopGroupConversion()。
cfg配置:
确定转换请求的优先级机制是否可用,如果可用,则确定优先级机制的类型。该选择适用于具有触发源软件和触发源硬件的组。可以选择两种类型的优先级机制。硬件优先级机制(AdcPriorityHw)使用ADC硬件特性对软件转换请求和具有触发源硬件的组的硬件触发信号进行优先级排序。硬件和软件混合优先级机制(AdcPriorityHwSw)使用ADC硬件特性对具有触发器源硬件的组进行ADC硬件触发器的优先级排序,并使用软件实现的优先级机制对具有触发器源软件的组进行优先级排序。软件触发组的组优先级通常配置为低于硬件触发组的组优先级级别。
此处我们主要使用软件触发,选择AdcPriorityHwSw
cfg配置:
使能该API来获取Group中的转换结果
选择数据对齐方式,左对齐或右对齐
右对齐(right-alignment ),即向右侧LSB为对齐;
左对齐(left alignment ),即向左侧MSB位对齐
例如十位数据右对齐:
使用Adc_SetupResultBuffer函数设置Group result buffer
** Syntax : Std_ReturnType Adc_SetupResultBuffer **
** ( **
** Adc_GroupType Group, **
** Adc_ValueGroupType* DataBufferPtr **
** ) **
输入参数为Group id和result buffer(有多少通道就设置多少数组长度)
使用Adc_StartGroupConversion函数开始Group转换,该函数周期性调用。
转换完成的数据保存在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,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新