MCAL配置之ADC模块及IO抽象层源码分析

这篇具有很好参考价值的文章主要介绍了MCAL配置之ADC模块及IO抽象层源码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ADC模块是将外部模拟信号转化为芯片内可识别的数字信号的中间模块,与MCU的关联为使用了MCU提供的GTM模块中的TOM/ATOM部分的定时效果。

1 ADC界面分析

在ADC界面中,主要配置界面为General, AdcGlobalInputClass和AdcHwUnit三个选项卡。在General选项卡中,通常会使能AdcErrorDetect、AdcReadGroup、AdcEnableStartStopGroup、AdcHwTrigger等选项。第一项将使能ADC的DET检测功能;第二三项将使能软件触发ADC开始、停止组内AD转换和读取组内转换结果的功能;第三项将使能软件控制硬件触发AD转换的接口。

AdcResultHandlingImplementation选择中断模式处理,在第四章中会讲述OS中配置的具体中断。

AdcResultAlignment指定ADC结果的对其方式,一般以右对齐为主,将数据按字节顺序组合起来即得到正确结果。

AdcMaxChConvTimeCount将指定ADC驱动停止转换时需要将转换器状态变化至idle的最大时间,在此软件中默认值为6000ms。

MCAL配置之ADC模块及IO抽象层源码分析,Autosar架构MCAL配置及相关源码分析,单片机,嵌入式硬件,Powered by 金山文档

在AdcGlobalInputClass选项卡中,定义了AdcGlobalInputClass的两种类型,包含ADC通道转换模式(指定接收信号的噪声滤波模式)、ADC时钟预分频系数、ADC采样时间长度设置(当前采样时间为2 / fADCI)和ADC传播早期采样点的使能(用于衰减同步噪声)四个配置项。理论上两种类型可以配置为不同的性质组合,但由于这里的类型不会被HwUnit中使用,故配置为统一默认选项。

MCAL配置之ADC模块及IO抽象层源码分析,Autosar架构MCAL配置及相关源码分析,单片机,嵌入式硬件,Powered by 金山文档

在AdcHwUnit选项卡中,需要配置所有ADC硬件group的信息。根据硬件原理图的显示,我们需要配置Group0, Group1, Group2和Group8。

MCAL配置之ADC模块及IO抽象层源码分析,Autosar架构MCAL配置及相关源码分析,单片机,嵌入式硬件,Powered by 金山文档

在每一个HwUnit选项卡中,包含了ADC时钟源、预分频系数、通道信息、触发条件等配置选项。在下一节中将结合数据手册和硬件原理图对部分重要选项作详细介绍。

MCAL配置之ADC模块及IO抽象层源码分析,Autosar架构MCAL配置及相关源码分析,单片机,嵌入式硬件,Powered by 金山文档

2 ADC关键配置选项

①AdcHwUnitId

由DataSheet中定义的EVADC管脚复用状态可知AdcHwUnit一共分为0,1,2,3,8,9,10和11几种Group号码,在本项目中仅使用0,1,2和8四个Group号。

②AdcClockSource

指定ADC的时钟源,在Aurix2G中仅能选择系统时钟,与General选项卡中的AdcSystemClock呼应,通过该选项指定系统时钟源。

③AdcChannelId

在每一个Group中需要指定的通道号,该号码需要和硬件原理图上的号码对应起来。

④AdcAnChannelNum

AdcHwUnitId和AdcChannelId共同决定了该参数的配置,格式为GxCHy。

⑤AdcInputClassSelection

指定ADC信号输入类型,可在AdcHwUnitInputClass和AdcGlobalInputClass中选择。此处选择HwUnit中自定义的类型。

⑥AdcGroupAccessMode

当该参数为ADC_ACCESS_MODE_SINGLE时,ADC上层在一次触发后只读取一次结果,当该参数为ADC_ACCESS_MODE_STREAMING时,ADC上层便可在一次触发后可读取多次结果,同时该参数需配合AdcStreamingBufferMode共同使用。本项目中使用ADC_ACCESS_MODE_SINGLE。

⑦AdcGroupConversionMode

该参数代表Adc启动转换的模式,有ONESHOT和CONTINUOUS两种。前者表示转换触发后每个通道仅做一次转换,后者表示转换触发后每个通道可做多次连续的转换。本项目中使用ONESHOT方式。

⑧AdcGroupTriggSrc

有HW和SW两种触发方式,使用HW触发时,只能配合ONESHOT的转换模式,此时若配合定时器则可产生连续采样的效果,一般通过一个二维数组(结果缓存)直接读取硬件触发的转换结果,该二维数组包含了每一个Group中的所有通道结果。使用SW触发时,可配合Adc_StartGroupConversion、Adc_ReadGroup等函数读取转换后的数值。本项目中使用HW触发。

⑨AdcStreamingBufferMode

该参数配合AdcGroupAccessMode为ADC_ACCESS_MODE_STREAMING时使用,软件中会在每个通道中开辟一段空间作为采样空间。当参数为LINEAR时,ADC转换数量等于采样数,当采样数用完后自动停止;当参数为CIRCULAR时,ADC转换不会主动停止,当采样数用完后会从头进行采样并放置,直到调用停止函数。

⑩AdcHwExtTrigSelect

此选项配合AdcGroupTriggSrc为HW方式时使用,指定硬件触发源。

⑪AdcHwTrigSignal

此选项配合AdcGroupTriggSrc为HW方式时使用,指定在哪个信号跳变沿会进行硬件触发。次处选择ADC_HW_TRIG_RISING_EDGE。

⑫GtmTimerUsed

指定使用MCU模块中的哪一个定时器,此处我们使用TOM,在MCU中需要将对应通道配置为ADC的使用方式。

3 MCU关键配置选项

在MCU中需要配置用于ADC转换的GTM时钟,同时,在配置前需要清楚哪些通道可以用来作为该转换使用。

MCAL配置之ADC模块及IO抽象层源码分析,Autosar架构MCAL配置及相关源码分析,单片机,嵌入式硬件,Powered by 金山文档

①McuGtmTomChannelAllocationConf

指定该TOM通道被分配用于ADC转换的时间触发源,故选择GTM_TOM_CHANNEL_USED_BY_ADC。

②McuTomChannelEventHandledByDsadc

指定TOM通道的触发事件将是否被DSADC模块处理,我们使用的转换模块为EVADC,故此项选择为FALSE。

4 OS关键配置选项

根据第一章中对AdcHwUnit部分的分析,四个Group各自需要一个中断关联至硬件触发源,故需要在OS中配置四个ADC中断:ADC0SR0, ADC1SR0, ADC2SR0, ADC8SR0。下图展示的是其中之一的配置,注意需将Address/Vector的选项和ISR的名字保持一致,四个ISR都属于二类中断,优先级保持连续即可。

MCAL配置之ADC模块及IO抽象层源码分析,Autosar架构MCAL配置及相关源码分析,单片机,嵌入式硬件,Powered by 金山文档

5 与IoHwAb层相关的源码分析

ADC部分的IO抽象层源码会通过枚举体定义每个HwUnit和通道信号的名称,在Buffer读取函数中可方便管理。同时,我们需要定义一个GroupType和Channel相关信息的结构体,前者用于设定每个Group的状态,后者用于对接收值做转换管理。最后,定义一个用于管理每个Group中信号值的数组。定义部分源码如下所示:

typedef enum
{
    ADC_VBAT_12V,
    ADC_IG_12V,
    ......
    ADC_PROJ_ID,
    ADC_PCB_TEMP,

    IoHwAb_ADC_Signal_MAX
}IoHwAb_ADC_Signal;

typedef enum
{
    ADC_HWUNIT_0,
    ADC_HWUNIT_1,
    ADC_HWUNIT_2,
    ADC_HWUNIT_8,
    IoHwAb_ADC_HwUnit_MAX
} IoHwAb_ADC_HwUnit;

typedef struct
{
    Adc_GroupType group;
} IoHwAb_ADC_Group_Config;

typedef struct
{
    IoHwAb_ADC_HwUnit hwunit;
    uint8 channel;
    Adc_GroupType  immediateGroup;
    float32 coff;
} IoHwAb_ADC_Channel_Config;

static Adc_ValueGroupType IoHwAb_ADC_Buffer[IoHwAb_ADC_HwUnit_MAX][IOHWAB_ADC_CHANNELS_PER_HWUNIT];

在初始化函数中,会对每一个HwUnit进行结果缓存的初始化,最后打开硬件触发源。之后,IoHwAb_ADC_Buffer数组会被自动更新。

void IoHwAb_ADC_Init(void)
{
    uint8 grp_idx;
    Adc_GroupType adc_group;
    Adc_ValueGroupType* adc_valueGroup;

    for (grp_idx = 0; grp_idx < IoHwAb_ADC_HwUnit_MAX; grp_idx++)
    {
        adc_group = IoHwAb_ADC_Group_Cfg[grp_idx].group;
        adc_valueGroup = &IoHwAb_ADC_Buffer[grp_idx][0];

        /* Initialise the Result buffer for group */
        ret_t[grp_idx] = Adc_SetupResultBuffer(adc_group, adc_valueGroup);

        /* Start the group */
        Adc_EnableHardwareTrigger(adc_group);
    }
}

在缓存读取函数中,会将读取的数字量转换为模拟量。值得注意的是,AD转换的二进制位总共有12bit,故分辨率为1/4095。在硬件部分使用的电压阈值上限为5V,故最终乘以5得到模拟电压。文章来源地址https://www.toymoban.com/news/detail-733898.html

float32 IoHwAb_ADC_GetBufferedValue(IoHwAb_ADC_Signal in_ad)
{    
    IoHwAb_ADC_HwUnit ad_hwunit; 
    uint8 ad_channel;
    uint16 ad_value_raw;
    float32 ad_value;    
    float32 ad_coff;

    ad_hwunit = IoHwAb_ADC_Channel_Cfg[in_ad].hwunit;
    ad_channel = IoHwAb_ADC_Channel_Cfg[in_ad].channel;
    ad_coff = IoHwAb_ADC_Channel_Cfg[in_ad].coff * 4095 / 5;

    ad_value_raw = IoHwAb_ADC_Buffer[ad_hwunit][ad_channel];

    ad_value = (float32)ad_value_raw / (float32)ad_coff;

    return ad_value;
}

到了这里,关于MCAL配置之ADC模块及IO抽象层源码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Autosar MCAL MCU配置时钟-基于cfg

    在Autosar OS中的Counter计数是由STM模块而来,需要在Counter中指定每个tick的 时间 ,但这个时间是根据STM时钟来的,t=1/fstm,并不是指定的时间就是 真的运行时间 ,例如指定的 Seconds per tick 时间为0.00000001,但STM频率为50000000HZ(50MHz),实际执行的时间会是0.00000002,导致os所有认为的

    2023年04月08日
    浏览(80)
  • MCAL中ADC的配置

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

    2024年02月04日
    浏览(27)
  • 一步一步搭建S32K14x的AutoSar项目----MCAL之MCU模块

    1-1、时钟对于任何一款微控制器是很重要的,所以我们首先要了解S32K144的时钟树,才能为后续的MCAL中MCU模块配置做好准备,废话不多说,先上一张图片,聊了解下 对应芯片手册的第27章 Clock Distribution 。 1、SOSC 就是连接外部的高速时钟,我们一般情况下会优先选择它,精准

    2024年01月22日
    浏览(48)
  • AutoSAR配置与实践(深入篇)6.3 COM 整体架构和模块交互

    -返回总目录- 一、COM层主要功能和架构(参考MICROSAR COM Technical Reference CFG5 Version 9.00.01)《TechnicalReference_Com.pdf》 1.1 COM模块的主要功能: 为上层提供信号接口(无符号/有符号) I-PDUs 中信号的打包和解包 处理传输模式 I-PDUs 间传输最小间隔 I-PDU组的通信控制 接收的deadline监控

    2024年02月09日
    浏览(69)
  • Autosar MCAL-S32K324 MCU配置-基于EB

    2023年07月02日
    浏览(66)
  • 【AUTOSAR】RH850(F1KM) MCU PWM配置(MCAL)

    前言 在嵌入式项目中,我们经常需要使用到PWM信号。本文将基于汽车电子AUTOSAR架构下的软件开发方式。以RH850为例进行说明,介绍如何查阅芯片参考文档,并结合项目原理图,使用Davinci工具配置MCAL PWM模块,输出PWM波形。 仅供大家学习参考。 其他MCU的配置方法类似,需要找

    2024年02月13日
    浏览(45)
  • Autosar MCAL-RH850P1HC Mcu配置

    2024年01月18日
    浏览(45)
  • AUTOSAR规范与ECU软件开发(实践篇)7.1 MCAL配置工具安装方法

         目录  MCAL配置工具入门 1 MCAL配置工具安装方法 (1) EB tresos Studio工具安装方法

    2024年02月11日
    浏览(54)
  • AUTOSAR COM(整体架构和模块交互)

    -返回总目录- 一、COM层主要功能和架构(参考MICROSAR COM Technical Reference CFG5 Version 9.00.01)《TechnicalReference_Com.pdf》 1.1 COM模块的主要功能: 为上层提供信号接口(无符号/有符号) I-PDUs 中信号的打包和解包 处理传输模式 I-PDUs 间传输最小间隔 I-PDU组的通信控制 接收的deadline监控

    2024年02月10日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包