AUTOSAR ADC驱动模块分析
目录
- AUTOSAR ADC驱动概述
1.1 ADC驱动在AUTOSAR架构中的位置 - ADC驱动配置模型
2.1 配置结构解析 - ADC驱动状态机模型
3.1 状态机基本结构
3.2 主要状态转换场景 - ADC驱动交互序列
4.1 主要交互场景分析
4.2 错误处理机制 - 总结
1. AUTOSAR ADC驱动概述
AUTOSAR ADC驱动是AUTOSAR微控制器抽象层(MCAL)的一个关键模块,负责初始化和控制微控制器内部的模数转换器单元。ADC驱动提供了标准化的接口,使上层软件能够访问ADC硬件资源,同时屏蔽了底层硬件的复杂性。
ADC驱动模块主要针对逐次逼近型ADC硬件,不包括Delta Sigma ADC转换用例。该模块基于通道组的概念,提供了启动/停止转换、使能/禁用触发源以及转换结果通知和查询机制。
图1: AUTOSAR ADC驱动模块架构图
1.1 ADC驱动在AUTOSAR架构中的位置
如上图所示,ADC驱动位于AUTOSAR基础软件层的微控制器抽象层。它向上提供标准化的API接口给RTE和应用层软件,向下控制底层的ADC硬件单元。同时,ADC驱动还与系统服务层的模块(如DET、DEM、ECU状态管理)进行交互,用于错误处理和状态管理。
主要关系包括:
- 上行接口:向上层软件提供标准化的转换控制和结果访问接口
- 下行控制:向下直接操作ADC硬件单元
- 错误处理:与DET模块交互报告开发错误
- 运行时监控:与DEM模块交互报告运行时错误
- 状态管理:与ECU状态管理模块交互通知状态变化
- 资源使用:使用MCU驱动的时钟服务
- 硬件配置:使用PORT驱动配置ADC引脚
2. ADC驱动配置模型
ADC驱动的配置结构是基于通道和通道组的概念。通道代表物理ADC输入引脚和转换电路,而通道组将一个或多个通道组合起来作为一个可控制单元。
图2: AUTOSAR ADC驱动配置模型类图
2.1 配置结构解析
ADC驱动的配置结构主要包含以下几个部分:
-
Adc:顶层配置容器,包含一个或多个配置集以及通用配置参数
-
AdcGeneral:全局配置参数,例如:
- 功能API的启用/禁用状态(如
DeInit
、读取组、硬件触发等) - 开发错误检测状态
- 优先级实现机制(无、仅硬件、仅软件、硬件软件结合)
- 低功耗状态支持
- 功能API的启用/禁用状态(如
-
AdcConfigSet:配置集合,包含硬件单元、通道组和通道的具体配置
-
AdcChannel:ADC通道配置,定义了通道的基本属性:
- 通道ID和名称
- 通道分辨率
- 参考电压配置
- 采样时间和转换时间
- 限值检查功能(如果启用)
-
AdcGroup:通道组配置,定义如何组织和控制通道:
- 组ID和名称
- 组包含的通道列表
- 转换模式(单次/连续)
- 触发源类型(软件/硬件)
- 访问模式(单一/流式)
- 优先级设置
- 通知函数指针
-
AdcHwUnit:硬件单元配置,定义了特定ADC硬件的设置:
- 硬件ID
- 预分频值
- 分辨率
- 转换类型
通过这种配置模型,AUTOSAR ADC驱动可以灵活适应不同的硬件平台和应用需求,同时保持接口的标准化和一致性。
3. ADC驱动状态机模型
ADC驱动采用状态机模型来管理通道组的转换过程。每个通道组都有自己独立的状态,取决于其配置和当前操作。
图3: AUTOSAR ADC驱动状态转换图
3.1 状态机基本结构
ADC状态机主要包含以下状态:
- ADC_UNINIT:ADC驱动未初始化状态
- ADC_INIT:ADC驱动已初始化,但通道组未启动转换
- ADC_IDLE:通道组就绪但未进行转换
- ADC_BUSY:通道组正在进行转换
- ADC_STREAM_COMPLETED:通道组的一轮转换已完成,结果在缓冲区中可用
- ADC_COMPLETED:流式转换的特定情况,部分结果已可用
状态转换受以下几个因素影响:
- 转换模式:单次转换(ONE-SHOT)或连续转换(CONTINUOUS)
- 触发源:软件触发(SW-TRIGGER)或硬件触发(HW-TRIGGER)
- 访问模式:单一访问(SINGLE-ACCESS)或流式访问(STREAMING-ACCESS)
3.2 主要状态转换场景
根据不同的配置组合,有几种典型的状态转换场景:
-
单次转换-软件触发-单一访问模式:
- 通过
Adc_StartGroupConversion
从IDLE到BUSY - 转换完成后自动到STREAM_COMPLETED
- 通过
Adc_ReadGroup
或Adc_GetStreamLastPointer
返回IDLE
- 通过
-
单次转换-硬件触发-单一访问模式:
- 通过
Adc_EnableHardwareTrigger
从IDLE到BUSY - 当硬件触发事件发生并转换完成后,到STREAM_COMPLETED
- 通过
Adc_DisableHardwareTrigger
或读取结果返回IDLE
- 通过
-
连续转换-软件触发-流式访问模式:
- 通过
Adc_StartGroupConversion
从IDLE到BUSY - 当流缓冲区填满时到STREAM_COMPLETED
- 必须通过
Adc_StopGroupConversion
停止转换返回IDLE
- 通过
这种状态机设计确保了ADC转换过程的可控性和可预测性,并且能够处理不同应用场景下的转换需求。
4. ADC驱动交互序列
ADC驱动与应用层和硬件层之间的交互遵循特定的序列模式,这些序列确保了转换过程的正确控制和结果获取。
图4: AUTOSAR ADC驱动交互序列图
4.1 主要交互场景分析
ADC驱动支持多种转换场景,下面详细分析几种典型场景的交互序列:
4.1.1 软件触发的单次转换,带通知
该场景是最基本的使用模式,应用程序通过软件API调用启动转换,并通过通知回调获知转换完成:
- 应用程序调用
Adc_Init
初始化ADC驱动 - 调用
Adc_SetupResultBuffer
设置结果缓冲区 - 调用
Adc_EnableGroupNotification
启用通知机制 - 调用
Adc_StartGroupConversion
启动转换 - ADC硬件完成转换并触发中断
- ADC驱动保存结果并调用应用程序提供的通知回调
- 应用程序可以通过
Adc_ReadGroup
读取转换结果
4.1.2 硬件触发的单次转换,流式访问
这种场景适用于需要外部事件触发的转换,如定时器溢出或外部输入边沿:
- 应用程序启用硬件触发源(
Adc_EnableHardwareTrigger
) - 硬件事件发生时自动启动转换
- 转换完成后,结果存储在流式缓冲区中
- 应用程序可以通过
Adc_GetStreamLastPointer
获取最新结果指针 - 完成使用后,应用程序禁用硬件触发(
Adc_DisableHardwareTrigger
)
4.1.3 连续转换模式
连续转换模式适用于需要持续监控模拟信号的场景:
- 应用程序启动连续转换(
Adc_StartGroupConversion
) - ADC硬件自动重复执行通道组转换
- 每轮转换完成后更新缓冲区并可能触发通知
- 应用程序可随时读取最新结果
- 需要停止时调用
Adc_StopGroupConversion
4.2 错误处理机制
ADC驱动实现了两级错误处理机制:
- 开发错误:在开发阶段检测到的错误,如无效参数、API使用顺序错误等,通过DET模块报告
- 运行时错误:在运行时检测到的错误,如硬件故障等,通过DEM模块报告
常见的开发错误包括:
- 驱动未初始化就调用API(
ADC_E_UNINIT
) - 使用无效的组ID(
ADC_E_PARAM_GROUP
) - 组已在转换中再次启动(
ADC_E_BUSY
) - 触发源或转换模式配置错误(
ADC_E_WRONG_TRIGG_SRC
、ADC_E_WRONG_CONV_MODE
)
5. 总结
AUTOSAR ADC驱动模块是连接应用软件和ADC硬件的桥梁,它通过标准化的接口和灵活的配置机制,使上层软件能够方便地利用ADC硬件资源,同时屏蔽了底层硬件的差异性。
该模块的核心特性包括:
- 资源管理:基于通道组的ADC资源管理和访问机制
- 多转换模式:支持单次转换和连续转换模式
- 多触发源:支持软件触发和硬件触发源
- 灵活访问:支持单一访问和流式访问模式
- 错误管理:完善的错误检测和处理机制
- 电源管理:可选的低功耗状态管理
通过状态机实现精确的转换控制,通过标准化的序列交互确保正确的操作流程,ADC驱动为AUTOSAR系统提供了可靠的模拟信号采集能力,为各种应用场景提供支持。