【MCAL】ADC模块详解

目录

前言

正文

1.ADC模块介绍

2.关键概念及依赖的模块

2.1 ADC依赖的模块

3.ADC功能示例

3.1 ADC Buffer Access Mode示例

3.1.1配置(Configuration)

3.1.2 初始化(Initialization)

3.1.3 Adc_GetStreamLastPointer的使用方法

3.1.4 Adc_ReadGroup用法

4.ADC转换和交互

5.ADC状态机

5.1 ADC State Diagram for One-Shot/Continuous Group Conversion Mode

5.2 ADC State Diagram for HW/SW Trigger in One-Shot Group Conversion Mode

5.3 ADC State Diagram for SW Trigger in Continuous Conversion Mode

5.4 ADC State Diagram for One-Shot Conversion Mode, Software Trigger Source, Single Access Mode

5.5 ADC State Diagram for One-Shot Conversion, Hardware Trigger Source, Single Access Mode

5.6 ADC State Diagram for One-Shot Conversion Mode, Hardware Trigger Source, Linear and Circular Streaming Access Mode

5.7 ADC State Diagram for Continuous Conversion Mode, Software Trigger Source, Single Access Mode

5.8 ADC State Diagram for Continuous Conversion Mode, Software Trigger Source, Linear and Circular Streaming Access Mode

6.ADC重要数据类型

6.1 Adc_ChannelType

6.2 Adc_GroupType

6.3 Adc_StatusType

6.4 Adc_TriggerSourceType

6.5 Adc_GroupConvModeType

6.6 Adc_StreamBufferModeType

6.7 Adc_GroupAccessModeType

6.8 Adc_HwTriggerSignalType

6.9 Adc_PriorityImplementationType

6.10Adc_GroupReplacementType

6.11 Adc_ChannelRangeSelectType

6.12 Adc_ResultAlignmentType

6.13 Adc_PowerStateRequestResultType

7.ADC重要API

7.1 Adc_SetupResultBuffer

7.2 Adc_StartGroupConversion

7.3 Adc_StopGroupConversion

7.4 Adc_ReadGroup

7.5 Adc_EnableHardwareTrigger

7.6 Adc_DisableHardwareTrigger

7.7 Adc_EnableGroupNotification

7.8 Adc_DisableGroupNotification

7.9 Adc_GetGroupStatus

7.10 Adc_GetStreamLastPointer

8.ADC重要时序

8.1 Software triggered One-Shot conversion without notification

8.2 Software triggered continuous conversion with notification

8.3 Hardware triggered One-Shot conversion with notification

8.4One-Shot conversion - Linear Streaming

9.ADC配置实例

10.ADC使用示例

11.总结


前言

MCAL处于AUTOSAR架构的最底层,和具体的芯片强绑定,且不同的芯片使用不同的MCAL配置工具,例如英飞凌芯片系列使用EB配置MCAL,瑞萨芯片系列使用Davince配置MCAL。所以,除了AUTOSAR标准定义好的配置项及标准接口外,不同厂商的MCAL还会有独立于MCAL标准之外的配置,所以MCAL的学习最好是结合具体的工具和芯片来学习。本文为模拟-数字信号转换器Analog-to-digital converter模块详解篇

【MCAL】MCU模块详解

参考文献:

1.Specification of ADC Driver 4.3.1

https://www.autosar.org/nc/document-search/

正文

1.ADC模块介绍

ADC模块处于AUTOSAR架构下的MCAL部分,ADC模块初始化并控制微控制器的内部模拟数字转换器单元。ADC模块分别提供启动和停止转换的服务,以启用和禁用转换的触发源。此外,它还提供了启用和禁用通知机制的服务,以及查询转换状态和结果的例程。ADC模块在所谓的ADC通道组上工作,它们是由所谓的ADC通道构建的。ADC通道组结合了模拟输入引脚(ADC通道)、所需的ADC电路本身和将结果寄存器转换为可单独控制和通过ADC模块访问的实体。

图片

2.关键概念及依赖的模块

2.1 关键概念

ADC HW Unit: ADC硬件单元,表示一种微控制器输入电子设备,它包括执行“模拟到数字转换”所需的所有部件。简单理解就是,ADC硬件单元是集成在MCU内部的ADC控制器,MCU可以集成多个ADC硬件单元(ADC控制器)。

ADC Module:ADC模块,软件概念,ADC基本软件模块也就是ADC驱动程序,也缩写为ADC驱动程序。

ADC Channel:ADC通道,表示绑定到一个端口引脚的逻辑ADC实体。多个ADC实体可以映射到同一个端口引脚。实际配置中如果一个Pin映射一个ADC Channel,那么也就是一路外部ADC的数据由一路ADC Channel来获取。

ADC Channel Group:连接到同一ADC硬件单元的一组ADC通道(例如,一个采样和保持转换器和一个A/D转换器)。整个组的转换是由一个触发源触发的。简单理解,一个ADC HW Unit上的所有ADC Channel就属于哥ADC Group。

ADC Result Buffer:ADC驱动程序的用户必须为每个组提供一个缓冲区。如果选择了流媒体访问模式,该缓冲区可以保存同一组通道的多个样本。如果选择了单一访问模式,则在缓冲区中保留每个组通道的一个样本。

Software Trigger:启动一个ADC通道组或连续一系列ADC通道组转换的软件API调用。

Hardware Trigger:启动ADC通道组的一次转换的ADC内部触发信号。ADC硬件触发器在ADC硬件内部生成,例如基于ADC计时器或触发器边缘信号。触发器硬件是紧密耦合的或集成在ADC硬件中的。在检测到硬件触发器后,无需使用任何软件即可启动ADC通道组转换。

注意:如果ADC硬件不支持硬件触发器,则将软件触发器与GPT/ICU驱动程序结合使用,可以实现类似的行为。例如,在GPT计时器通知功能中,可以启动软件触发的ADC通道组转换

Conversion Mode:One-Shot:ADC通道组的转换在触发后执行一次,并将结果写入分配的结果缓冲区。触发器可以是软件API调用或硬件事件。Continuous:ADC通道组的转换在软件API调用(开始)后连续执行,并将结果写入分配的结果缓冲区。转换本身正在自动运行(受硬件/中断控制)。连续转换可以通过软件API调用(停止)来停止。

Sample Time:模拟值被采样的时间。

Conversion Time:将采样的模拟值转换为数字表示的时间。

Acquisition Time:Sample Time + Conversion Time。

2.1 ADC依赖的模块

1)MCU

微控制器单元驱动器(MCU驱动程序)主要负责初始化和控制芯片的内部时钟源和时钟预调节器。时钟频率可能会影响:

-- Trigger frequency

-- Conversion time

-- Sampling time

2)PORT

PORT模块应配置ADC模块使用的端口引脚。必须同时考虑模拟输入引脚和外部触发引脚。

3.ADC功能示例

下表显示了ADC用户可能需要的功能的列表,以及ADC模块所提供的功能的方式。此外,该表还描述了这些功能的可能实现。

图片

3.1 ADC Buffer Access Mode示例

3.1.1配置(Configuration)

图片

示例配置由三个 ADC Group组成。Group G1包含2个通道,Group G2和Group G3各包含一个通道。对于G1 和G2,Group访问模式 配置为ADC_ACCESS_MODE_STREAMING。G3的Group访问模式为ADC_ACCESS_MODE_SINGLE。ADC 驱动程序将Group 1-3 的转换结果存储在三个应用程序缓冲区中,通过三个配置的 ADC_RESULT_POINTER 访问:G1_ResultPtr、G2_ResultPtr 和 G3_ResultPtr。

3.1.2 初始化(Initialization)

Std_ReturnType Adc_SetupResultBuffer

(Adc_GroupType Group, const Adc_ValueGroupType* DataBufferPtr)

图片

用户必须为ADC Group结果提供应用程序结果缓冲区。每组需要一个缓冲区。如果选择了Streaming Access Mode,缓冲区大小取决于组通道数、Group访问模式和Stream采样数。在开始Group转换之前,用户必须使用API函数Adc_SetupResultBuffer初始化Group结果指针,该函数将Group结果指针初始化为指向指定的应用程序结果缓冲区。

3.1.3 Adc_GetStreamLastPointer的使用方法

Adc_StreamNumSampleType	  Adc_GetStreamLastPointer

(Adc_GroupType  Group,  Adc_ValueGroupType**  PtrToSamplePtr)

图片

ADC 驱动程序将G1、G2 和 G3组的转换结果存储在相应的结果缓冲区 G1_ResultBuffer[]、G2_ResultBuffer[] 和 G3_ResultBuffer[]中。ADC驱动程序不支持从ADC API函数直接访问ADC硬件结果寄存器。

用户提供三个指针 G1_SamplePtr、G2_SamplePtr 和 G3_SamplePtr调用Adc_GetStreamLastPointer后会指向ADC申请结果缓冲区。精确的指针G1_SamplePtr在调用Adc_GetStreamLastPointer后指向最近完成的转换回合的最新G1_CH0结果(G1_CH0是G1组定义中的第一个通道)。group 1的应用结果缓冲区保存了 G1_CH0 的3份Stream结果,以及G1_CH1的3份Stream结果。了解应用程序结果缓冲区布局,用户可以访问最新一轮转换的所有组通道结果。G2_SamplePtr和G3_SamplePtr也对齐,调用Adc_GetStreamLastPointer后,指向对应组的第一个组通道的最新结果。两组都只有一个频道。G2_SamplePtr 指向G2_CH2结果之一(最新结果)。由于G3配置为Single Access Mode,因此G3_SamplePtr始终指向G3_CH3。

3.1.4 Adc_ReadGroup用法

Std_ReturnType Adc_ReadGroup

(Adc_GroupType Group,Adc_ValueGroupType* DataBufferPtr)

图片

如果启用了可选的API函数Adc_ReadGroup,则用户必须为所选组提供额外的缓冲区,该缓冲区可以保存一轮组转换的结果。调用Adc_ReadGroup将最新的结果从应用程序结果缓冲区复制到应用程序读取组缓冲区。在该示例中,一个应用程序读取缓冲区 (G2_G3_ReadBuffer) 用于组G2和G3。

4.ADC转换和交互

以下示例根据组和转换类型指定了信道转换的顺序:

Example 1:包含通道[CH0、CH1、CH2、CH3 和 CH4]的通道组配置为连续转换模式。完成每次扫描后,将调用Notification(如果已启用)。然后自动开始新的扫描。

Example 2:包含通道[CH0、CH1、CH2、CH3 和 CH4]的通道组配置为One-Shot转换模式。完成扫描后,将调用Notification(如果已启用)。

Example 3:包含通道[CH3]的通道组配置为连续转换模式。完成每次扫描后,将调用Notification(如果已启用)。然后自动开始新的扫描。

Example 4:包含通道[CH4]的通道组配置为One-Shot转换模式。完成扫描后,将调用Notification(如果已启用)。

5.ADC状态机

ADC模块具有一个状态机,如下图所示。这些状态是特定于组的,而不是特定于模块的。该图显示了ADC组的所有可能的配置选项。状态转换取决于ADC组的配置。

5.1 ADC State Diagram for One-Shot/Continuous Group Conversion Mode

5.2 ADC State Diagram for HW/SW Trigger in One-Shot Group Conversion Mode

5.3 ADC State Diagram for SW Trigger in Continuous Conversion Mode

5.4 ADC State Diagram for One-Shot Conversion Mode, Software Trigger Source, Single Access Mode

5.5 ADC State Diagram for One-Shot Conversion, Hardware Trigger Source, Single Access Mode

5.6 ADC State Diagram for One-Shot Conversion Mode, Hardware Trigger Source, Linear and Circular Streaming Access Mode

5.7 ADC State Diagram for Continuous Conversion Mode, Software Trigger Source, Single Access Mode

5.8 ADC State Diagram for Continuous Conversion Mode, Software Trigger Source, Linear and Circular Streaming Access Mode

6.ADC重要数据类型

6.1 Adc_ChannelType

图片

ADC通道类型,这里的通道是逻辑通道(软件定义),我们可以定义多个逻辑通道映射到同一个物理通道上。在实际项目中,我们一般逻辑通道数和物理通道数意义对应,也就是一个物理通道(外部传感器数据输入)对应一个逻辑通道。

6.2 Adc_GroupType

图片

ADC组也是逻辑组,我们可以定义多个组,每个组里面分配的Channel通道也是可以自由组合的。实际项目中,一般MCU有多少个ADC HW Unit就配置多少个Group,然后每个Group里面包含队医ADC HW Unit的所有物理Channel。

6.3 Adc_StatusType

图片

ADC状态指的是每一个Group的状态,而不是整个ADC模块的状态。如果Group Access Mode配置为Single或者Stream但是Stream缓存大小为1的话,Group的ADC_COMPLETE状态等同于ADC_STREAM_COMPLETED状态。

6.4 Adc_TriggerSourceType

图片

ADC转换触发源。

软件触发:

void Adc_StartGroupConversion(Adc_GroupType Group) --> 开始ADC转换

void Adc_StopGroupConversion(Adc_GroupType Group) --> 停止ADC转换

硬件触发:例如配置为PWM输入的双边沿触发ADC转换。

6.5 Adc_GroupConvModeType

图片

ADC_CONV_MODE_ONESHOT:在配置的触发事件之后,ADC通道组中的每个通道只执行一次转换。Group配置为软件触发的情况下,已启动的一次性转换可以通过软件API调用停止。Group配置为硬件触发的情况下,可以通过禁用触发事件(如果硬件支持)来停止已启动的一次性转换。

ADC_CONV_MODE_CONTINUOUS:对一个ADC信道组中的每个ADC信道进行重复转换。连续转换模式仅适用于配置为软件触发的Group。已启动的“连续转换”可以通过软件API调用停止。

6.6 Adc_StreamBufferModeType

图片

ADC_STREAM_BUFFER_LINEAR:一旦流缓冲区已满(已到达的样本数量),ADC驱动程序就会立即停止转换。

ADC_STREAM_BUFFER_CIRCULAR:即使流缓冲区已满(到达的样本数量),ADC驱动程序也会继续转换。

6.7 Adc_GroupAccessModeType

图片

ADC_ACCESS_MODE_SINGLE:每个通道Channel只缓存一个采样Sample数据。

ADC_ACCESS_MODE_STREAMING:每个通道(Channel)可以缓存多个采样(Sample)数据。

6.8 Adc_HwTriggerSignalType

图片

用于配置驱动程序应该在硬件触发信号的哪个边缘上进行反应的类型,即启动转换(仅在由ADC硬件支持的情况下)。

6.9 Adc_PriorityImplementationType

图片

用于配置优先级化机制的类型。

6.10Adc_GroupReplacementType

图片

如果组转换被具有更高优先级的组中断,则在ADC组级别上使用的替换机制。

ADC_GROUP_REPL_ABORT_RESTART:如果组被优先级更高的组中断,则在组级别上使用中止/重新启动机制。在更高优先级的组转换完成后,重启中断组(所有组通道)的完整转换轮。如果将组配置为流访问模式,则只丢弃中断的转换轮的结果。已写入结果缓冲区的先前转换轮的结果不受影响。

ADC_GROUP_REPL_SUSPEND_RESUME:如果一个组被优先级更高的组中断,则在组级别上使用暂停/恢复机制。在更高优先级的组转换完成后,中断组的转换回合将完成。已写入结果缓冲区的先前转换轮的结果不受影响。

6.11 Adc_ChannelRangeSelectType

图片

图片

在主动限制检查的情况下:定义哪些与通道低限制和通道高度限制定义的板相关的转换值。

6.12 Adc_ResultAlignmentType

图片

6.13 Adc_PowerStateRequestResultType

图片

7.ADC重要API

7.1 Adc_SetupResultBuffer

图片

使用存储转换结果的组缓冲区启动地址初始化ADC驱动程序。应用程序必须确保DataBufferPtr所指向的应用程序缓冲区能够保存指定组的所有转换结果。在重置后,需要使用Adc_SetupResultBuffer进行初始化,然后才能启动组转换。

7.2 Adc_StartGroupConversion

图片

启动所请求的ADC通道组的所有通道的转换。在开始调用Adc_StartGroupConversion函数开始ADC数据转换之前应该先调用Adc_SetupResultBuffer设置转换结果缓冲区。

7.3 Adc_StopGroupConversion

图片

停止所请求的ADC通道组的转换.。

7.4 Adc_ReadGroup

图片

图片

读取请求组最后完成的转换轮的组转换结果,并从数据bufferPtr地址开始存储通道值。组通道值按通道编号递增顺序存储(如果配置了流媒体访问,则与结果缓冲区的存储布局相反)。

7.5 Adc_EnableHardwareTrigger

图片

为所请求的ADC通道组启用硬件触发器。

7.6 Adc_DisableHardwareTrigger

图片

7.7 Adc_EnableGroupNotification

图片

图片

为所请求的ADC通道组启用通知机制。

7.8 Adc_DisableGroupNotification

图片

图片

7.9 Adc_GetGroupStatus

图片

7.10 Adc_GetStreamLastPointer

图片

返回存储在结果缓冲区中的每个通道的有效样本数。读取一个指向组结果缓冲区中的一个位置的指针。使用指针位置,可以访问最后一次完成的转换轮的所有组通道的结果。使用指针和返回值,就可以访问所有有效的组转换结果(用户必须考虑结果缓冲区的布局)。

8.ADC重要时序

8.1 Software triggered One-Shot conversion without notification

ADC_USER使用Adc_GetGroupStatus()函数轮询每一组(Group)的状态,直到Group状态为ADCU_STREAM_COMPLETED后调用Adc_ReadGroup()函数获取ADC转换结果。

8.2 Software triggered continuous conversion with notification

使用ADC的Notification机制(ADC组完成数据转换后产生中断-->调用Notification函数-->调用Adc_ReadGroup)来读取ADC转换数据。

8.3 Hardware triggered One-Shot conversion with notification

8.4One-Shot conversion - Linear Streaming

9.ADC配置实例

关注本公众号,后面具体项目实战会详细介绍。

10.ADC使用示例

实际项目开发中我们一般会设计一个IoHwAb_Adc模块,ADC功能的使用模块就可以封装ADC模块提供的AUTOSAR标准接口来实现特定的需求。一般我们会在IoHwAb模块分装ADC模块的使用细节,让ASW直接使用IoHwAb模块分装后的接口。

如下图所示:

模块名:IoHwAb_Adc

模块的Runnable:IoHwAb_Init,IoHwAb_Mainfunction

模块提供的接口:IoHwAb_Adc_GetAdcValue,IoHwAb_Adc_GetBaseVoltage,IoHwAb_Adc_GetRawSignal,IoHwAb_Adc_GetFilterSignal

模块使用的接口:Adc_SetupResultBuffer,Adc_StartGroupConversion,Adc_ReadGroup

11.总结

本文详细介绍了AUTOSAR架构下的MCAL_ADC模块,着重需要理解ADC Channel,ADC Group,ADC Result Buffer等概念,以及各种Group Access Mode,Group Conversion Mode的特点。。实际项目中,需要更具具体项目的需求来配置MCAL_ADC模块,然后设计一个IoHwAb_ADC的模块来封装ADC的具体配置和使用细节,给应用层SWC提供统一的ADC数据访问接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413864.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发(五)鸿蒙UI开发概览

从用户角度来讲,一个软件拥有好看的UI,那是锦上添花的事情。再精确的算法,再厉害的策略,最终都得通过UI展现给用户并且跟用户交互。那么,本篇一起学习下鸿蒙开发UI基础知识,认识下各种基本控件以及使用方式…

Jmeter后置处理器——JSON提取器

目录 1、简介 2、使用步骤 1)添加线程组 2)添加http请求 3) 添加JSON提取器 1、简介 JSON是一种简单的数据交换格式,允许互联网应用程序快速传输数据。JSON提取器可以从JSON格式响应数据中提取数据、简化从JSON原始数据中提取特定…

【MIdjourney】一些材质相关的关键词

1.多维剪纸(Multidimensional papercut) "Multidimensional papercut"(多维剪纸)是一种剪纸艺术形式,通过多层次的剪纸技巧和设计来创造出立体感和深度感。这种艺术形式通常涉及在不同的纸层上剪裁不同的图案,并将它们…

Windows连接Ubuntu桌面

平时Windows连接Ubuntu服务器都是使用Xshell、FinalShell等工具,但这些连接之后只能通过终端进行操作,无法用桌面方式与服务器交互。 本文介绍如何通过工具,实现Window连接远程Ubuntu服务器,并使用桌面方式交互。 系统版本&#x…

easyui渲染隐藏域<input type=“hidden“ />为textbox可作为分割条使用

最近在修改前端代码的时候&#xff0c;偶然发现使用javascript代码渲染的方式将<input type"hidden" />渲染为textbox时&#xff0c;会显示一个神奇的效果&#xff0c;这个textbox输入框并不会隐藏&#xff0c;而是显示未一个细条&#xff0c;博主发现非常适合…

Google 在裁员的路上一路狂奔

早上刷新闻&#xff0c;Google 在 2024 开年还没几天就宣布了今年的裁员计划。 前几天还在说我们当地的大学为了削减预算而进行裁员。 大厂谷歌却是首当其冲&#xff0c;裁员1000多人&#xff0c;涉及了核心工程、谷歌助理、Pixel手机等硬件团队的人员。 截至2023年9月30日&…

AppLovin员工爆料:年底遭暴力辞退。6点通知,直接走人,一分不赔。

* 你好&#xff0c;我是前端队长&#xff0c;在职场&#xff0c;玩副业&#xff0c;文末有福利!&#xff01; 今天&#xff0c;队长看到一个帖子&#xff0c;内容是关于一个员工&#xff0c;在 applovin 公司突然被辞退的经历。 故事的主角&#xff0c;是位尽心尽力的职员&…

Android14之DefaultKeyedVector实现(一百八十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

AD导出BOM表 导出PDF

1.Simple BOM: 这种模式下&#xff0c;最好在pcb界面&#xff0c;这样的导出的文件名字是工程名字&#xff0c;要是在原理图界面导出&#xff0c;会以原理图的名字命名表格。 直接在菜单栏 报告->Simple BOM 即可导出物料清单&#xff0c;默认导出 comment pattern qu…

华为OD机试 - 查找一个有向网络的头节点和尾节点(Java JS Python C)

题目描述 给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节点,如 [0, 1] 表示从 0 到 1 的路径。 每个节点用正整数表示。 求这个数据的首节点与尾节点,题目给的用例会是一个首节点,但可能存在多个尾节点。同时图中…

软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试

文章目录 前言一、软件测试“V”模型二、单元测试三、集成测试四、配置项测试五、系统测试总结 前言 一般来说&#xff0c;按照软件的研制阶段划分&#xff0c;软件测试可分为单元测试、集成测试、配置项测试、系统测试等。本文将对上述各测试阶段进行逐一介绍。 一、软件测试…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…