目录
- 关键词
- 平台说明
- 背景
- 配置项
- 1.配置项:AdcGroupAccessMode :ADC组数据模式配置
- 2.配置项:AdcAnChannelNum:VADC通道配置
- 3.配置项:AdcHwTrigTimer: 硬件触发定时器
- 4.配置项:AdcGroupRequestSource:组请求源
- 5.配置项:AdcGroupId
- 6.AdcNotification
- 7.AdcGtmTimerPeriod
- 8.硬件触发信号配置
- 9. AdcResultAlignment
- 10.通用配置
- 11.中断配置、触发配置
- 12.手动添加代码
- 13./AURIX/Adc/AdcConfigSet/AdcGlobInputClass
- 14.ADC硬件配置
- 15.通道配置:
- 16.组配置:
- 17.AdcGeneral
- 配置例程
关键词
嵌入式、C语言、autosar
平台说明
项目 | Value |
---|---|
OS | autosar 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通道组