AUTOSAR_SWS_ADCDriver

Specification of ADC Driver


简介和功能概述


本规范描述了 AUTOSAR 基础软件模块 ADC 模块的功能、API 和配置。此 ADC 模块被用于逐次逼近型 ADC 硬件。Delta Sigma (ΔΣ or sigma-deltaADC 的转换用例不在本规范的讨论范围内。

ADC 模块将对微控制器内的模数转换单元(ADC)进行初始化及控制。它提供启动/停止转换的服务(启用/禁用转换的触发源)。此外,它还提供启用/禁用通知机制的服务,以及启用/禁用对转换的状态及结果进行查询的函数接口的服务。

ADC 模块在 ADC 通道中运行,这些通道由 ADC 通道组成。ADC 通道将以下内容组合为一个独立的实体:模拟输入源引脚(ADC 通道)、ADC 电路及保存转换结果的寄存器,可通过 ADC 模块对其进行单独地控制及访问。

首字母缩略词和缩写



相关文档


输入的文档及相关标准和规范

[1] General Specification of Basic Software Modules 
  • AUTOSAR_SWS_BSWGeneral

相关规范

AUTOSAR 提供了关于基础软件模块的通用规范 [1],该规范也适用于 ADC 模块。

因此,该规范应被视为 ADC 模块的附加及必需规范。

约束和假设


限制

仅当 MCAL 驱动程序拥有对底层硬件的完整控制权(ADC 硬件不会被其他 MCAL 模块访问)时,才可对电源状态控制 API 进行实现。

对其他模块的依赖


MCU

微控制器单元(Microcontroller Unit)模块主要负责对芯片内部的时钟源和时钟预分频器进行初始化及控制。时钟频率可能会影响:
  • 触发频率
  • 转换时间
  • 采样时间

Port

Port 模块应配置 ADC 模块所需的端口引脚(模拟输入源引脚及外部触发引脚均需被考虑)。

需求可追溯性



功能定义


一般行为

背景与理由

下表列出了 ADC 用户可能需要的功能,以及 ADC 模块提供这些功能的方式。此外,该表还描述了这些功能的其中一种可能的实现方式,以及它们与商用微控制器 (C16x) 的功能之间的映射关系。


需求

[SWS_Adc_00090]

[SRS_Adc_12447]
  • ADC 模块应允许对一个或多个 ADC 通道进行分组(ADC 通道)。

[SWS_Adc_00091]

[SRS_Adc_12447] 
  • ADC 模块的配置应为:ADC 通道(包含一个或多个 ADC 通道)。

[SWS_Adc_00451]

[ ] 
  • 如果参数 AdcEnableLimitCheck 被配置为 TRUE,且启用了对特定 ADC 通道的条件检查,则 ADC 模块的配置应为:ADC 通道仅包含一个 ADC 通道

[SWS_Adc_00092]

[SRS_Adc_12818]
  • ADC 模块应允许将一个 ADC 通道分配给一个或多个 ADC 通道

[SWS_Adc_00277]

[SRS_Adc_12447]
  • ADC 模块的配置应为:同一个 ADC 通道内的 ADC 通道应属于同一个 ADC 硬件单元。

ADC 模块应支持以下转换模式:

[SWS_Adc_00380]

[ ] 
  • 对于所有 ADC 通道ADC 模块应支持“单次转换”模式。“单次转换”是指,对于正在被转换的 ADC 通道,只会对其中的每个 ADC 通道进行一次转换。

[SWS_Adc_00381]

[ ]
  • 对于所有带有软件触发源的 ADC 通道ADC 模块应支持“连续转换”模式。“连续转换”是指,对 ADC 通道的转换将在转换结束时被自动地(重复)触发,对 ADC 通道中的 ADC 通道的转换及对 ADC 通道的转换无需由另外的触发事件触发。对 ADC 通道中的 ADC 通道的转换可以以序列的方式进行,也可以以并行的方式进行(具体取决于硬件和/或软件的能力)。

ADC 模块应支持以下启动条件(触发源):

[SWS_Adc_00356]

[SRS_Adc_12817]
[SRS_Adc_12364]
  • 对于所有转换模式,ADC 模块应支持“软件接口调用”启动条件(触发源)。“软件接口调用”启动条件(触发源)是指,启动/停止对 ADC 通道的转换是由“软件接口调用”触发的(软件接口由 ADC 模块提供)。

[SWS_Adc_00357]

[SRS_Adc_12817]
[SRS_Adc_12364]
  • 对于“单次转换”模式,ADC 模块应支持“硬件事件”启动条件(触发源)。“硬件事件”启动条件(触发源)是指,启动对 ADC 通道的转换是由“硬件事件”触发的(硬件事件即,定时器发生超时或边沿检测引脚检测到电平跳变)。

[SWS_Adc_00279]

[SRS_Adc_12817]
  • 对于每个 ADC 通道ADC 模块仅应配置一个启动条件(触发源)。

ADC 模块应支持以下结果访问模式:

[SWS_Adc_00382]

[SRS_Adc_12280]
  • ADC 模块应支持通过 Adc_GetStreamLastPointer 对结果进行访问。对 Adc_GetStreamLastPointer 进行调用将通知用户,关于对 ADC 通道的最后一次转换的结果在缓冲区中的位置,及 ADC 通道中的每个 ADC 通道的采样数量。缓冲区为由应用提供的外部缓冲区。

注意:

Adc_GetStreamLastPointer 适用于 ADC_ACCESS_MODE_SINGLE 及 ADC_ACCESS_MODE_STREAMING,当参数 AdcStreamingNumSamples 被配置为 1 时,对 ADC_ACCESS_MODE_SINGLE 的处理与对 ADC_ACCESS_MODE_STREAMING 的处理之间没有区别。

[SWS_Adc_00383]

[SRS_Adc_12280] 
  • ADC 模块应支持通过 Adc_ReadGroup 对结果进行访问(生成对 Adc_ReadGroup 的实现已被静态地配置)。对 Adc_ReadGroup 进行调用以将对 ADC 通道的最后一次转换的结果拷贝至应用缓冲区(起始地址由 Adc_ReadGroup 的参数指定)中。

注意:

Adc_ReadGroup 适用于 ADC_ACCESS_MODE_SINGLE 及 ADC_ACCESS_MODE_STREAMING

[SWS_Adc_00140]

[SRS_Adc_12280]
  • 对于每个完整的转换,ADC 模块应保证结果的一致性(完整性)。

注意:

可通过以下方法保证对 ADC 通道的转换的结果在应用侧的一致性(完整性):
  • 使用 ADC 通道的通知机制
  • 以轮询的方式对 Adc_GetGroupStatus 进行调用

在任何情况下,对于在缓冲区中的 ADC 通道的转换的结果,都应在其被新的转换的结果覆盖前对其进行读取(例如,Adc_ReadGroup)。当 Adc_GetGroupStatus 的返回值为 ADC_STREAM_COMPLETED 且转换正在被处理(“连续转换”模式或“硬件事件”启动条件(触发源))时,用户需要负责对在缓冲区中的转换的结果进行访问(在其被 ADC 模块覆盖前)。

[SWS_Adc_00384]

[ ]
  • ADC 模块的运行时环境需要确保其对被请求的 ADC 通道的转换的结果进行访问前,对该转换的处理已被完成。

注意:

当对被请求的 ADC 通道的转换的处理未被完成(例如,对 ADC 通道的转换的处理被用户停止)时,ADC 模块的返回值将为随机的(Adc_GetStreamLastPointer 的返回值将为 0,参数 PtrToSamplePtr 的值将为 NULL,Adc_ReadGroup 的返回值将为 E_NOT_OK)。

[SWS_Adc_00288]

[SRS_Adc_12820]
  • ADC 模块应允许对 ADC 通道的优先级进行配置。

注意:

这意味着存在一种通过软件或硬件(若支持)实现的优先级机制。具有“硬件事件”启动条件(触发源)的 ADC 通道的优先级机制总是由硬件实现。

[SWS_Adc_00310]

[SRS_Adc_12820]
  • ADC 模块的优先级机制应允许中止或重启 ADC 通道的转换。

[SWS_Adc_00345]

[ ]
  • ADC 模块的优先级机制应允许挂起或恢复 ADC 通道的转换。

[SWS_Adc_00430]

[ ]
  • ADC 模块的配置应为:在 ADC 通道的配置信息中,应存在关于是否对可被中断的 ADC 通道启用中止/重启或挂起/恢复的机制的配置。

注意:

与通过软件控制实现的通道级别的中止/重启或挂起/恢复机制不同,ADC 硬件可以实现通道级别的中止/重启或挂起/恢复机制。在通道级别实现哪一种机制取决于具体实现。

[SWS_Adc_00311]

[ ]
  • ADC 模块的优先级机制应允许对来自不同 ADC 通道的请求进行入队操作。

注意:

高优先级的 ADC 通道可以中止或挂起低优先级的 ADC 通道。在上述情况中,被中断的 ADC 通道的转换应被优先级处理程序入队,并在晚些时候被重启或恢复。此操作将不会被用户感知。

[SWS_Adc_00312]

[ ]
  • ADC 模块的优先级机制中,最低的优先级为 0。

[SWS_Adc_00289]

[SRS_Adc_12820]
  • ADC 模块的优先级机制应允许最多配置 256 个(0...255)优先级。

[SWS_Adc_00315]

[ ]
  • ADC 模块应允许关于禁用优先级机制的静态配置选项。

[SWS_Adc_00340]

[SRS_Adc_12820]
  • ADC 模块应允许关于启用优先级机制 ADC_PRIORITY_HW_SW(通过硬件及软件实现的优先级机制)的静态配置选项。当硬件不支持优先级机制时,将使用通过软件实现的优先级机制。

[SWS_Adc_00341]

[SRS_Adc_12820]
  • 当硬件支持优先级机制时,ADC 模块应允许关于启用优先级机制 ADC_PRIORITY_HW通过硬件实现的优先级机制)的静态配置选项。

注意:

当启用 ADC_PRIORITY_HW 时,具有“软件接口调用”启动条件(触发源)的 ADC 通道的优先级机制也是由硬件实现的。

[SWS_Adc_00339]

[ ]
  • 当硬件支持优先级机制且启用 ADC_PRIORITY_HW 时,ADC 模块应允许被配置的(软件)优先级(0...255)与硬件优先级之间的映射关系。

注意:

ADC 模块的具体实现将描述可用的硬件优先级,及可用的硬件优先级与 ADC 通道的优先级之间的可能的映射关系。

[SWS_Adc_00332]

[ ]
  • 当启用优先级机制时,ADC 模块应支持对转换进行入队操作。当低优先级的 ADC 通道的转换正在被处理且高优先级的 ADC 通道的转换被请求时,或当高优先级的 ADC 通道的转换正在被处理且低优先级的 ADC 通道的转换被请求时,应对低优先级的 ADC 通道的转换进行入队操作。

[SWS_Adc_00417]

[ ]
  • 当启用优先级机制时,ADC 模块应支持对转换进行入队操作。当存在两个相同优先级的 ADC 通道的转换时,应按照发起请求的时间对转换进行排序,并优先处理先发起请求的 ADC 通道的转换,及对后发起请求的 ADC 通道的转换进行入队操作。

[SWS_Adc_00333]

[ ]
  • 启用优先级机制且静态配置参数 AdcEnableQueuing 被配置为 ON 时,ADC 模块应支持对转换进行入队操作。应按照发起请求的时间对转换进行排序,并优先处理先发起请求的 ADC 通道的转换,及对后发起请求的 ADC 通道的转换进行入队操作。

注意:

在上述中被使用的队列应由软件或硬件实现。

[SWS_Adc_00335]

[ ] 
  • 当启用优先级机制或静态配置参数 AdcEnableQueuing 被配置为 ON 时,将对队列进行使用。ADC 模块应确保同一个 ADC 通道的转换的请求在队列中最多存在一次。

注意:

ADC 模块应确保同一个 ADC 通道的转换的请求在队列中最多存在一次,以避免高优先级的 ADC 通道的转换阻塞 ADC 硬件。

[SWS_Adc_00336]

[ ]
  • 不应对具有“硬件事件”启动条件(触发源)的 ADC 通道的转换(由 Adc_EnableHardwareTrigger 启用)进行入队操作。

[SWS_Adc_00337]

[ ]
  • 对于具有“硬件事件”启动条件(触发源)的 ADC 通道的转换,应使用通过硬件实现的优先级机制。

[SWS_Adc_00338]

[ ]
  • When the group status is equal to ADC_IDLE or group status is equal to ADC_STREAM_COMPLETED and if an ADC group can be implicitly stopped, then ADC module shall allow storing an additional software conversion request for the same group.

  • 当 ADC 通道状态为 ADC_IDLEADC_STREAM_COMPLETED,且 ADC 通道可被隐式地停止时,ADC 模块应允许为同一组存储额外的软件转换请求。

[SWS_Adc_00060]

[SRS_Adc_12364]
  • 如果 ADC 通道被配置了通知函数(已被启用),则 ADC 模块应在对该 ADC 通道转换(所有通道)的处理被完成时调用该通知函数。

[SWS_Adc_00413]

[ ]
  • 如果需要对不同的 ADC 通道调用 ADC 模块的函数接口,则 ADC 模块的函数接口应为可重入的,以下函数接口除外:Adc_Init、Adc_DeInit、Adc_GetVersionInfo、Adc_SetPowerState、Adc_GetTargetPowerState、Adc_GetCurrentPowerState 及 Adc_PreparePowerState。

注意:

仅当对同一个 ADC 通道的访问在同一时间只存在一个(不能同时存在多个对同一个 ADC 通道的访问时,上述的函数接口的可重入性才适用

[SWS_Adc_00503]

[ ]
  • 简单的读取函数接口(Adc_ReadGroup、Adc_GetGroupStatus)应总是可重入的,即使在对同一个 ADC 通道进行调用时也是如此。是否对保护机制(例如,启用/禁用中断)进行使用取决于具体实现。

注意:

对 Adc_ReadGroup 进行调用可以隐式地改变 ADC 通道的状态。

[SWS_Adc_00414]

[ ]
  • ADC 模块的运行时环境应检查(参阅 [SWS_Adc_00413]),是否在不同的任务或 ISR 中存在同一个 ADC 通道的访问。

[SWS_Adc_00415]

[ ]
  • ADC 模块应检查(参阅 [SWS_Adc_00413]),是否在不同的任务或 ISR 中存在同一个 ADC 通道的访问。

[SWS_Adc_00445]

[ ]
  • ADC 模块应允许为 ADC 通道配置条件检查。

[SWS_Adc_00446]

[ ]
  • 如果对 ADC 通道启用了条件检查,则仅当条件检查(取值符合取值范围)通过时,ADC 通道的转换的结果才会被认为是有效的,并被写入用户指定的缓存中。

[SWS_Adc_00447]

[ ]
  • 如果对 ADC 通道启用了条件检查,则仅当条件检查(取值符合取值范围)通过时,ADC 通道的转换的结果才会被认为是有效的,并触发 ADC 通道的状态的切换。

[SWS_Adc_00448]

[ ]
  • 对于具有“软件接口调用”启动条件(触发源)的 ADC 通道的转换,且当前为“连续转换”模式,如果对 ADC 通道启用了条件检查,则仅当条件检查(取值符合取值范围)通过时,ADC 通道的转换的结果才会被认为是有效的。当条件检查(取值不符合取值范围)未通过时,ADC 通道的转换的结果应被忽略,且转换将被重新触发。

[SWS_Adc_00449]

[ ]
  • 对于具有“软件接口调用”启动条件(触发源)的 ADC 通道的转换,且当前为“单次转换”模式,如果对 ADC 通道启用了条件检查,则仅当条件检查(取值符合取值范围)通过时,ADC 通道的转换的结果才会被认为是有效的。当条件检查(取值不符合取值范围)未通过时,ADC 通道的转换的结果应被忽略,且 ADC 通道的状态将保持为 ADC_BUSY

注意:

对于具有“软件接口调用”启动条件(触发源)的 ADC 通道的转换,且当前为“单次转换”模式,当条件检查(取值不符合取值范围)未通过时,在再次触发 ADC 通道的转换之前,应先通过对 Adc_StopGroupConversion 进行调用使 ADC 通道的状态被切换为 ADC_IDLE

[SWS_Adc_00450]

[ ] 
  • 对于具有“硬件事件”启动条件(触发源)的 ADC 通道的转换,且当前为“单次转换”模式,如果对 ADC 通道启用了条件检查,则仅当条件检查(取值符合取值范围)通过时,ADC 通道的转换的结果才会被认为是有效的。当条件检查(取值不符合取值范围)未通过时,ADC 通道的转换的结果应被忽略,且转换将被(硬件触发器)重新触发。

缓冲区的访问模式的示例



示例:配置

此示例配置包含三个 ADC 通道。组 1 包含 2 个通道,组 2 和组 3 都只包含 1 个通道。组 1 和组 2 被配置为 ADC_ACCESS_MODE_STREAMING,组 3 被配置为 ADC_ACCESS_MODE_SINGLEADC 模块应将这 3 个 ADC 通道的转换的结果保存至对应的缓冲区中,可通过被配置的 ADC_RESULT_POINTER 对缓冲区进行访问。被配置的 ADC_RESULT_POINTER 如下:G1_ResultPtr,G2_ResultPtr 及 G3_ResultPtr。

示例:初始化

用户需要为 ADC 通道分配缓冲区(用于保存 ADC 通道的转换的结果)。每个 ADC 通道具有专用的缓冲区。缓冲区的大小由 ADC 通道通道的数量,访问模式以及参数 AdcStreamingNumSamples 的值(访问模式为 ADC_ACCESS_MODE_STREAMING 时)决定。在启动 ADC 通道的转换前,用户需要通过对 Adc_SetupResultBuffer 进行调用初始化 ADC 通道的转换的结果的指针(Adc_SetupResultBuffer 将 ADC 通道的转换的结果的指针设置为 ADC 通道的专用的缓冲区的地址)。

示例:Adc_GetStreamLastPointer 的使用方式

ADC 模块将 ADC 通道 G1,G2 及 G3 的转换的结果保存至专用的缓冲区 G1_ResultBuffer[],G2_ResultBuffer[] 及 G3_ResultBuffer[] 中。ADC 模块不支持在其函数接口内对 ADC 硬件中的保存 ADC 通道的转换的结果的寄存器直接进行访问。

用户将提供 3 个指针 G1_SamplePtr,G2_SamplePtr 及 G3_SamplePtr,在对 Adc_GetStreamLastPointer 进行调用后,这三个指针将指向与其对应的 ADC 通道的专用的缓冲区。在对 Adc_GetStreamLastPointer 进行调用后,指针 G1_SamplePtr 将会指向保存 G1_CH0 的最后一次转换的结果(G1_CH0 是 ADC 通道 G1 的第一个通道)。保存结果的缓冲区的布局如图 2 所示。在 ADC 通道 G1 的缓冲区中,存在三次 G1_CH0 的转换的结果,以及三次 G1_CH1 的转换的结果。根据缓冲区的布局,用户可以访问各个通道的最后一次转换的结果。在对 Adc_GetStreamLastPointer 进行调用后,指针 G2_SamplePtr 将会指向保存 G2_CH2 的最后一次转换的结果(G2_CH2 是 ADC 通道 G2 的第一个通道),指针 G3_SamplePtr 将会指向保存 G3_CH3 的最后一次转换的结果(G3_CH3 是 ADC 通道 G3 的第一个通道)。ADC 通道 G2 和 G3 都只包含 1 个通道。指针 G2_SamplePtr 将会指向其中一次 G2_CH2 的转换的结果。指针 G3_SamplePtr 将会指向 G3_CH3 的转换的结果,因为 ADC 通道 G3 被配置为 ADC_ACCESS_MODE_SINGLE

Adc_GetStreamLastPointer 将会返回每个通道的有效采样的次数(ADC 通道的转换的次数),采样的结果将被保存在 ADC 通道专用的缓冲区中。如果返回的次数等于参数 AdcStreamingNumSamples 被配置的值,则认为缓冲区中的所有结果为有效的。如果返回的次数为 0,则认为缓冲区中的所有结果为无效的(指向保存转换的结果的缓冲区的指针将被设置为 NULL)。

为了方便使用,Adc_GetStreamLastPointer 被定义为传递指向“指向结果的指针”的指针,而不是“指向结果的指针”本身。

示例:Adc_ReadGroup 的使用方式

如果启用了可选函数 Adc_ReadGroup,用户应为选定的 ADC 通道提供额外的缓冲区,用于保存 ADC 通道的转换的结果。通过对 Adc_ReadGroup 进行调用以将 ADC 通道的最后一次转换的结果从保存 ADC 通道的转换的结果的专用的缓冲区拷贝至为选定的 ADC 通道提供的额外的缓冲区中。例如,为 ADC 通道 G2 和 G3 提供额外的缓冲区 G2_G3_ReadBuffer。

转换处理与交互

背景与理由

根据 ADC 通道和转换模式,以下示例指定 ADC 通道的转换的顺序: 
  • 示例 1:ADC 通道包含通道 CH0,CH1,CH2,CH3 及 CH4)被配置为“连续转换”模式。当每次转换结束时,通知函数接口(若已启用)将会被调用。然后,下一次转换将被启动。
  • 示例 2:ADC 通道包含通道 CH0,CH1,CH2,CH3 及 CH4)被配置为“单次转换”模式。当转换结束时,通知函数接口(若已启用)将会被调用。
  • 示例 3:ADC 通道包含通道 CH3)被配置为“连续转换”模式。当每次转换结束时,通知函数接口(若已启用)将会被调用。然后,下一次转换将被启动。
  • 示例 4:ADC 通道包含通道 CH4)被配置为“单次转换”模式。当转换结束时,通知函数接口(若已启用)将会被调用。


需求

[SWS_Adc_00280]

[SRS_Adc_12447]
  • 对于每个 ADC 硬件单元,ADC 模块在同一时刻只能对一个 ADC 通道进行转换。ADC 模块不支持在同一时刻对同一个 ADC 硬件单元上的不同的 ADC 通道(即使为互斥的)进行转换。

注意:

根据硬件的能力,在同一时刻对不同 ADC 硬件单元上的 ADC 通道进行转换是可能的。在同一时刻对同一个 ADC 通道中的不同通道进行转换也是可能的(如果硬件支持)。

注意:

如果一个通道被用于不同的转换模式(例如,在正常情况下被用于“连续转换”模式,在某个特殊时刻被用于“单次转换”模式),该通道应被分配给被配置为对应的转换模式的不同的 ADC 通道

注意:

为了启动对被分配给不同的 ADC 通道的通道的转换,用户需要先停止正在被处理的包含此通道的 ADC 通道的转换,然后启动包含此通道的另一个 ADC 通道的转换。

状态图

ADC 模块具有如下图所示的状态机。这些状态特定于不同的 ADC 通道,而非特定于 ADC 模块。图中显示了 ADC 通道的所有可能的配置选项。状态的切换取决于 ADC 通道的配置。

单次转换 / 连续转换”模式的状态图


单次转换”模式中的“硬件事件 / 软件接口调用”启动条件(触发源)的状态图


连续转换”模式中的“软件接口调用”启动条件(触发源)的状态图


单次转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC_ACCESS_MODE_SINGLE 的状态图


单次转换”模式中的“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_SINGLE 的状态图


单次转换”模式中的“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULARADC_STREAM_BUFFER_LINEAR 的状态图


连续转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC_ACCESS_MODE_SINGLE 的状态图


连续转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULAR / ADC_STREAM_BUFFER_LINEAR 的状态图


对硬件的低功耗模式的支持与管理

某些 ADC 硬件允许被设置为某种运行模式以降低功耗,尽管其代价为响应时间变慢、性能下降,甚至完全地不可用。每个 ADC 模块支持一种或多种低功耗模式,全功率模式将始终存在,并在启动时被默认地设置。

背景

ADC 模块提供对电源状态进行控制的函数接口及后台处理机制来处理异步的电源状态的切换(即,电源状态的切换不能(按照请求)被立即地完成,且需要一些额外的操作)。

假定所有来自 ECU 和软件架构的约束都已由上层(应用程序、服务层中的模式管理、控制外设的 IoHwAbstraction 组件)满足,因此,由 ADC 模块提供的对电源状态的控制的范围仅限于 ADC 硬件。

ADC 模块将对操作序列进行检查以避免,在对前一个请求的处理被完成前请求不同的电源状态,或在准备操作被完成前对电源状态进行切换。

ADC 模块应把对电源状态的控制作为可选功能。ADC 模块不应强制对支持电源管理的 MCU 进行使用和配置,相反其只提供了一种对电源状态进行控制的方式(若供应商支持)。

需求

[SWS_Adc_00462]

[ ]
  • 当参数 AdcLowPowerStatesSupport 被配置为 TRUE 时,ADC 模块应支持对电源状态进行控制及与控制相关的函数接口。

[SWS_Adc_00463]

[ ]
  • 当参数 AdcLowPowerStatesSupport 被配置为 TRUE 时,应生成对 Adc_PreparePowerState,Adc_SetPowerState,Adc_GetCurrentPowerState,Adc_GetTargetPowerState 的实现,并使用这些函数接口来管理电源状态的切换及获取有关电源状态的切换的信息。

[SWS_Adc_00464]

[ ] 
  • Adc_GetTargetPowerState 及 Adc_GetCurrentPower 应被分别地使用,以获取有关被请求的电源状态及目标电源状态。

[SWS_Adc_00465]

[ ]
  • Adc_PreparePowerState 应被用于启动电源状态的切换。

[SWS_Adc_00466]

[ ]
  • 当已通过对 Adc_PreparePowerState 进行调用完成电源状态的切换所需的前置操作时,应对 Adc_SetPowerState 进行调用以设置被请求的电源状态(ADC 模块)。
  • 为了避免电源状态的切换出现顺序错误,一些函数接口(Adc_SetPowerState,Adc_PreparePowerState)应在给定的序列中被调用,否则将会引发错误(若 DET 错误追踪被启用)并导致操作被中断。ADC 模块应对调用序列进行追踪。

[SWS_Adc_00467]

[ ]
  • ADC 模块应对 Adc_Set PowerState 及 Adc_PreparePowerState 的调用序列进行追踪,当 Adc_Set PowerState 在 Adc_PreparePowerState 被调用之前被调用,应向 DET 报告错误,并且操作将被中止。

[SWS_Adc_00469]

[ ]
  • 当参数 AdcLowPowerStatesSupport 被配置为 TRUE 时,ADC 模块应对当前电源状态及目标电源状态进行追踪。

[SWS_Adc_00470]

[ ]
  • 当参数 AdcLowPowerStatesSupport 被配置为 TRUE 时,ADC 模块的电源状态在初始化后应总是为全功率模式。

[SWS_Adc_00471]

[ ]
  • 根据参数 AdcPowerStateAsynchTransitionMode 被配置的值,ADC 模块应支持同步或异步的电源状态的切换。

[SWS_Adc_00472]

[ ]
  • 当参数 AdcPowerStateAsynchTransitionMode 被配置为 FALSE 时,与电源状态进行切换前的准备和对电源状态进行设置相关的处理在函数接口返回时应被完成。

[SWS_Adc_00473]

[ ]
  • 当参数 AdcPowerStateAsynchTransitionMode 被配置为 TRUE 时,与电源状态进行切换前的准备相关的处理在函数接口返回时应在后台继续,应通过对被配置的回调函数接口进行调用通知相关模块关于处理的完成。

错误分类

开发错误

[SWS_Adc_91005]

[ ]

运行时错误

[SWS_Adc_91006]

[ ]

API 规范


导入的类型

本章列出了以下模块包含的所有类型:

[SWS_Adc_00364]

[ ]

类型定义

Adc_ConfigType 

[SWS_Adc_00505]

[ ]

Adc_ChannelType 

[SWS_Adc_00506]

[ ]

Adc_GroupType 

[SWS_Adc_00507]

[ ]

Adc_ValueGroupType 

[SWS_Adc_00508]

[ ]

结果应被保存在数据类型为整数的缓存区中,例如,数据类型为整数的数组。

以下规则适用于本实现:

[SWS_Adc_00318]

[SRS_Adc_12819]
  • 在 ADC_ACCESS_MODE_SINGLE 模式下,缓冲区中的元素的个数应等于 ADC 通道的通道的数量。每个元素与一个通道相对应,缓冲区中的元素的排列顺序与 ADC 通道的通道的排列顺序一致。

[SWS_Adc_00319]

[SRS_Adc_12825]
  • 在 ADC_ACCESS_MODE_STREAMING 模式下,缓冲区中的元素的个数应等于 m*n,n 等于 ADC 通道的通道的数量,m 等于参数 AdcStreamingNumSamples 被配置的值。在缓冲区中,起始的 m 个元素属于 ADC 通道的首个通道,之后的 m 个元素属于 ADC 通道的第二个通道,以此类推。

[SWS_Adc_00320]

[SRS_Adc_12822]
  • 缓冲区中的元素(整数类型)的数据大小(以位(bit)为单位)应该是一致的,以所有通道中的元素中数据大小最大的元素的数据大小(以位(bit)为单位)为准。

注意:

仅当所有 ADC 通道的所有通道的精度都是 8 bit 时,参数 Adc_ValueGroupType 才能被配置为 8 bit。

注意:

可通过 ADC 通道的配置数据得出 ADC 通道的通道的数量及每个通道所需的样本的数量。

Adc_PrescaleType 

[SWS_Adc_00509]

[ ]

Adc_ConversionTimeType

[SWS_Adc_00510]

[ ]

Adc_SamplingTimeType 

[SWS_Adc_00511]

[ ]

Adc_ResolutionType

[SWS_Adc_00512]

[ ]

Adc_StatusType 

[SWS_Adc_00513]

[ ]

Adc_TriggerSourceType

[SWS_Adc_00514]

[ ]

Adc_GroupConvModeType 

[SWS_Adc_00515]

[ ]

Adc_GroupPriorityType 

[SWS_Adc_00516]

[ ]

Adc_GroupDefType 

[SWS_Adc_00517]

[ ]

Adc_StreamNumSampleType 

[SWS_Adc_00518]

[ ]

Adc_StreamBufferModeType 

[SWS_Adc_00519]

[ ]

Adc_GroupAccessModeType 

[SWS_Adc_00528]

[ ]

Adc_HwTriggerSignalType 

[SWS_Adc_00520]

[ ]

Adc_HwTriggerTimerType 

[SWS_Adc_00521]

[ ]

Adc_PriorityImplementationType 

[SWS_Adc_00522]

[ ]

Adc_GroupReplacementType 

[SWS_Adc_00523]

[ ]

Adc_ChannelRangeSelectType 

[SWS_Adc_00524]

[ ]

Adc_ResultAlignmentType 

[SWS_Adc_00525]

[ ]

Adc_PowerStateType 

[SWS_Adc_00526]

[ ]

Adc_PowerStateRequestResultType 

[SWS_Adc_00527]

[ ]

函数定义

Adc_Init 

[SWS_Adc_00365]

[ ]

[SWS_Adc_00054]

[SRS_BSW_00405]
[SRS_BSW_00101]
[SRS_BSW_00414]
[SRS_SPAL_12057]
[SRS_SPAL_12461]
  • 在后构建模式中,Adc_Init 应根据参数 ConfigPtr 引用的配置初始化 ADC 硬件单元及 ADC 模块。

[SWS_Adc_00056]

[SRS_SPAL_12125]
  • Adc_Init 应仅初始化被配置的(硬件或软件)资源,配置未涉及的(硬件或软件)资源应被忽略。

以下关于对控制寄存器进行初始化的规则适用于本实现:

[SWS_Adc_00246]

[SRS_SPAL_12461]
  • 如果仅允许对一个寄存器进行一次访问,实现对应功能的 ADC 模块应负责对其进行初始化。

[SWS_Adc_00247]

[SRS_SPAL_12461]
  • 如果对一个寄存器的修改将影响不同的硬件模块(CAN,SPI,ADC...)且此寄存器为 I/O 寄存器,则 Port 模块应负责对此寄存器进行初始化。

[SWS_Adc_00248]

[SRS_SPAL_12461]
  • 如果对一个寄存器的修改将影响不同的硬件模块(CAN,SPI,ADC...)且此寄存器为 I/O 寄存器,则 MCU 模块应负责对此寄存器进行初始化。

[SWS_Adc_00249]

[SRS_SPAL_12461]
  • 如果仅允许对一个寄存器进行一次写入,且复位后需要对其直接地进行初始化,则启动代码应负责对此寄存器进行初始化。

[SWS_Adc_00250]

[SRS_SPAL_12461]
  • 启动代码应负责对所有其他的寄存器进行初始化。

[SWS_Adc_00077]

[SRS_Adc_12318]
  • Adc_Init 应禁用通知函数接口及硬件触发源(若被静态地配置为启用)。

[SWS_Adc_00307]

[ ]
  • Adc_Init 应将所有 ADC 通道的状态设置为 ADC_IDLE

[SWS_Adc_00107]

[SRS_BSW_00406]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当 ADC 模块及 ADC 硬件已被初始化且对 Adc_Init 进行调用时,Adc_Init 应上报开发错误 ADC_E_ALREADY_INITIALIZED  并直接返回(不进行任何操作)。

Adc_SetupResultBuffer 

[SWS_Adc_91000]

[ ]

[SWS_Adc_00420]

[ ]
  • Adc_SetupResultBuffer 应使用参数 DataBufferPtr 的值初始化指向保存给定的 ADC 通道的转换的结果的缓冲区的指针。

[SWS_Adc_00421]

[ ]
  • ADC 模块的运行时环境应确保在对指向保存给定的 ADC 通道的转换的结果的缓冲区的指针进行初始化(以使该指针指向一个有效的缓冲区)之前,不会启动任何 ADC 通道的转换。

[SWS_Adc_00422]

[ ]
  • ADC 模块的运行时环境应确保由 Adc_SetupResultBuffer 的参数 DataBufferPtr 提供的缓冲区的大小满足存放 ADC 通道的所有通道的转换的结果的需求,在 ADC_ACCESS_MODE_STREAMING 模式下,缓冲区的大小应满足参数 AdcStreamingNumSamples 的需求(参见 [SWS_Adc_00292])。

[SWS_Adc_00423]

[ ]
  • 如果开发错误检测被启用,当对 Adc_SetupResultBuffer 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_SetupResultBuffer 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00433]

[ ]
  • 如果开发错误检测被启用,当对 Adc_SetupResultBuffer 进行调用且给定的 ADC 通道的状态不为 ADC_IDLE 时,Adc_SetupResultBuffer 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00434]

[ ]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_SetupResultBuffer 进行调用时,Adc_SetupResultBuffer 应上报开发错误 ADC_E_UNINIT

[SWS_Adc_00457]

[ ]
  • 如果开发错误检测被启用,当对 Adc_SetupResultBuffer 进行调用且参数 DataBufferPtr 的值为 NULL_PTR 时,Adc_SetupResultBuffer 应上报开发错误 ADC_E_PARAM_POINTER

Adc_DeInit 

[SWS_Adc_00366]

[ ]

[SWS_Adc_00110]

[SRS_SPAL_12163]
  • Adc_DeInit 应将所有 ADC 硬件单元的状态恢复为其上电复位后的状态(不可进行写入操作的寄存器除外)。硬件设计应确保该状态在 MCU 中不会导致未被定义的行为。

[SWS_Adc_00111]

[SRS_BSW_00336]
[SRS_SPAL_12163]
  • Adc_DeInit 应禁用所有(此模块中)被使用的中断及通知函数接口。

[SWS_Adc_00358]

[ ]
  • ADC 模块的运行时环境应确保当存在 ADC 通道的状态不为 ADC_IDLE 时,不会对 Adc_ DeInit 进行调用。

[SWS_Adc_00228]

[SRS_BSW_00171]
  • 应支持通过在预编译阶段对参数 AdcDeInitApi 进行配置来启用/禁用 Adc_DeInit。

[SWS_Adc_00112]

[ ]
  • 当对 Adc_ DeInit 进行调用时,若并非所有 ADC 通道的状态都为 ADC_IDLE 或 ADC_STREAM_COMPLETED,且当前不存在正在被处理的 ADC 通道(存在个别 ADC 通道被隐式地停止)的转换,Adc_ DeInit 应报告运行时错误。

[SWS_Adc_00154]

[SRS_BSW_00406]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_DeInit 进行调用时,Adc_DeInit 应上报开发错误 ADC_E_UNINIT 并直接返回(不进行任何操作)。

Adc_StartGroupConversion 

[SWS_Adc_00367]

[ ]

[SWS_Adc_00061]

[SRS_Adc_12364]
  • Adc_StartGroupConversion 应启动被请求的 ADC 通道中的所有通道的转换,根据 ADC 通道的配置,将会启动“单次转换”或“连续转换”。

[SWS_Adc_00431]

[ ]
  • Adc_StartGroupConversion 应重置 ADC 模块内部指向保存给定的 ADC 通道的转换的结果的缓冲区的指针,在对 Adc_StartGroupConversion 进行调用后,将总是从通过 Adc_SetupResultBuffer 指定的保存给定的 ADC 通道的转换的结果的缓冲区的基地址开始对转换的结果进行保存。

[SWS_Adc_00156]

[SRS_Adc_12317]
[SRS_Adc_12318]
  • Adc_StartGroupConversion 不应自动地启用给定的 ADC 通道的通知机制(应通过特定的函数接口启用/禁用)。

[SWS_Adc_00146]

[SRS_Adc_12817]
[SRS_Adc_12364]
  • ADC 模块的运行时环境应仅对具有“软件接口调用”启动条件(触发源)的 ADC 通道调用 Adc_StartGroupConversion。

[SWS_Adc_00259]

[SRS_BSW_00171]
  • 应支持通过在预编译阶段对参数 AdcEnableStartStopGroupApi 进行配置来启用/禁用 Adc_StartGroupConversion。

[SWS_Adc_00125]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_StartGroupConversion 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_StartGroupConversion 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00133]

[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_StartGroupConversion 进行调用且给定的 ADC 通道具有“硬件事件”启动条件(触发源)时,Adc_StartGroupConversion 应上报开发错误 ADC_E_WRONG_TRIGG_SRC 并直接返回(不进行任何操作)。

[SWS_Adc_00346]

[ ]
  • 如果优先级机制被禁用且静态配置参数 AdcEnableQueuing 被配置为 OFF,当对 Adc_StartGroupConversion 进行调用且存在状态不为 ADC_IDLE 的 ADC 通道可被隐式地停止)时,Adc_StartGroupConversion 应上报运行时错误 ADC_E_BUSY

注意:

存在状态不为 ADC_IDLE 的 ADC 通道意味着:
  • 存在正在被处理的转换
  • 存在被激活的“硬件事件”启动条件(触发源)

[SWS_Adc_00426]

[ ]
  • 如果优先级机制被禁用且静态配置参数 AdcEnableQueuing 被配置为 OFF,当对 Adc_StartGroupConversion 进行调用且存在状态不为 ADC_IDLE 或 ADC_STREAM_COMPLETED 的 ADC 通道(可被隐式地停止)时,Adc_StartGroupConversion 应上报运行时错误 ADC_E_BUSY

注意:

可被隐式地停止的 ADC 通道意味着:
  • 单次转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC_ACCESS_MODE_SINGLE 的 ADC 通道
  • 连续转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR 的 ADC 通道
  • 单次转换”模式中的“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR 的 ADC 通道

[SWS_Adc_00348]

[ ]
  • 如果优先级机制被启用,当对 Adc_StartGroupConversion 进行调用且存在状态不为 ADC_IDLE 的 ADC 通道可被隐式地停止)时,Adc_StartGroupConversion 应上报运行时错误 ADC_E_BUSY

注意:

存在状态不为 ADC_IDLE 的 ADC 通道意味着:
  • 当前被请求的 ADC 通道的转换正在被处理
  • 此前已对当前被请求的 ADC 通道的转换进行了入队操作。

[SWS_Adc_00427]

[ ]
  • 如果优先级机制被启用,当对 Adc_StartGroupConversion 进行调用且存在状态不为 ADC_IDLE 或 ADC_STREAM_COMPLETED 的 ADC 通道(可被隐式地停止)时,Adc_StartGroupConversion 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00351]

[ ]
  • 如果优先级机制被禁用且静态配置参数 AdcEnableQueuing 被配置为 ON,当对 Adc_StartGroupConversion 进行调用且存在状态不为 ADC_IDLE 的 ADC 通道可被隐式地停止)时,Adc_StartGroupConversion 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00428]

[ ]
  • 如果优先级机制被禁用且静态配置参数 AdcEnableQueuing 被配置为 ON,当对 Adc_StartGroupConversion 进行调用且存在状态不为 ADC_IDLE 或 ADC_STREAM_COMPLETED 的 ADC 通道(可被隐式地停止)时,Adc_StartGroupConversion 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00294]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_StartGroupConversion 进行调用时,Adc_StartGroupConversion 应上报开发错误 ADC_E_UNINIT

[SWS_Adc_00424]

[ ]
  • 如果开发错误检测被启用,当未通过对 Adc_SetupResultBuffer 进行调用对指向保存给定的 ADC 通道的转换的结果的缓冲区的指针进行初始化(以使该指针指向一个有效的缓冲区),且对 Adc_StartGroupConversion 进行调用时,Adc_StartGroupConversion 应上报开发错误 ADC_E_BUFFER_UNINIT

Adc_StopGroupConversion 

[SWS_Adc_00368]

[ ]

[SWS_Adc_00385]

[SRS_Adc_12364]
  • 对于“单次转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC 通道,Adc_StopGroupConversion 应停止该 ADC 通道的正在被处理的转换。

[SWS_Adc_00437]

[ ]
  • 对于“单次转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC 通道,如果 AdcEnableQueuing 被配置为 ON 且已对该 ADC 通道的转换(启动/重启请求)进行了入队操作,Adc_StopGroupConversion 应对该 ADC 通道的转换(启动/重启请求)进行出队操作。

[SWS_Adc_00386]

[SRS_Adc_12364]
  • 对于“连续转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC 通道,Adc_StopGroupConversion 应停止该 ADC 通道的正在被处理的转换。

[SWS_Adc_00438]

[ ]
  • 对于“连续转换”模式中的“软件接口调用”启动条件(触发源)下的 ADC 通道,如果 AdcEnableQueuing 被配置为 ON 且已对该 ADC 通道的转换(启动/重启请求)进行了入队操作,Adc_StopGroupConversion 应对该 ADC 通道的转换(启动/重启请求)进行出队操作。

[SWS_Adc_00155]

[SRS_Adc_12317]
  • Adc_StopGroupConversion 应自动地禁用给定的 ADC 通道的通知函数接口。

注意:

不应禁用被隐式停止的 ADC 通道的通知函数接口,直到对该 ADC 通道调用 Adc_StopGroupConversion。

[SWS_Adc_00360]

[ ]
  • Adc_StopGroupConversion 应将给定的 ADC 通道的状态设置为 ADC_IDLE

[SWS_Adc_00283]

[SRS_Adc_12817]
  • ADC 模块的运行时环境应仅对具有“软件接口调用”启动条件(触发源)的 ADC 通道调用 Adc_StopGroupConversion。

[SWS_Adc_00260]

[SRS_BSW_00171]
  • 应支持通过在预编译阶段对参数 AdcEnableStartStopGroupApi 进行配置来启用/禁用 Adc_StopGroupConversion。

[SWS_Adc_00126]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_StopGroupConversion 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_StopGroupConversion 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00164]

[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_StopGroupConversion 进行调用且给定的 ADC 通道具有“硬件事件”启动条件(触发源)时,Adc_StopGroupConversion 应上报开发错误 ADC_E_WRONG_TRIGG_SRC 并直接返回(不进行任何操作)。

[SWS_Adc_00241]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 当对 Adc_StopGroupConversion 进行调用且给定的 ADC 通道的状态为 ADC_IDLE,Adc_StopGroupConversion 应上报运行时错误 ADC_E_IDLE

注意:

对于被隐式地停止的 ADC 通道(“单次转换”模式或 ADC_STREAM_BUFFER_LINEAR),其状态将为 ADC_STREAM_COMPLETED,直到对其调用 Adc_ReadGroup 或 Adc_GetStreamLastPointer,或直到其被显式地停止(对其调用 Adc_StopGroupConversion)。

[SWS_Adc_00295]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_StopGroupConversion 进行调用时,Adc_StopGroupConversion 应上报开发错误 ADC_E_UNINIT 并直接返回(不进行任何操作)。

注意:

所有由 Adc_StartGroupConversion 启动的 ADC 通道都应由 Adc_StopGroupConversion 停止,在被重新启动前,应将 ADC 通道的状态重置为 ADC_IDLE。例外情况为,由于被配置的模式(“单次转换”模式中的 ADC_ACCESS_MODE_SINGLE 或 ADC_STREAM_BUFFER_LINEAR)而被隐式地停止的 ADC 通道。当例外情况中的 ADC 通道的状态为 ADC_STREAM_COMPLETED 时,可重新启动这些 ADC 通道

Adc_ReadGroup 

[SWS_Adc_00369]

[ ]

[SWS_Adc_00075]

[ ]
  • Adc_ReadGroup 应读取给定的 ADC 通道的最新的转换的结果。

[SWS_Adc_00113]

[SRS_SPAL_12063]
[SRS_Adc_12819]
[SRS_Adc_12292]
[SRS_Adc_12824]
  • Adc_ReadGroup 应读取转换后的原始值,无需对转换后的值进行进一步的处理。应根据配置参数 ADC_RESULT_ALIGNMENT 被配置的值对读取的值进行对齐。

[SWS_Adc_00122]

[SRS_Adc_12283]
[SRS_Adc_12819]
  • Adc_ReadGroup 应屏蔽由转换提供但不属于转换的结果的所有信息及诊断位(bit)(如适用)。

[SWS_Adc_00329]

[SRS_Adc_12291]
  • 对于“连续转换”模式中的“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_SINGLE 或 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULAR 的 ADC 通道,当该 ADC 通道的状态为 ADC_STREAM_COMPLETED 且对该 ADC 通道调用 Adc_ReadGroup 时,该 ADC 通道的状态应切换为 ADC_BUSY

[SWS_Adc_00330]

[SRS_Adc_12291]
  • 对于转换将会自动地停止(ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR 或“单次转换”模式中的 ADC_ACCESS_MODE_SINGLE)的“软件接口调用”启动条件(触发源)下的 ADC 通道,以及“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR 的 ADC 通道,当该 ADC 通道的状态为 ADC_STREAM_COMPLETED 且对该 ADC 通道调用 Adc_ReadGroup 时,该 ADC 通道的状态应切换为 ADC_IDLE

[SWS_Adc_00331]

[SRS_Adc_12291]
  • 当该 ADC 通道的状态为 ADC_COMPLETED 且对该 ADC 通道调用 Adc_ReadGroup 时,该 ADC 通道的状态应切换为 ADC_BUSY

[SWS_Adc_00359]

[ ]
  • 应支持通过在预编译阶段对参数 AdcReadGroupApi 进行配置来启用/禁用 Adc_ReadGroup。

[SWS_Adc_00388]

[ ]
  • 当对 Adc_ReadGroup 进行调用且给定的 ADC 通道的状态为 ADC_IDLE,该 ADC 通道的转换未被启动(不存在有效的上一次转换的结果)时,Adc_ReadGroup 应上报运行时错误 ADC_E_IDLE

[SWS_Adc_00152]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_ReadGroup 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_ReadGroup 应上报开发错误 ADC_E_PARAM_GROUP 并返回 E_NOT_OK(不进行任何操作)。

[SWS_Adc_00296]

[ ]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_ReadGroup 进行调用时,Adc_ReadGroup 应上报开发错误 ADC_E_UNINIT 并返回 E_NOT_OK(不进行任何操作)。

Adc_EnableHardwareTrigger 

[SWS_Adc_91001]

[ ]

[SWS_Adc_00114]

[SRS_Adc_12823]
  • Adc_EnableHardwareTrigger 应启用给定的 ADC 通道的硬件触发源。

注意:

应仅对由 ADC 硬件控制的 ADC 内部触发源使用 Adc_EnableHardwareTrigger。

[SWS_Adc_00144]

[SRS_Adc_12823]
  • 如果通过对 Adc_EnableHardwareTrigger 进行调用启用一个 ADC 通道的硬件触发源,则每当该硬件触发源的“硬件事件”发生时,都应对该 ADC 通道中的通道的转换进行处理。

[SWS_Adc_00432]

[ ]
  • Adc_EnableHardwareTrigger 应重置 ADC 模块内部指向保存给定的 ADC 通道的转换的结果的缓冲区的指针,在对 Adc_EnableHardwareTrigger 进行调用后,将总是从通过 Adc_SetupResultBuffer 指定的保存给定的 ADC 通道的转换的结果的缓冲区的基地址开始对转换的结果进行保存。

[SWS_Adc_00273]

[SRS_Adc_12823]
  • ADC 模块的运行时环境应确保在同一个 ADC 硬件单元中不会出现存在并发的转换的情况(在同一时刻不同的硬件触发源的“硬件事件”发生)。

注意:

The reason for SWS_Adc_00273 is that the ADC module can only handle one group conversion request per HW Unit at the same time. In case of concurrent HW conversion requests, the HW prioritization mechanism controls the conversion order.

[SWS_Adc_00273] 的理由为:对于每个 ADC 硬件单元,在同一时刻 ADC 硬件只能对一个 ADC 通道的转换进行处理。对于存在并发的转换的请求的情况,通过硬件实现的优先级机制将决定对转换的处理的顺序。

[SWS_Adc_00120]

[SRS_BSW_00171]
  • ADC 模块的运行时环境应仅对具有“硬件事件”启动条件(触发源)的 ADC 通道调用 Adc_EnableHardwareTrigger(参见 AdcGroupTriggSrc)。

[SWS_Adc_00265]

[SRS_BSW_00171]
  • 应支持通过在预编译阶段对参数 AdcHwTriggerApi 进行配置来启用/禁用 Adc_EnableHardwareTrigger。

[SWS_Adc_00321]

[ ]
  • 如果优先级机制被禁用且静态配置参数 AdcEnableQueuing 被配置为 OFF,当对 Adc_EnableHardwareTrigger 进行调用且存在状态不为 ADC_IDLE 的具有“软件接口调用”启动条件(触发源)的 ADC 通道时,Adc_EnableHardwareTrigger 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00349]

[ ]
  • 如果一个 ADC 通道的硬件触发源已被启用,则当对该 ADC 通道调用 Adc_EnableHardwareTrigger 时,Adc_EnableHardwareTrigger 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00353]

[ ]
  • 如果所有可用的硬件触发源(特定于设备和实现)都已被启用,当对 Adc_EnableHardwareTrigger 进行调用时,Adc_EnableHardwareTrigger 应上报运行时错误 ADC_E_BUSY

[SWS_Adc_00128]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_EnableHardwareTrigger 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_EnableHardwareTrigger 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00136]

[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_EnableHardwareTrigger 进行调用且给定的 ADC 通道具有“软件接口调用”启动条件(触发源)时,Adc_EnableHardwareTrigger 应上报开发错误 ADC_E_WRONG_TRIGG_SRC 并直接返回(不进行任何操作)。

[SWS_Adc_00281]

[SRS_Adc_12823]
  • 如果开发错误检测被启用,当对 Adc_EnableHardwareTrigger 进行调用且给定的具有“硬件事件”启动条件(触发源)的 ADC 通道被错误地配置为“连续转换”模式时,Adc_EnableHardwareTrigger 应上报开发错误 ADC_E_WRONG_CONV_ MODE 并直接返回(不进行任何操作)。

注意:

对于具有“软件接口调用”启动条件(触发源)的 ADC 通道被配置为“连续转换”模式的情况,Adc_EnableHardwareTrigger 应上报开发错误 ADC_E_WRONG_TRIGG_SRC

[SWS_Adc_00297]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_EnableHardwareTrigger 进行调用时,Adc_EnableHardwareTrigger 应上报开发错误 ADC_E_UNINIT 并直接返回(不进行任何操作)。

[SWS_Adc_00425]

[ ]
  • 如果开发错误检测被启用,当未通过对 Adc_SetupResultBuffer 进行调用对指向保存给定的 ADC 通道的转换的结果的缓冲区的指针进行初始化(以使该指针指向一个有效的缓冲区),且对 Adc_EnableHardwareTrigger 进行调用时,Adc_EnableHardwareTrigger 应上报开发错误 ADC_E_BUFFER_UNINIT

Adc_DisableHardwareTrigger 

[SWS_Adc_91002]

[ ]

[SWS_Adc_00116]

[SRS_Adc_12823]
  • Adc_DisableHardwareTrigger 应禁用给定的 ADC 通道的硬件触发源。

[SWS_Adc_00429]

[ ]
  • 如果 AdcEnableQueuing 被配置为 ON 且已对给定的 ADC 通道的转换(启动/重启请求)进行了入队操作,Adc_DisableHardwareTrigger 应对该 ADC 通道的转换(启动/重启请求)进行出队操作。

[SWS_Adc_00145]

[SRS_Adc_12364]
  • Adc_DisableHardwareTrigger 应中止正在被处理的转换(如 ADC 硬件支持)。

[SWS_Adc_00157]

[SRS_Adc_12317]
[SRS_Adc_12318]
[SRS_Adc_12364]
  • Adc_DisableHardwareTrigger 应禁用给定的 ADC 通道的通知机制(若已被启用)。

[SWS_Adc_00361]

[ ]
  • Adc_DisableHardwareTrigger 应将给定的 ADC 通道的状态设置为 ADC_IDLE

[SWS_Adc_00121]

[SRS_BSW_00171]
  • ADC 模块的运行时环境应仅对具有“硬件事件”启动条件(触发源)的 ADC 通道调用 Adc_DisableHardwareTrigger(参见 AdcGroupTriggSrc)。

[SWS_Adc_00266]

[SRS_BSW_00171]
  • 应支持通过在预编译阶段对参数 AdcHwTriggerApi 进行配置来启用/禁用 Adc_DisableHardwareTrigger。

[SWS_Adc_00129]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_DisableHardwareTrigger 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_DisableHardwareTrigger 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00137]

[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_DisableHardwareTrigger 进行调用且给定的 ADC 通道具有“软件接口调用”启动条件(触发源)时,Adc_DisableHardwareTrigger 应上报开发错误 ADC_E_WRONG_TRIGG_SRC 并直接返回(不进行任何操作)。

[SWS_Adc_00282]

[SRS_Adc_12823]
  • 如果开发错误检测被启用,当对 Adc_DisableHardwareTrigger 进行调用且给定的具有“硬件事件”启动条件(触发源)的 ADC 通道被错误地配置为“连续转换”模式时,Adc_DisableHardwareTrigger 应上报开发错误 ADC_E_WRONG_CONV_ MODE 并直接返回(不进行任何操作)。

注意:

对于具有“软件接口调用”启动条件(触发源)的 ADC 通道被配置为“连续转换”模式的情况,Adc_DisableHardwareTrigger 应上报开发错误 ADC_E_WRONG_TRIGG_SRC

[SWS_Adc_00304]

[ ]
  • 如果开发错误检测被启用,当给定的 ADC 通道的硬件触发源尚未(通过对 Adc_EnableHardwareTrigger 进行调用)被启用且对 Adc_DisableHardwareTrigger 进行调用时,Adc_DisableHardwareTrigger 应上报运行时错误 ADC_E_IDLE

[SWS_Adc_00298]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_DisableHardwareTrigger 进行调用时,Adc_DisableHardwareTrigger 应上报开发错误 ADC_E_UNINIT 并直接返回(不进行任何操作)。

注意:

在被重新启用前,所有由 Adc_EnableHardwareTrigger 启用的 ADC 通道都应由 Adc_DisableHardwareTrigger 禁用,对于由于被配置的模式(ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR)而被隐式地停止的 ADC 通道也不例外。

Adc_EnableGroupNotification 

[SWS_Adc_91003]

[ ]

[SWS_Adc_00057]

[SRS_SPAL_00157]
[SRS_Adc_12318]
  • Adc_EnableGroupNotification 应启用给定的 ADC 通道的通知机制。

[SWS_Adc_00100]

[SRS_Adc_12447]
  • 应支持通过在预编译阶段对参数 AdcGrpNotifCapability 进行配置来启用/禁用 Adc_EnableGroupNotification。

[SWS_Adc_00130]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_EnableGroupNotification 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_EnableGroupNotification 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00165]

[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_EnableGroupNotification 进行调用且给定的 ADC 通道的通知函数接口为 NULL 时,Adc_EnableGroupNotification 应上报开发错误 ADC_E_NOTIF_CAPABILITY 并直接返回(不进行任何操作)。

[SWS_Adc_00299]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_EnableGroupNotification 进行调用时,Adc_EnableGroupNotification 应上报开发错误 ADC_E_UNINIT 并直接返回(不进行任何操作)。

Adc_DisableGroupNotification 

[SWS_Adc_91004]

[ ]

[SWS_Adc_00058]

[SRS_SPAL_00157]
[SRS_Adc_12318]
  • Adc_DisableGroupNotification 应禁用给定的 ADC 通道的通知机制。

[SWS_Adc_00101]

[SRS_Adc_12447]
  • 应支持通过在预编译阶段对参数 AdcGrpNotifCapability 进行配置来启用/禁用 Adc_DisableGroupNotification。

[SWS_Adc_00131]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_DisableGroupNotification 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_DisableGroupNotification 应上报开发错误 ADC_E_PARAM_GROUP 并直接返回(不进行任何操作)。

[SWS_Adc_00166]

[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_DisableGroupNotification 进行调用且给定的 ADC 通道的通知函数接口为 NULL 时,Adc_DisableGroupNotification 应上报开发错误 ADC_E_NOTIF_CAPABILITY 并直接返回(不进行任何操作)。

[SWS_Adc_00300]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_DisableGroupNotification 进行调用时,Adc_DisableGroupNotification 应上报开发错误 ADC_E_UNINIT 并直接返回(不进行任何操作)。

Adc_GetGroupStatus 

[SWS_Adc_00374]

[ ]

[SWS_Adc_00220]

[SRS_Adc_12291]
  • Adc_GetGroupStatus 应返回给定的 ADC 通道的转换的状态。

[SWS_Adc_00221]

[SRS_BSW_00335]
[SRS_Adc_12291]
  • Adc_GetGroupStatus 应返回 ADC_IDLE
    • 在给定的 ADC 通道的转换被启动之前,对 Adc_GetGroupStatus 进行调用
    • 对于具有“软件接口调用”启动条件(触发源)的 ADC 通道:在给定的 ADC 通道的转换被停止(通过对 Adc_StopGroupConversion 进行调用)之后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_GetStreamLastPointer 进行调用(给定的 ADC 通道的转换的状态为 ADC_STREAM_COMPLETED)后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_ReadGroup 进行调用(给定的 ADC 通道的转换的状态为 ADC_STREAM_COMPLETED)后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“软件接口调用”启动条件(触发源)的 ADC 通道:在对 Adc_GetStreamLastPointer 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“软件接口调用”启动条件(触发源)的 ADC 通道:在对 Adc_ReadGroup 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于具有“硬件事件”启动条件(触发源)的 ADC 通道:在对 Adc_DisableHardwareTrigger 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于具有“硬件事件”启动条件(触发源)的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_GetStreamLastPointer 进行调用(给定的 ADC 通道的转换的状态为 ADC_STREAM_COMPLETED)后,对 Adc_GetGroupStatus 进行调用
    • 对于具有“硬件事件”启动条件(触发源)的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_ReadGroup 进行调用(给定的 ADC 通道的转换的状态为 ADC_STREAM_COMPLETED)后,对 Adc_GetGroupStatus 进行调用

[SWS_Adc_00222]

[SRS_BSW_00335]
[SRS_Adc_12291]
  • Adc_GetGroupStatus 应返回 ADC_BUSY
    • 当给定的 ADC 通道的首次转换(“连续转换”模式)正在被处理时,对 Adc_GetGroupStatus 进行调用
    • 在给定的 ADC 通道的硬件触发源被启用之后,对 Adc_GetGroupStatus 进行调用
    • 在对具有“软件接口调用”启动条件(触发源)的 ADC 通道调用 Adc_StartGroupConversion 之后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_SINGLE:在对 Adc_GetStreamLastPointer 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_SINGLE:在对 Adc_ReadGroup 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULAR:在对 Adc_GetStreamLastPointer 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULAR:在对 Adc_ReadGroup 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_GetStreamLastPointer 进行调用(给定的 ADC 通道的转换的状态为 ADC_COMPLETED)后,对 Adc_GetGroupStatus 进行调用
    • 对于“连续转换”模式中的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_ReadGroup 进行调用(给定的 ADC 通道的转换的状态为 ADC_COMPLETED)后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“硬件事件”启动条件(触发源)的 ADC 通道 ADC_ACCESS_MODE_SINGLE:在对 Adc_GetStreamLastPointer 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“硬件事件”启动条件(触发源)的 ADC 通道 ADC_ACCESS_MODE_SINGLE:在对 Adc_ReadGroup 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“硬件事件”启动条件(触发源)的 ADC 通道 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULAR:在对 Adc_GetStreamLastPointer 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“硬件事件”启动条件(触发源)的 ADC 通道 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_CIRCULAR:在对 Adc_ReadGroup 进行调用后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“硬件事件”启动条件(触发源)的 ADC 通道 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_GetStreamLastPointer 进行调用(给定的 ADC 通道的转换的状态为 ADC_COMPLETED)后,对 Adc_GetGroupStatus 进行调用
    • 对于“单次转换”模式中的具有“硬件事件”启动条件(触发源)的 ADC 通道 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR:在对 Adc_ReadGroup 进行调用(给定的 ADC 通道的转换的状态为 ADC_COMPLETED)后,对 Adc_GetGroupStatus 进行调用

[SWS_Adc_00224]

[SRS_BSW_00335]
[SRS_Adc_12291]
  • Adc_GetGroupStatus 应返回 ADC_COMPLETED
    • 在对给定的 ADC 通道的转换(并非最后一次)的处理被完成之后,对 Adc_GetGroupStatus 进行调用

[SWS_Adc_00325]

[SRS_Adc_12291]
  • Adc_GetGroupStatus 应返回 ADC_STREAM_COMPLETED
    • 对于 ADC_ACCESS_MODE_SINGLE:在对给定的 ADC 通道的转换的处理被完成之后,对 Adc_GetGroupStatus 进行调用
    • 对于 ADC_ACCESS_MODE_STREAMING:在对给定的 ADC 通道的转换(每个通道的采样的次数由 AdcStreamingNumSamples 定义)的处理被完成之后,对 Adc_GetGroupStatus 进行调用

[SWS_Adc_00226]

[SRS_Adc_12291]
  • Adc_GetGroupStatus 应提供对状态数据的原子访问(原子操作)。

[SWS_Adc_00305]

[ ]
  • 为了保证返回值的一致性(完整性),假定在对状态数据进行轮询访问前,ADC 通道的转换总是被软件成功地启动(或启用,对于具有“硬件事件”启动条件(触发源)的 ADC 通道)。

[SWS_Adc_00225]

[SRS_BSW_00323]
[SRS_BSW_00386]
[SRS_SPAL_12448]
  • 如果开发错误检测被启用,当对 Adc_GetGroupStatus 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_GetGroupStatus 应上报开发错误 ADC_E_PARAM_GROUP 并返回 ADC_IDLE(不进行任何操作)。

[SWS_Adc_00301]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_GetGroupStatus 进行调用时,Adc_GetGroupStatus 应上报开发错误 ADC_E_UNINIT 并返回 ADC_IDLE(不进行任何操作)。

[SWS_Adc_00436]

[ ]
  • 对于被中断/挂起的 ADC 通道(已对其进行入队操作),其状态应与其被中断/挂起前的状态一致。

Adc_GetStreamLastPointer

[SWS_Adc_00375]

[ ]

[SWS_Adc_00214]

[SRS_Adc_12292]
[SRS_Adc_12802]
  • Adc_GetStreamLastPointer 应设置参数 PtrToSamplePtr 传递的指针,以使其指向(缓冲区中的)给定的 ADC 通道中的首个通道的转换的最终结果。

[SWS_Adc_00418]

[ ]
  • 对于 ADC 模块在缓冲区中保存的所有数据,无需对其进行进一步的处理(例如,缩放或精度),并应根据配置参数 ADC_RESULT_ALIGNMENT 被配置的值对其进行对齐。

[SWS_Adc_00387]

[ ]
  • Adc_GetStreamLastPointer 将会返回每个通道的有效采样的次数(ADC 通道的转换的次数),采样的结果将被保存在 ADC 通道专用的缓冲区中。

注意:

当在 ADC 通道专用的缓冲区中存在有效的采样的结果时,ADC 通道的状态将为 ADC_COMPLETEDADC_STREAM_COMPLETED。当在 ADC 通道专用的缓冲区中存在有效的采样的结果时(Adc_GetStreamLastPointer 的返回值为 0),ADC 通道的状态将为 ADC_BUSY 或 ADC_IDLE

注意:

对于 ADC_ACCESS_MODE_SINGLE:当在 ADC 通道专用的缓冲区中存在有效的采样的结果时,Adc_GetStreamLastPointer 的返回值为 1。

[SWS_Adc_00216]

[SRS_Adc_12802]
  • 当给定的 ADC 通道的状态为 ADC_BUSY 时(给定的 ADC 通道的转换正在被处理),Adc_GetStreamLastPointer 应将参数 PtrToSamplePtr 传递的指针设置为 NULL 并返回 0。

[SWS_Adc_00219]

[SRS_Adc_12291]
[SRS_Adc_12802]
  • ADC 模块的运行时环境应通过检查 Adc_GetGroupStatus 的返回值确保读取的数据的一致性(完整性)。

注意:

请参阅 [SWS_Adc_00140]

[SWS_Adc_00326]

[SRS_Adc_12291]
  • 对于“连续转换”模式(ADC_ACCESS_MODE_SINGLE 或 ADC_ACCESS_MODE_STREAMING 的  ADC_STREAM_BUFFER_CIRCULAR)及 ADC_ACCESS_MODE_SINGLE 或 ADC_ACCESS_MODE_STREAMING 的  ADC_STREAM_BUFFER_CIRCULAR 的具有“硬件事件”启动条件(触发源)的 ADC 通道,当该 ADC 通道的状态为 ADC_STREAM_COMPLETED 且对该 ADC 通道调用 Adc_GetStreamLastPointer 时,该 ADC 通道的状态应切换为 ADC_BUSY

[SWS_Adc_00327]

[SRS_Adc_12291]
  • 对于转换将会自动地停止(ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR 或“单次转换”模式中的 ADC_ACCESS_MODE_SINGLE)的“软件接口调用”启动条件(触发源)下的 ADC 通道,以及“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR 的 ADC 通道,当该 ADC 通道的状态为 ADC_STREAM_COMPLETED 且对该 ADC 通道调用 Adc_GetStreamLastPointer 时,该 ADC 通道的状态应切换为 ADC_IDLE

[SWS_Adc_00328]

[SRS_Adc_12291]
  • 当该 ADC 通道的状态为 ADC_COMPLETED 且对该 ADC 通道调用 Adc_GetStreamLastPointer 时,该 ADC 通道的状态应切换为 ADC_BUSY

[SWS_Adc_00215]

[ ]
  • 当对 Adc_GetStreamLastPointer 进行调用且给定的 ADC 通道的状态为 ADC_IDLE,该 ADC 通道的转换未被启动(不存在有效的上一次转换的结果)时,Adc_GetStreamLastPointer 应上报运行时错误 ADC_E_IDLE

[SWS_Adc_00218]

[SRS_BSW_00386]
  • 如果开发错误检测被启用,当对 Adc_GetStreamLastPointer 进行调用且给定的 ADC 通道的 ID 不存在时,Adc_GetStreamLastPointer 应上报开发错误 ADC_E_PARAM_GROUP 及将参数 PtrToSamplePtr 传递的指针设置为 NULL 并返回 0(不进行任何操作)。

[SWS_Adc_00302]

[SRS_BSW_00406]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_GetStreamLastPointer 进行调用时,Adc_GetStreamLastPointer 应上报开发错误 ADC_E_UNINIT 及将参数 PtrToSamplePtr 传递的指针设置为 NULL 并返回 0(不进行任何操作)。

Adc_GetVersionInfo 

[SWS_Adc_00376]

[ ]

[SWS_Adc_00458]

[ ]
  • 如果开发错误检测被启用,当对 Adc_GetVersionInfo 进行调用且参数 versioninfo 的值为 NULL_PTR 时,Adc_GetVersionInfo 应上报开发错误 ADC_E_PARAM_POINTER

Adc_SetPowerState 

[SWS_Adc_00475]

[ ]

[SWS_Adc_00481]

[ ]
  • Adc_SetPowerState 应设置 ADC 硬件的(所需的前置操作已被完成)电源状态。电源状态的切换所需的前置操作(例如,将所有通道的状态设置为 ADC_IDLE、禁用所有通道的通知机制等)必须由对应的软件组件(例如,IoHwAbs)提前完成。
  • 在确认电源状态的切换可用之前,Adc_SetPowerState 不应进行任何操作(例如,当电源状态的切换(将 ADC 硬件设置为目标电源状态)不可用时,不应进行任何操作并应拒绝此调用请求)。

[SWS_Adc_00482]

[ ]
  • 当目标电源状态与当前电源状态相同时,Adc_SetPowerState 不应进行任何操作并应返回 E_OK。

[SWS_Adc_00483]

[ ]
  • 当目标电源状态为正常运行模式时,Adc_SetPowerState 将会引用 Adc_Init 的参数中的必要参数。

正常运行模式(全功率模式)不得引用单独的配置容器或硬编码数据,以避免在初始化阶段被使用的初始化参数和在电源状态切换期间被使用的初始化参数不一致。

[SWS_Adc_00484]

[ ]
  • 对于其他电源状态,在 Adc_SetPowerState 的上下文中仅应执行特定于电源状态的切换的(重新)配置操作(即,Adc_SetPowerState 不能被单独地用于对 ADC 模块的配置进行更改)。不应执行特定于电源状态的切换的(重新)配置操作。

[SWS_Adc_00485]

[ ]
  • Adc_SetPowerState 应对与目标电源状态相关的配置容器进行引用,以获得目标电源状态的一些特定参数(例如,对(不同)电源状态的支持)。

[SWS_Adc_00486]

[ ]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_SetPowerState 进行调用时,Adc_SetPowerState 应上报开发错误 ADC_E_UNINIT

[SWS_Adc_00487]

[ ]
  • 如果开发错误检测被启用,当一个或多个通道的状态不为 ADC_IDLE(或类似的非运行状态),和/或一个或多个通道的通知机制未被禁用时,Adc_SetPowerState 应上报运行时错误 ADC_E_NOT_DISENGAGED

[SWS_Adc_00488]

[ ]
  • 如果开发错误检测被启用,当目标电源状态不被支持或 ADC 硬件不支持低功耗模式时,Adc_SetPowerState 应上报开发错误 ADC_E_POWER_STATE_NOT_SUPPORTED

[SWS_Adc_00489]

[ ]
  • 如果开发错误检测被启用,当目标电源状态不可达(从当前电源状态)时,Adc_SetPowerState 应上报运行时错误 ADC_E_TRANSITION_ NOT_POSSIBLE

[SWS_Adc_00490]

[ ]
  • 如果开发错误检测被启用,当未通过对 Adc_PreparePowerState 进行调用完成电源状态的切换所需的前置操作时,Adc_SetPowerState 应上报开发错误 ADC_E_PERIPHERAL_NOT_PREPARED

Adc_GetCurrentPowerState 

[SWS_Adc_00476]

[ ]

[SWS_Adc_00491]

[ ]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_GetCurrentPowerState 进行调用时,Adc_GetCurrentPowerState 应上报开发错误 ADC_E_UNINIT

Adc_GetTargetPowerState 

[SWS_Adc_00477]

[ ]

[SWS_Adc_00492]

[ ]
  • Adc_GetTargetPowerState 应返回 ADC 硬件单元的电源状态。当不存在正在进行的电源状态的切换时,返回的电源状态应为 ADC 硬件单元的当前电源状态。除非发生硬件故障,否则对 Adc_GetTargetPowerState 的调用应总是被成功地执行。

[SWS_Adc_00493]

[ ]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_GetTargetPowerState 进行调用时,Adc_GetTargetPowerState 应上报开发错误 ADC_E_UNINIT

Adc_PreparePowerState 

[SWS_Adc_00478]

[ ]

[SWS_Adc_00494]

[ ]
  • Adc_PreparePowerState 应启动电源状态的切换所需的所有前置操作。能否对外设进行操作取决于电源状态及硬件功能。集成商应了解这些属性,并决定是否对外设进行操作。

[SWS_Adc_00495]

[ ]
  • 当目标电源状态与当前电源状态相同时,Adc_PreparePowerState 不应进行任何操作并应返回 E_OK。

[SWS_Adc_00496]

[ ]
  • 如果开发错误检测被启用,当 ADC 模块被初始化且对 Adc_PreparePowerState 进行调用时,Adc_PreparePowerState 应上报开发错误 ADC_E_UNINIT

[SWS_Adc_00497]

[ ]
  • 如果开发错误检测被启用,当目标电源状态不被支持或 ADC 硬件不支持低功耗模式时,Adc_PreparePowerState 应上报开发错误 ADC_E_POWER_STATE_NOT_SUPPORTED

[SWS_Adc_00498]

[ ]
  • 如果开发错误检测被启用,当目标电源状态不可达(从当前电源状态)时,Adc_PreparePowerState 应上报运行时错误 ADC_E_TRANSITION_ NOT_POSSIBLE电源状态的切换所需的所有异步的前置操作都在 Adc_Main_PowerTransitionManager 中(在后台中)被执行。

调度函数

Adc_Main_PowerTransitionManager 

[SWS_Adc_00479]

[ ]

[SWS_Adc_00499]

[ ]
  • 电源状态的切换所需的所有异步的(由 Adc_PreparePowerState 发起)前置操作都在 Adc_Main_PowerTransitionManager 中(在后台中)被执行。

[SWS_Adc_00500]

[ ]
  • Adc_Main_PowerTransitionManager 的调度周期应由 ADC 模块的主函数的调度周期决定,且为可变的(仅当电源状态的切换被请求时才需要被调用)。

[SWS_Adc_00501]

[ ]
  • 对于以事件的方式订阅的用户(例如,IoHwAbs),仅当异步模式被启用时,Adc_Main_PowerTransitionManager 才应触发回调通知函数接口。

[SWS_Adc_00502]

[ ]
  • 当 ADC 模块被初始化时,Adc_Main_PowerTransitionManager 应直接返回(不进行任何操作)。其举是为了避免对未被初始化的变量进行处理,由于此类错误(任务在 ADC 模块被初始化时被启动)在启动阶段很容易被排查,此时不应上报开发错误。
  • 理由:在启动阶段,可能会出现在某些模块尚未被初始化时 OS 就已经开始对主函数进行调度了的情况。此类情况并非真正的错误,但需要对其进行处理(即返回并不进行任何操作)。
  • 即使对电源状态的切换的监控是强制性的,对 Adc_Main_PowerTransitionManager 的实现为可选的,这意味着如果 ADC 硬件允许以其他方式对电源状态的切换进行监控及通知,则对 Adc_Main_PowerTransitionManager 的实现可以被忽略。

预期接口

本章列出了 ADC 模块所需的由其他模块提供的所有函数。

强制接口

ADC 模块需要以下接口以实现其核心功能。

[SWS_Adc_00530]

[ ]

可选接口

ADC 模块需要以下接口以实现其可选功能

[SWS_Adc_00377]

[ ]

可配置的接口

本章列出了所有可对其目标函数进行配置的接口。目标函数通常是一个回调函数。这些接口的名称并不是固定的,因为它们是可配置的。

[SWS_Adc_00078]
[SRS_SPAL_12129]
  • ADC 模块的 ISR 将提供​​“转换结束事件”,ISR 负责对中断标志(若 ADC 硬件需要)进行重置并对相关的通知回调函数接口进行调用。

注意:

通知回调函数接口 IoHwAb_Adc_Notification_<#groupID> 将在中断上下文中被调用。用户应对函数接口的运行时间进行评估。ADC 通道的通知回调函数接口的名称为可配置的。

IoHwAb_Adc_Notification<#groupID> 

[SWS_Adc_00082]

[SRS_BSW_00359]
[SRS_BSW_00360]
[SRS_SPAL_00157]

[SWS_Adc_00104]

[SRS_SPAL_00157]
[SRS_Adc_12447]
[SRS_Adc_12317]
  • ADC 模块应支持为每个 ADC 通道单独地配置通知回调函数接口(若启用通知机制),当 ADC 通道中的所有通道的转换被处理完成时,将对通知回调函数接口进行调用。

[SWS_Adc_00083]

[SRS_SPAL_00157]
  • 当通知机制被禁用时,ADC 模块不应对通知回调函数接口进行调用。

[SWS_Adc_00416]

[ ]
  • 当通知机制被重新启用时,对于在通知机制被禁用期间发生的事件,ADC 模块不应对通知回调函数接口进行调用。

[SWS_Adc_00084]

[SRS_SPAL_12056]
  • 应为每个 ADC 通道单独地配置一个特定的通知回调函数接口。通知回调函数接口可以为函数指针,也可以为 NULL。

[SWS_Adc_00080]

[SRS_SPAL_12056]
  • 如果通知回调函数接口为 NULL,则不会对此通知回调函数接口进行调用。

[SWS_Adc_00085]

[SRS_SPAL_12056]
  • 通知回调函数接口应可被配置为配置结构体中的指向用户定义的函数的指针。对于所有可用的 ADC 通道,必须在配置阶段对通知回调函数接口指向的函数进行声明。

IoHwAb_Adc_NotifyReadyForPowerState<#Mode> 

[SWS_Adc_00480]

[ ]

如果至少一个驱动程序(MCAL)被配置为将提供对低功耗模式进行控制的函数接口,则需要对外设进行控制的 CDD 或 IoHwAbs 提供的接口。

对于每种低功耗模式( ADC 模块必须对电源状态进行切换),都应有一个回调函数接口与之对应。不同的低功耗模式可以对应相同的电源状态,但每种低功耗模式只能对应一种电源状态。

序列图


ADC 模块的初始化


ADC 模块的逆初始化


单次转换”模式中的“软件接口调用”启动条件(触发源)(无通知)


连续转换”模式中的“软件接口调用”启动条件(触发源)(有通知)


单次转换”模式中的“硬件事件”启动条件(触发源)(有通知)


单次转换”模式中的“硬件事件”启动条件(触发源)下的 ADC_ACCESS_MODE_STREAMING 的 ADC_STREAM_BUFFER_LINEAR


无优先级机制 - 无队列


无优先级机制 - 软件实现的队列


ADC_PRIORITY_HW_SW 优先级机制下的软件实现的队列


ADC_PRIORITY_HW 优先级机制下的硬件实现的队列


ADC_PRIORITY_HW_SW 优先级机制下的硬件/软件实现的队列


配置规范


容器和配置参数

以下章节总结了所有配置参数。参数的详细定义在第 7 章和第 8 章中被描述。

[SWS_Adc_00531]

[ ]
  • ADC 模块应拒绝实际实现不支持的(分区映射)配置。

Adc



AdcGeneral


















[SWS_Adc_CONSTR_00001]

[ ]
  • AdcKernelEcucPartitionRef 引用的 ECUC 分区应是 AdcEcucPartitionRef 引用的 ECUC 分区的子集。

[SWS_Adc_CONSTR_00003]

[ ]
  • 如果 AdcEcucPartitionRef 引用了一个或多个 ECUC 分区,则 AdcKernelEcucPartitionRef 的多重性应为 1 ,并应引用 AdcEcucPartitionRef 引用的 ECUC 分区中的一个。

AdcPowerStateConfig




AdcConfigSet



AdcChannel

[SWS_Adc_CONSTR_00002]

[ ]
  • AdcGroupEcucPartitionRef 引用的 ECUC 分区应是 AdcEcucPartitionRef 引用的 ECUC 分区的子集。


























[SWS_Adc_CONSTR_00004]

[ ]
  • 如果 AdcEcucPartitionRef 引用了一个或多个 ECUC 分区,则 AdcGroupEcucPartitionRef 的多重性应大于 0 ,并应引用 AdcEcucPartitionRef 引用的 ECUC 分区中的一个或多个。

[SWS_Adc_00098]

[SRS_Adc_12447]
  • 一个 ADC 通道的所有通道都具有相同的组配置(通道可以具有特定于通道的不同的配置)。

AdcHwUnit






[SWS_Adc_00138]

[ ]
  • ADC 模块应支持一个或多个相同类型的 ADC 硬件单元。对 ADC 硬件单元的选择由配置容器 AdcHwUnit 完成。

Published Information 

For details refer to the chapter 10.3 "Published Information" in SWS_BSWGeneral.

AdcPublishedInformation





Configuration of symbolic names

[SWS_Adc_00099]
[SRS_Adc_12307]
[SRS_Adc_12447]
  • The symbolic names of ADC channels and ADC channel groups for use by the upper layer shall be defined by the configurator.They are to be defined in the modules configuration header file.

评论

此博客中的热门博文

AUTOSAR_SWS_CANDriver

Linux Driver Char Device 笔记

AUTOSAR_SWS_PWMDriver

AUTOSAR_SWS_PortDriver

AUTOSAR_SWS_ECUStateManager

EB - MCAL - MCU

AUTOSAR_SWS_ICUDriver

EB - MCAL - PWM