[AutoSar] VADC 模块配置及使用说明(一)

关键词

嵌入式、C语言、autosar

平台说明

项目Value
OSautosar OS ,
芯片厂商Infineon,TC234
编程语言C,C++
编译器tasking

在这里插入图片描述
>>>>>回到总目录<<<<<<

背景

介绍了基于TC234L 芯片和autosar 的VADC模块及其使用。

配置项

1.配置项:AdcGroupAccessMode :ADC组数据模式配置

配置要点:
在这里插入图片描述
访问方式的类型来组转换结果。
在单访问模式下,用户只能拥有组通道的一组最新转换结果。在流访问模式下,用户可以为组通道配置AdcStreamingNumSamples转换结果集。如果AdcNonAutosarDmaResultHandling设置为False (STD_OFF),则此参数很重要。如果AdcGroupTriggSrc为ADC_TRIGG_SRC_SW, AdcGroupConvMode为ADC_CONV_MODE_ONESHOT,则ADC_ACCESS_MODE_STREAMING模式不起作用。

依赖的配置项:AdcGroupTriggSrc
AdcGroupConvMode
AdcNonAutosarDmaResultHandling

2.配置项:AdcAnChannelNum:VADC通道配置

在这里插入图片描述
说明:TC234L(非ADAS)芯片VADC共有两个内核,每个内核分别有12个AN输入通道,即内核0有011(对应通道号为0到11),内核1有011(对应通道号为16到27)。

3.配置项:AdcHwTrigTimer: 硬件触发定时器

说明:由于VADC HW单元中没有嵌入式计时器,所以这个参数是不可配置的。

4.配置项:AdcGroupRequestSource:组请求源

REQSRC0_8STG_QUE:队列模式
REQSRC1_NCH_SCAN:通道扫描模式
REQSRC2_BGND_SCAN:背景扫描模式
REQSRC3_8STG_QUE:队列模式,要用这个模式,AdcArbitrationRoundLength项就应该配置为ARBITRATION_SLOTS_8

5.配置项:AdcGroupId

ADC0: 0 to 31
ADC1: 32 to 63
从生成的代码可以看出来

6.AdcNotification

中断通知函数名称

7.AdcGtmTimerPeriod

使用TOM模块触发ADC转换时,需要在这里写触发时间,注意这里的单位是毫秒,且可以为浮点数。例如要50us触发一次则填写0.05。

8.硬件触发信号配置

在这里插入图片描述

9. AdcResultAlignment

结果对齐模式,对ADC结果寄存器的值的位置进行确定,左对齐和右对齐两种可选,推荐使用右对齐。
在这里插入图片描述

10.通用配置

其中配置项:AdcAnalogClockDivider、AdcDigitalArbiterClockDivider决定了转换时间。
AdcAnalogClockDivider:配置了ADCI时钟分频系数
AdcDigitalArbiterClockDivider:仲裁时间分频系数 定义了fADCD 值0 最小仲裁时间
AdcGlobChSampleTime : 通道转换时间,即STC的值
Standard conversions: tCN = (2 + STC + N + DM + PC) × tADCI + 2 × tADC
fast compare mode: tCN = (2 + STC + 2) × tADCI + 2 × tADC

11.中断配置、触发配置

见IRQ、MCU、OS模块

12.手动添加代码

在Default_Init_Task中添加代码

/*设置GTM全局触发*/
  Gtm_SetTomHostTrigger(1,0);
  Gtm_SetTomHostTrigger(1,1);
  Gtm_SetTomHostTrigger(0,GTM_TGC0);

  /*设置ADC转换结果buffer*/
  AdcBufferSetupStatus[0] = Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_0,\
		  ADC_HW_GRP_RES_Q0);
  AdcBufferSetupStatus[2] = Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_2,\
		  ADC_HW_GRP_RES_Q2);
  AdcBufferSetupStatus[1] = Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_1,\
		  ADC_HW_GRP_RES_K1);
  AdcBufferSetupStatus[3] = Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_3,\
		  ADC_HW_GRP_RES_K3);

  /*使能ADC组通知*/
  Adc_EnableGroupNotification(AdcConf_AdcGroup_AdcGroup_0);
  Adc_EnableGroupNotification(AdcConf_AdcGroup_AdcGroup_1);
  Adc_EnableGroupNotification(AdcConf_AdcGroup_AdcGroup_2);
  Adc_EnableGroupNotification(AdcConf_AdcGroup_AdcGroup_3);

  /* 使能ADC硬件触发*/
  Adc_EnableHardwareTrigger(AdcConf_AdcGroup_AdcGroup_1);
  Adc_EnableHardwareTrigger(AdcConf_AdcGroup_AdcGroup_2);
  Adc_EnableHardwareTrigger(AdcConf_AdcGroup_AdcGroup_3);
  Adc_EnableHardwareTrigger(AdcConf_AdcGroup_AdcGroup_0);

在runnables中添加代码,将结果读取到目标数组中。

FUNC(void, TestComNvM_CODE) Runnable_AdcTest(void) /* PRQA S 0850 */ /* MD_MSR_19.8 */
{
/**********************************************************************************************************************
 * DO NOT CHANGE THIS COMMENT!           << Start of runnable implementation >>             DO NOT CHANGE THIS COMMENT!
 * Symbol: Runnable_AdcTest
 *********************************************************************************************************************/

		  while( (Adc_GetGroupStatus(AdcConf_AdcGroup_AdcGroup_0)) != ADC_STREAM_COMPLETED);
		  while( (Adc_GetGroupStatus(AdcConf_AdcGroup_AdcGroup_1)) != ADC_STREAM_COMPLETED);
		  while( (Adc_GetGroupStatus(AdcConf_AdcGroup_AdcGroup_2)) != ADC_STREAM_COMPLETED);
		  while( (Adc_GetGroupStatus(AdcConf_AdcGroup_AdcGroup_3)) != ADC_STREAM_COMPLETED);

		  Demo_AdcNoSamp[0] = (Std_ReturnType)Adc_ReadGroup(AdcConf_AdcGroup_AdcGroup_0, &ADC_HW_GRP_RES_Q0[0]);
		  Demo_AdcNoSamp[1] = (Std_ReturnType)Adc_ReadGroup(AdcConf_AdcGroup_AdcGroup_1, &ADC_HW_GRP_RES_K1[0]);
		  Demo_AdcNoSamp[2] = (Std_ReturnType)Adc_ReadGroup(AdcConf_AdcGroup_AdcGroup_2, &ADC_HW_GRP_RES_Q2[0]);
		  Demo_AdcNoSamp[3] = (Std_ReturnType)Adc_ReadGroup(AdcConf_AdcGroup_AdcGroup_3, &ADC_HW_GRP_RES_K3[0]);


/**********************************************************************************************************************
 * DO NOT CHANGE THIS COMMENT!           << End of runnable implementation >>               DO NOT CHANGE THIS COMMENT!
 *********************************************************************************************************************/
}

13./AURIX/Adc/AdcConfigSet/AdcGlobInputClass

配置项对应寄存器
GxICLASS0/1 GLOBICLASSy (y=0~1)
在这里插入图片描述

相同的子项同理

14.ADC硬件配置

在这里插入图片描述

15.通道配置:

在这里插入图片描述

16.组配置:

在这里插入图片描述
在这里插入图片描述

17.AdcGeneral

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附加:若要改变gtm_tom触发时刻,初始化后,可以调用IfxGtm_Tom_Ch_setCompareShadow(uint8 ModuleNo,uint8 ChannelNo,uint16 Sr0Value,uint16 Sr1Value)改变参数值,改变触发时刻。

配置例程

1.添加子项
在这里插入图片描述

4个子项各添加一个

2、鼠标右键创建AdcConfigSet
在这里插入图片描述

创建结果如下:
在这里插入图片描述

3、创建容器Adc硬件单元
在这里插入图片描述

Notice:MCU有多少个ADC内核就创建几个,否则就会报错
4、创建ADC通道配置
在这里插入图片描述

5、创建ADC通道组

在这里插入图片描述

>>>>>回到总目录<<<<<<

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老灰╮(╯-╰)╭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值