【MCAL】ADC模块详解

2024-01-19 03:04
文章标签 模块 详解 adc mcal

本文主要是介绍【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数据访问接口。

这篇关于【MCAL】ADC模块详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621082

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓