AUTOSAR进阶图解==>AUTOSAR_SRS_ADCDriver

AUTOSAR ADC驱动详解

基于AUTOSAR标准的ADC驱动模块需求规范分析

目录

  1. ADC驱动模块概述
    1. 关键概念定义
  2. ADC驱动架构
    1. ADC驱动在AUTOSAR分层架构中的位置
    2. ADC驱动的主要职责
  3. ADC驱动配置结构
    1. 通用配置(AdcGeneral)
    2. 硬件单元配置(AdcHwUnit)
    3. 通道配置(AdcChannel)
    4. 通道组配置(AdcChannelGroup)
    5. 通道组映射(AdcChannelGroupMapping)
    6. 电源状态配置(AdcPowerStateConfig)
  4. ADC通道组状态机
    1. ADC通道组状态
    2. 状态转换
  5. ADC驱动交互流程
    1. 初始化阶段
    2. 配置通知阶段
    3. 软件触发转换阶段
    4. 转换与中断处理
    5. 读取结果阶段
    6. 高优先级中断处理
    7. 停止转换阶段
    8. 电源管理阶段
  6. 总结

1. ADC驱动模块概述

AUTOSAR ADC驱动模块是微控制器抽象层(MCAL)的一部分,负责初始化和控制微控制器内部的模数转换器单元。ADC驱动提供了启动和停止转换的服务,并支持启用/禁用转换触发源,同时提供了通知机制和查询转换状态及结果的功能。

ADC驱动模块工作在所谓的ADC通道上,一个ADC通道将一个模拟输入引脚、必要的ADC电路和转换结果寄存器组合成一个可通过ADC驱动单独控制和访问的实体。

1.1 关键概念定义

  • ADC硬件单元:表示包含执行"模数转换"所需所有部件的微控制器输入电子设备。
  • ADC通道:表示绑定到一个端口引脚的逻辑ADC实体。多个ADC实体可以映射到同一个端口引脚。
  • ADC通道组:链接到同一ADC硬件单元的ADC通道组(例如一个采样保持和一个A/D转换器)。整个组的转换由一个触发源触发。
  • ADC结果缓冲区:ADC驱动的用户必须为每个组提供一个缓冲区。如果选择了流式访问模式,此缓冲区可以容纳同一通道组的多个样本。如果选择了单次访问模式,缓冲区中保存每个组通道的一个样本。
  • 转换模式
    • 单次模式:在触发后执行一次ADC通道组的转换,结果写入指定的缓冲区。触发可以是软件API调用或硬件事件。
    • 连续模式:在软件API调用(启动)后连续执行ADC通道组的转换。转换本身自动运行(由硬件/中断控制)。可以通过软件API调用(停止)停止连续转换。
  • 触发源:启动单次转换或连续转换系列的源事件。
  • 采样时间:模拟值被采样的时间(例如电容充电)。
  • 转换时间:采样的模拟值转换为数字表示的时间。
  • 获取时间:采样时间+转换时间。

2. ADC驱动架构

ADC驱动在AUTOSAR分层架构中位于微控制器抽象层(MCAL),它向上提供服务给ECU抽象层,向下控制微控制器的ADC硬件单元。

在这里插入图片描述

图1:AUTOSAR ADC驱动模块架构图

2.1 ADC驱动在AUTOSAR分层架构中的位置

  1. 应用层 - 包含应用软件组件(SWC),它们通过RTE层请求ADC相关功能。

    • 应用组件可能需要获取模拟传感器数据,如温度、压力、位置等。
  2. RTE层 - 运行时环境层,为应用层和基础软件层之间提供标准化接口。

    • 通过RTE API,应用无需关心底层细节即可访问ADC功能。
  3. BSW层/ECU抽象层 - 包含I/O硬件抽象(IoHwAbs),提供与硬件无关的接口。

    • IoHwAbs将模拟输入和ADC通道的映射关系抽象化。
    • 向上提供符合AUTOSAR标准的API,向下调用MCAL层的ADC驱动。
  4. BSW层/MCAL层 - 包含ADC驱动本身,以及相关的MCU驱动和端口驱动。

    • ADC驱动实现针对特定微控制器的ADC初始化和控制。
    • 与MCU驱动和端口驱动协作,共同管理ADC硬件资源。
  5. 硬件层 - 包含ADC硬件单元和微控制器物理资源。

    • ADC驱动通过MCAL层的抽象机制控制这些硬件资源。

2.2 ADC驱动的主要职责

  1. 初始化和控制ADC硬件单元
  2. 提供ADC通道分组功能
  3. 支持不同的转换模式(单次/连续)
  4. 支持不同的触发源(软件/硬件)
  5. 提供结果访问和通知机制
  6. 支持电源状态管理

3. ADC驱动配置结构

ADC驱动的配置结构定义了如何设置和使用ADC硬件资源。配置包括通用设置、硬件单元设置、通道设置、通道组设置以及电源管理设置。

在这里插入图片描述

图2:AUTOSAR ADC驱动模块配置结构类图

3.1 通用配置(AdcGeneral)

通用配置定义了ADC驱动整体的行为和可用功能:

  1. AdcDeInitApi - 是否支持反初始化API
  2. AdcDevErrorDetect - 是否支持开发错误检测
  3. AdcEnableStartStopGroupApi - 是否支持启动/停止通道组转换API
  4. AdcGroupNotificationSupport - 是否支持通道组通知
  5. AdcHwTriggerSupport - 是否支持硬件触发
  6. AdcPrioritySupport - 是否支持通道组优先级机制
  7. AdcReadGroupApi - 是否支持读取通道组API
  8. AdcVersionInfoApi - 是否支持版本信息API

这些配置项直接对应SRS_Adc_12307中描述的基本静态配置。

3.2 硬件单元配置(AdcHwUnit)

硬件单元配置定义了每个ADC硬件单元的基本参数:

  1. AdcHwUnitId - ADC硬件单元的唯一标识符
  2. AdcClockSource - ADC时钟源选择
  3. AdcPrescale - ADC时钟预分频设置
  4. AdcReferenceVoltage - ADC参考电压源
  5. AdcResolution - ADC分辨率(8位、10位、12位等)
  6. AdcResultAlignment - 结果对齐方式(左对齐或右对齐)

根据SRS_Adc_12824,结果对齐方式可配置为左对齐或右对齐。

3.3 通道配置(AdcChannel)

通道配置定义了每个ADC通道的特性:

  1. AdcChannelId - 通道标识符
  2. AdcChannelName - 通道符号名称
  3. AdcChannelResolution - 通道分辨率
  4. AdcChannelSamplingTime - 通道采样时间
  5. AdcChannelConversionTime - 通道转换时间

这些配置项直接对应SRS_Adc_12307中描述的每个通道的基本静态配置。

3.4 通道组配置(AdcChannelGroup)

通道组配置定义了ADC通道组的行为:

  1. AdcGroupId - 通道组标识符
  2. AdcGroupName - 通道组符号名称
  3. AdcGroupAccessMode - 访问模式(单次/流式)
  4. AdcGroupConversionMode - 转换模式(单次/连续)
  5. AdcGroupPriority - 通道组优先级
  6. AdcGroupTriggSrc - 触发源(软件/硬件)
  7. AdcNotification - 通知回调函数指针
  8. AdcStreamingBufferMode - 流式缓冲区模式(线性/循环)
  9. AdcStreamingNumSamples - 流式采样数量

根据SRS_Adc_12447,ADC驱动允许将属于同一ADC硬件单元的ADC通道分组到所谓的ADC通道组中。

根据SRS_Adc_12817,ADC驱动允许为每个ADC通道组静态配置一个触发源。

根据SRS_Adc_12820,ADC驱动允许为每个通道组配置优先级级别,以便高优先级组可以中断正在进行的低优先级转换。

3.5 通道组映射(AdcChannelGroupMapping)

通道组映射配置定义了通道组中包含的通道:

  1. AdcChannelIndex - 通道在组中的索引

这实现了SRS_Adc_12818中描述的功能,允许将一个ADC通道分配给多个ADC通道组。

3.6 电源状态配置(AdcPowerStateConfig)

电源状态配置定义了ADC的电源管理行为:

  1. AdcPowerStateAsyncTransitionMode - 是否支持异步电源状态转换
  2. AdcPowerState - 电源状态(全功率/低功率/关闭)

这些配置项实现了SRS_ADC_12826SRS_ADC_12827SRS_ADC_12828SRS_ADC_12829中描述的电源状态管理功能。


4. ADC通道组状态机

ADC通道组状态机描述了ADC通道组在操作过程中可能的状态和状态转换。

在这里插入图片描述

图3:AUTOSAR ADC驱动通道组状态转换图

4.1 ADC通道组状态

根据SRS_Adc_12291,ADC通道组有以下五种状态:

  1. 未初始化(UNINIT) - ADC驱动未初始化状态,在驱动初始化前的状态。

  2. 空闲(IDLE) - ADC通道组空闲状态,可以启动新转换或配置通道组。

    • 在初始化后进入此状态
    • 在转换停止后回到此状态
    • 此状态下可以启动新的转换
  3. 忙(BUSY) - ADC通道组忙状态,表示转换正在进行中。

    • 启动转换后进入此状态
    • 可能被高优先级组中断
    • 转换完成后离开此状态
  4. 已完成(COMPLETED) - 单次转换已完成状态,结果可以读取。

    • 单次转换完成后进入此状态
    • 此状态下可以读取最新的转换结果
    • 可以从此状态启动新的转换
  5. 流式已完成(STREAM COMPLETED) - 流式转换已完成状态,所有样本都已存储在缓冲区中。

    • 流式转换完成后进入此状态
    • 此状态下可以访问采集的所有样本
    • 可以从此状态启动新的转换

4.2 状态转换

状态转换描述了ADC通道组如何从一个状态变化到另一个状态:

  1. 初始化 - 从UNINIT到IDLE:通过Adc_Init()函数完成初始化后发生。

  2. 启动转换 - 从IDLE到BUSY:通过Adc_StartGroupConversion()函数启动转换后发生。

  3. 单次转换完成 - 从BUSY到COMPLETED:单次转换模式下,转换完成后发生。

  4. 流式转换完成 - 从BUSY到STREAM COMPLETED:流式转换模式下,所有样本转换完成后发生。

  5. 启动新转换 - 从COMPLETED或STREAM COMPLETED到BUSY:通过Adc_StartGroupConversion()函数启动新转换后发生。

  6. 停止转换 - 从BUSY、COMPLETED或STREAM COMPLETED到IDLE:通过Adc_StopGroupConversion()函数停止转换后发生。

  7. 反初始化 - 从IDLE到UNINIT:通过Adc_DeInit()函数反初始化后发生。

  8. 高优先级中断 - 从BUSY到BUSY:当启用优先级支持时,高优先级组可以中断正在进行的低优先级转换。

这些状态和转换实现了SRS_Adc_12291中描述的ADC通道组状态查询功能。


5. ADC驱动交互流程

ADC驱动交互流程展示了在ADC转换过程中各个组件之间的交互序列。

在这里插入图片描述

图4:AUTOSAR ADC驱动转换序列图

5.1 初始化阶段

初始化阶段建立ADC驱动的基本配置:

  1. 应用调用Adc_Init(ConfigPtr)初始化ADC驱动
  2. ADC驱动配置ADC硬件,包括:
    • 配置ADC时钟
    • 设置ADC分辨率
    • 配置参考电压
    • 设置结果对齐方式

这实现了SRS_Adc_12307中描述的基本静态配置功能。

5.2 配置通知阶段

配置通知阶段设置通道组的通知机制:

  1. 应用调用Adc_EnableGroupNotification(Group)为指定通道组启用通知
  2. ADC驱动更新内部状态,使该通道组在转换完成时能够触发通知

这实现了SRS_Adc_12318中描述的启用和禁用通知功能。

5.3 软件触发转换阶段

软件触发转换阶段展示了如何通过软件API启动ADC转换:

  1. 应用通过IoHwAbs层调用IoHwAbs_AdcReadGroup()
  2. IoHwAbs层调用ADC驱动的Adc_StartGroupConversion(Group)
  3. ADC驱动启动ADC硬件进行转换

这实现了SRS_Adc_12364中描述的启动和停止通道组转换功能。

5.4 转换与中断处理

转换与中断处理阶段展示了ADC转换完成后的处理流程:

  1. ADC硬件完成转换,触发转换完成中断
  2. ADC驱动处理结果:
    • 读取ADC结果寄存器
    • 应用结果对齐和掩码(SRS_Adc_12283)
    • 存储到结果缓冲区
    • 更新通道组状态
  3. ADC驱动检查通知状态:
    • 如果通知已启用,调用转换完成通知回调函数
    • 如果通知已禁用,仅存储结果

这实现了SRS_Adc_12283中描述的掩码信息位功能和SRS_Adc_12317中描述的通知功能。

5.5 读取结果阶段

读取结果阶段展示了如何获取ADC转换结果:

  1. 应用通过IoHwAbs层调用IoHwAbs_AdcReadChannel()
  2. IoHwAbs层调用ADC驱动的Adc_ReadGroup(Group, DataBufferPtr)
  3. ADC驱动检查通道组状态
  4. ADC驱动获取最近的转换结果,并返回给上层

这实现了SRS_Adc_12819中描述的读取最新有效转换结果功能。

5.6 高优先级中断处理

高优先级中断处理阶段展示了优先级机制的工作方式:

  1. 应用调用Adc_StartGroupConversion(HighPriorityGroup)启动高优先级通道组
  2. ADC驱动检查当前转换状态:
    • 如果低优先级转换正在进行,中止当前转换并启动高优先级转换
    • 如果没有正在进行的转换,直接启动高优先级转换

这实现了SRS_Adc_12820中描述的通道组优先级功能。

5.7 停止转换阶段

停止转换阶段展示了如何停止正在进行的转换:

  1. 应用调用Adc_StopGroupConversion(Group)
  2. ADC驱动停止ADC硬件转换
  3. ADC驱动更新通道组状态为IDLE

这实现了SRS_Adc_12364中描述的停止通道组转换功能。

5.8 电源管理阶段

电源管理阶段展示了ADC驱动的电源状态管理:

  1. 应用调用Adc_SetPowerState(PowerState)设置ADC电源状态
  2. ADC驱动配置ADC硬件进入指定的电源状态
  3. 应用调用Adc_GetCurrentPowerState(PowerStatePtr)获取当前电源状态
  4. ADC驱动返回ADC硬件的当前电源状态

这实现了SRS_ADC_12826SRS_ADC_12827SRS_ADC_12828SRS_ADC_12829中描述的电源状态管理功能。


6. 总结

AUTOSAR ADC驱动是微控制器抽象层的关键组件,它提供了对微控制器ADC硬件的标准化访问。通过配置结构、状态机和交互流程的设计,ADC驱动实现了以下功能:

  1. 灵活配置 - 支持多种转换模式、触发源和结果访问方式,满足不同应用场景的需求。
  2. 状态管理 - 通过明确的状态机设计,确保ADC转换过程的可控性和可预测性。
  3. 优先级处理 - 通过优先级机制,支持高优先级通道组中断低优先级转换,满足关键应用的实时性要求。
  4. 电源管理 - 通过电源状态管理,支持不同的功耗模式,优化系统能耗。
  5. 标准接口 - 提供符合AUTOSAR标准的API,实现软件的可移植性和可重用性。

通过以上设计,ADC驱动能够高效、可靠地管理ADC硬件资源,为上层应用提供稳定、一致的服务。

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

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

相关文章

宝马集团与SAP联合打造生产物流数字化新标杆

在德国雷根斯堡的宝马工厂,每57秒就有一辆新车下线。这座工厂不仅是汽车制造的基地,更是宝马集团向SAP S/4HANA云平台转型的先锋项目。通过“RISE with SAP”计划,宝马将该工厂的运营系统全面迁移至SAP S/4HANA Cloud Private Edition&#x…

Go 语言实战:构建一个高性能的 MySQL + Redis 应用

引言:为什么是 Go MySQL Redis?在现代后端技术栈中,Go MySQL Redis 的组合堪称“黄金搭档”,被广泛应用于各种高并发业务场景。Go 语言:以其卓越的并发性能、简洁的语法和高效的执行效率,成为构建高性能…

Excel超级处理器,多个word表格模板中内容提取到Excel表格中

在职场中,很多人习惯在word里插入表格,设计模板,填写内容,一旦有多个word文件需要整理在excel表格中,最常见的工作方式就是每个word文件打开,复制,粘贴到excel表格里,这样的工作方式…

前端工程化:ES6特性

本文为个人学习笔记整理,仅供交流参考,非专业教学资料,内容请自行甄别 文章目录一、let与var1.1、越狱问题1.2、变量的重复声明1.3、变量提升问题二、解构2.1、数组解构2.2、对象解构2.3、方法解构三、链判断四、参数默认值五、箭头函数六、模…

大屏项目展示

一、项目克隆与基础操作 我们参考的项目 互联网设备可视化平台---IofTV-Screen: 🔥一个基于 vue、datav、Echart 框架的物联网可视化(大屏展示)模板,提供数据动态刷新渲染、屏幕适应、数据滚动配置,内部图表自由替换、Mixins注入等功能,持续更新.... 将次项目克隆到本…

基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析实践技术应用

在自然和社会科学领域有大量与地理或空间有关的数据,这一类数据一般具有严重的空间异质性,而通常的统计学方法并不能处理空间异质性,因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法:经典地理加权回归,…

【Flask 基础 ①】 | 路由、参数与模板渲染

0 序言 Flask 是 Python 生态中一款轻量级 Web 框架,以简洁、灵活著称。 学习 Flask 的意义在于: 快速开发:通过少量代码即可搭建功能完整的 Web 应用;理解原理:其设计清晰体现了 Web 框架的核心逻辑,如路由…

wordpress登陆前登陆后显示不同的顶部菜单

在WordPress中让“未登录”和“已登录”用户看到不同的顶部菜单,最干净、最安全、最可维护的做法是: 在同一个菜单位置(themelocation)里,根据is_user_logged_in()动态切换菜单。 下面给出三种常见实现方式,按推荐程度排序。任选…

【昇腾推理PaddleOCR】生产级部署方式

已知的在昇腾上推理Paddle OCR有三种方法: 概要: PyTorch官方提供了昇腾插件包,安装后虽然可以支持PytorchOCR和PaddlePaddle的推理任务,但性能较低。换句话说,PaddlePaddle框架层面支持了昇腾,但具体到某个…

LangChain摘要记忆组件的使用与解析

01. 摘要记忆组件的类型 在 LangChain 中使用缓冲记忆组件要不就保存所有信息(占用过多容量),要不就保留最近的记忆信息(丢失太多重要信息),那么有没有一种情况是既要又要呢? 所以折中方案就出…

NAT与智能选路

1、NAT 基础概念核心作用:私网地址无法在 Internet 上直接使用和分配,NAT 通过将私有地址与公有地址及端口进行转换,实现私网与公网的通信。转换示例:内网用户(10.1.1.1)访问外网 FTP Server(12…

【05】VisionMaster入门到精通——圆查找

文章目录1 运行参数先检测出多个边缘点然后拟合成圆形,可用于圆的定位与测量 1 运行参数 先检测出多个边缘点然后拟合成圆形,可用于圆的定位与测量——运行参数 扇环半径——圆环ROI的内外圆半经; 边绿类型 最强——只检测扫描范围内梯度最…

p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型

点赞 关注 收藏 学会了 在 p5.js 的 3D 绘图中,这两个函数是一对 “黄金搭档”: beginGeometry():像一个 “3D 模型的开关”,调用它之后,你画的所有简单 3D 形状(比如球体、圆锥)都会被 “…

(9)NMPC非线性模型预测控制及机械臂ROS控制器实现

前言 本篇介绍Nonlinear Model Predictive Control,非线性模型预测控制,MPC是一种现代先进的控制方法,而NMPC特指对非线性模型的控制,其核心思想是在每个控制周期内利用系统的非线性模型及损失函数,预测未来一段时间内…

达梦数据库备份与还原终极指南:从基础到增量策略实战

第一部分:备份与还原核心原理 一、备份还原本质解析数据存储机制 数据存储在物理文件页中(最小单位4K-32K)有效数据页 文件描述页 已分配使用页日志优先原则:操作先写REDO日志再更新数据文件三大核心操作操作作用关键特性备份复…

设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式

设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式 引子:代码里“似曾相识”的场景 作为开发者,我们总会遇到一些“似曾相识”的场景: “当这个数据变化时,我需要通知其他好几个地方都更新一…

Node.js 服务可以实现哪些功能

以下是 Node.js 服务可以实现的 100 个功能,涵盖 Web 开发、工具链、系统集成、自动化等方向,按类别分类整理:一、Web 开发相关 RESTful API 服务GraphQL 服务实时聊天应用(WebSocket/Socket.IO)博客/CMS 系统电子商务…

如何安装和使用 Cursor AI 编辑器

在软件开发领域,几乎每天都有新工具涌现,找到最适合您工作流程的工具可能会改变游戏规则。Cursor 是一款 AI 驱动的代码编辑器,其革命性的 API 管理插件 EchoAPI 就是其中的代表。它们强强联手,承诺在一个强大的平台内简化您的编码…

LangChain框架概念及简单的使用案例

一、LangChain介绍LangChain是一个强大的用于开发大模型应用程序的框架,为开发提供丰富的工具和组件,使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成,从而创建出能处理各种任务的智能体应用&a…

安卓audio 架构解析

audio_port_handle_t • 定义:audio_port_handle_t标识音频设备(如扬声器、耳机)或虚拟端口(如远程 submix)。它在设备连接或策略路由时由AudioPolicyManager分配,例如通过setDeviceConnectionState()动态注…