P2 batch translation: 49 PDFs (Memory + Safety + Crypto + ModeManagement + IO)
This commit is contained in:
@@ -0,0 +1,513 @@
|
||||
# ADC 驱动需求(Requirements on ADC Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | ADC 驱动需求(Requirements on ADC Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 111 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | ADC 驱动范围澄清;移除不适用文档的引用;编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 新增第 5 章:需求追踪表 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | ECU 降级概念添加;TPS 标准化模板的正式更新;BSWAndRTE_Features 的可追溯性 |
|
||||
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | SRS_Adc_12824:结果对齐从右对齐更改为可配置对齐;法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | SRS_Adc_12821 现在对所有通道组有效,与所选模式无关;SRS_Adc_12820 移除了相同组的顺序请求队列;SRS_Adc_12280 移除了单值结果访问模式;所有 ADC 通道组均可访问 ADC 结果缓冲区;新增对上次组转换结果的访问;SRS_Adc_12822 适配任何组中最大通道;SRS_Adc_12291 新增状态 'Stream Completed';扩展文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | "用户建议"修订;"修订信息"新增 |
|
||||
| 2006-11-28 | 2.1 | AUTOSAR Administration | 移除了"On Demand"功能的需求;移除了"Gated Continuous"转换模式的需求;移除了内部和外部硬件触发器之间的区别;引入了通道组优先级机制的需求,以允许更高优先级的通道组中断正在进行的转换;法律声明修订 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 作为独立文档发布。SRS SPAL V1.0.0 已被拆分为 12 个独立文档,以发布 2.0;新增门控连续转换模式需求;新增按需转换模式需求;其他细微变更 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 作为 SRS SPAL V1.0.0 的一部分初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [文档范围(Scope of Document)](#1-文档范围)
|
||||
2. [如何阅读本文档(How to Read this Document)](#2-如何阅读本文档)
|
||||
- 2.1 [使用的约定(Conventions Used)](#21-使用的约定)
|
||||
- 2.2 [需求结构(Requirements Structure)](#22-需求结构)
|
||||
3. [缩略语与缩写(Acronyms and Abbreviations)](#3-缩略语与缩写)
|
||||
4. [功能概述(Functional Overview)](#4-功能概述)
|
||||
5. [需求追踪(Requirements Tracing)](#5-需求追踪)
|
||||
6. [需求规范(Requirement Specification)](#6-需求规范)
|
||||
- 6.1 [功能需求(Functional Requirements)](#61-功能需求)
|
||||
- 6.1.1 [配置(Configuration)](#611-配置)
|
||||
- 6.1.2 [正常运行(Normal Operation)](#612-正常运行)
|
||||
7. [参考文献(References)](#7-参考文献)
|
||||
- 7.1 [AUTOSAR 交付物(Deliverables of AUTOSAR)](#71-autosar-交付物)
|
||||
|
||||
---
|
||||
|
||||
## 1 文档范围(Scope of Document)
|
||||
|
||||
本文档规定了 ADC 驱动模块的需求。ADC 驱动针对逐次逼近型 ADC 硬件。Delta Sigma ADC 转换需求不在本文档的范围内。
|
||||
|
||||
### 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 2 如何阅读本文档(How to Read this Document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 2.1 使用的约定(Conventions Used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [5] / [TPS_STDT_00078] 中指定的表。
|
||||
- 在需求中,使用以下特定语义。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照所示进行解释。请注意,它们所使用文档的需求级别会修改这些词的强制力。
|
||||
|
||||
- **MUST**:这个词,或术语 "REQUIRED" 或 "SHALL",意味着该定义是规范的绝对要求。
|
||||
- **MUST NOT**:这个词组,或词组 "SHALL NOT",意味着该定义是规范的绝对禁止。
|
||||
- **SHOULD**:意味着在特定情况下可能存在忽略特定条目的有效理由。
|
||||
- **SHOULD NOT**:意味着在特定情况下特定行为可能是可接受的甚至是有用的。
|
||||
- **MAY**:这个词,或形容词 "OPTIONAL",意味着某个项目是真正可选的。
|
||||
|
||||
### 2.2 需求结构(Requirements Structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialization)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
- ...
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
- 对其他 WP 的输出
|
||||
- ...
|
||||
|
||||
---
|
||||
|
||||
## 3 缩略语与缩写(Acronyms and Abbreviations)
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| CS | 片选(Chip select) |
|
||||
| DIO | 数字输入输出(Digital Input Output) |
|
||||
| ECU | 电控单元(Electric Control Unit) |
|
||||
| EOL | 终端产线(End Of Line) |
|
||||
| ICU | 输入捕获单元(Input Capture Unit) |
|
||||
| MAL | 微控制器抽象层的旧名称(已被 MCAL 取代) |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| MMU | 内存管理单元(Memory Management Unit) |
|
||||
| Master | 控制其他设备的设备 |
|
||||
| Slave | 完全由主设备控制的设备 |
|
||||
| NMI | 不可屏蔽中断(Non maskable interrupt) |
|
||||
| OS | 操作系统(Operating System) |
|
||||
| PLL | 锁相环(Phase Locked Loop) |
|
||||
| PWM | 脉宽调制(Pulse Width Modulation) |
|
||||
| RX | 接收(Reception,在总线通信的上下文中) |
|
||||
| SPAL | 此工作组名称 |
|
||||
| SFR | 特殊功能寄存器(Special Function Register) |
|
||||
| RTE | 运行时环境(Runtime environment) |
|
||||
| WP | 工作包(Work Package) |
|
||||
| ADC | 模数转换器(Analogue Digital Converter) |
|
||||
| FFT | 快速傅里叶变换器(Fast Fourier Transformer) |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| STD | 标准(Standard) |
|
||||
| REQ | 需求(Requirement) |
|
||||
| UNINIT | 未初始化(Uninitialized) |
|
||||
|
||||
ADC 驱动中使用以下表达式:
|
||||
|
||||
| 表达式 | 解释 |
|
||||
|---|---|
|
||||
| HW Unit(硬件单元) | 表示微控制器输入电子设备,包括执行"模数转换"所需的所有部件。 |
|
||||
| ADC channel(ADC 通道) | 表示绑定到一个端口引脚的逻辑 ADC 实体。多个 ADC 实体可以映射到同一个端口引脚。 |
|
||||
| ADC channel group(ADC 通道组) | 链接到同一 ADC 硬件单元(例如一个采样保持器和一个 A/D 转换器)的 ADC 通道组。整个组的转换由一个触发源触发。 |
|
||||
| ADC result buffer(ADC 结果缓冲区) | ADC 驱动用户必须为每个组提供一个缓冲区。如果选择了流访问模式,则此缓冲区可以保存同一通道组的多个样本。如果选择了单次访问模式,则缓冲区中保存每个组通道的一个样本。 |
|
||||
| Trigger Source(触发源) | 启动单次转换或连续转换序列的源事件。 |
|
||||
| Conversion Mode(转换模式) | **One-Shot(一次性):** 在触发后执行一次 ADC 通道组的转换,并将结果写入分配的缓冲区。触发可以是软件 API 调用或硬件事件。<br>**Continuous(连续):** 在软件 API 调用(启动)后连续执行 ADC 通道组的转换。转换本身自动运行(由硬件/中断控制)。可以通过软件 API 调用(停止)停止连续转换。 |
|
||||
| Sampling Time(采样时间) | 对模拟值进行采样的时间(例如对电容进行充电等)。 |
|
||||
| Conversion Time(转换时间) | 将采样的模拟值转换为数字表示的时间。 |
|
||||
| Acquisition Time(采集时间) | 采样时间 + 转换时间。 |
|
||||
|
||||
由于这是面向专业人士的专业文档,其他所有术语均假定为已知。
|
||||
|
||||
---
|
||||
|
||||
## 4 功能概述(Functional Overview)
|
||||
|
||||
ADC 驱动初始化和控制微控制器的内部模数转换器单元。它提供启动和停止转换以及启用和禁用转换触发源的服务。此外,它还提供启用和禁用通知机制的服务以及查询转换状态和结果的例程。
|
||||
|
||||
ADC 驱动应工作在所谓的 ADC 通道上。ADC 通道将模拟输入引脚、所需的 ADC 电路本身以及转换结果寄存器组合成一个实体,该实体可以通过 ADC 驱动单独控制和访问。
|
||||
|
||||
所有使用的术语都在下一章中指定。
|
||||
|
||||
---
|
||||
|
||||
## 5 需求追踪(Requirements Tracing)
|
||||
|
||||
| 需求 | 描述 | 由...满足 |
|
||||
|---|---|---|
|
||||
| RS_BRF_01184 | AUTOSAR 应支持不同的降级方法 | SRS_ADC_12826, SRS_ADC_12827, SRS_ADC_12828, SRS_ADC_12829 |
|
||||
| RS_BRF_01448 | AUTOSAR 服务应支持模式和状态管理 | SRS_ADC_12826, SRS_ADC_12827, SRS_ADC_12828 |
|
||||
| RS_BRF_01872 | AUTOSAR 微控制器抽象应提供 I/O 信号到模数转换器端口的映射 | SRS_Adc_12280, SRS_Adc_12283, SRS_Adc_12288, SRS_Adc_12291, SRS_Adc_12292, SRS_Adc_12307, SRS_Adc_12317, SRS_Adc_12318, SRS_Adc_12364, SRS_Adc_12447, SRS_Adc_12802, SRS_Adc_12817, SRS_Adc_12818, SRS_Adc_12819, SRS_Adc_12820, SRS_Adc_12821, SRS_Adc_12822, SRS_Adc_12823, SRS_Adc_12824, SRS_Adc_12825 |
|
||||
| RS_BRF_01952 | AUTOSAR IO 硬件抽象应支持已连接 I/O 设备的标准化模式 | SRS_ADC_12829 |
|
||||
|
||||
---
|
||||
|
||||
## 6 需求规范(Requirement Specification)
|
||||
|
||||
### 6.1 功能需求(Functional Requirements)
|
||||
|
||||
#### 6.1.1 配置(Configuration)
|
||||
|
||||
**6.1.1.1 [SRS_Adc_12307] ADC 驱动应支持每个通道的特定基本静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应支持每个通道的以下基本静态配置(如果硬件支持):<br>- 通道的符号名称<br>- 采样时间<br>- 转换时间<br>- 分辨率(位)<br>- 参考电压源<br>- 时钟源及可选的预分频器设置<br>- 其他 MCU 依赖参数<br><br>**注意:** 如果其中一个或多个配置参数只能分配给整个模块,则由配置工具优化数据表示。 |
|
||||
| Rationale | 允许每个通道的不同用法。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.1.2 [SRS_Adc_12447] ADC 驱动应允许将属于同一 ADC HW 单元的 ADC 通道分组**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应允许将属于同一 ADC HW 单元的 ADC 通道分组为所谓的 ADC 通道组(简称组)。ADC 通道组应至少包含一个 ADC 通道。组中的所有通道共享相同的组配置。<br>ADC 驱动应支持每个通道组的以下基本静态配置(如果硬件支持):<br>- 组的符号名称<br>- 组通知开/关<br>- 回调通知函数<br>- 配置使用的通道列表<br>- 组触发源<br>- 组转换模式 |
|
||||
| Rationale | 允许使用单个控制线程对多个通道进行采样。 |
|
||||
| Use Case | 对转换结果应一致的多个通道进行分组。 |
|
||||
| Dependencies | [SRS_Adc_12307] ADC 通道配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.1.3 [SRS_Adc_12817] ADC 驱动应允许为每个 ADC 通道组静态配置一个触发源**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应允许为每个 ADC 通道组静态配置一个触发源。<br>可能的触发源包括:<br>- 硬件事件(例如 IO 引脚上的事件或 MCU 内部生成的定时器中断),如果硬件支持<br>- SW API 调用 |
|
||||
| Rationale | 确保一个组仅从一个源控制(避免不一致、并发问题等)。 |
|
||||
| Use Case | 配置为响应 IO 引脚上的外部中断而进行转换的 ADC 通道组。 |
|
||||
| Dependencies | [SRS_Adc_12447] ADC 通道组配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.1.4 [SRS_Adc_12818] ADC 驱动应允许将一个 ADC 通道分配给多个 ADC 通道组**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应允许将一个 ADC 通道分配给多个 ADC 通道组。 |
|
||||
| Rationale | 这允许 ADC 通道在配置为不同组时具有不同的触发源。 |
|
||||
| Use Case | 通常以循环方式转换(通过硬件事件,在后台)的同一 ADC 通道可以通过 SW API 调用进行单次转换。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | **注意:** ADC 驱动不应处理由受影响组的并发操作引起的任何问题。ADC 驱动的用户必须确保不存在此类受影响组的并发操作。 |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.1.5 [SRS_Adc_12821] 对于所有通道组,ADC 驱动应在配置时提供定义样本存储缓冲区的可能性**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 对于所有通道组,ADC 驱动应在配置时提供定义样本存储缓冲区的可能性。因此,以下参数应添加到 ADC 通道组参数中:<br>- 指向数据缓冲区的指针(转换结果的目标)<br>- ADC 值的数量 |
|
||||
| Rationale | 所有 ADC 通道组的转换结果都存储在外部缓冲区中。 |
|
||||
| Use Case | 循环 AD 转换作为电动机控制器的输入。 |
|
||||
| Dependencies | |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.1.6 [SRS_Adc_12820] ADC 驱动应允许为每个通道组配置优先级**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应允许为每个通道组配置优先级。这隐含了一种优先级机制,在 SW 中实现(或在硬件支持的情况下由硬件支持),它提供以下功能:<br>- 不同组请求的排队<br>- 优先级处理(中止/挂起和重新启动/恢复转换)<br>- 更高优先级组可以中止/挂起更低优先级组<br>- 优先级 0..255,最低优先级 0 |
|
||||
| Rationale | 通过中断已进行的转换为组提供立即转换(按需)的机会。<br>由于存在嵌套转换请求的可能性,因此有必要定义一个优先级来解决驱动将管理它们的顺序。 |
|
||||
| Use Case | 触发的转换越来越多地用于动力总成控制器(一个示例是喷油器组电流/电压的测量,需要与燃油脉冲同步进行 - 同时后台正在进行自动扫描转换)。 |
|
||||
| Dependencies | [SRS_Adc_12447], [SRS_Adc_12818] |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.1.7 [SRS_Adc_12280] ADC 驱动应允许为每个 ADC 通道组设置特定的结果访问模式**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应允许为每个 ADC 通道组设置以下结果访问模式:<br>- 对 ADC 结果缓冲区的结果访问。ADC 结果缓冲区在流访问模式下包含流结果,在单次访问模式下包含上次组转换的结果。<br>- 如果静态配置,应支持对上次组转换结果的结果访问,也支持流访问模式。组通道结果按升序存储在缓冲区中,与流访问模式下 ADC 结果缓冲区的缓冲区布局相反。 |
|
||||
| Rationale | 在通道组的下一次扫描完成之前,每个通道值都应可访问。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Adc_12447] ADC 通道组配置。 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
#### 6.1.2 正常运行(Normal Operation)
|
||||
|
||||
**6.1.2.1 [SRS_Adc_12283] ADC 驱动应屏蔽掉转换结果中不属于 ADC 值的信息位**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应屏蔽掉转换结果中不属于 ADC 值的信息位。 |
|
||||
| Rationale | 信息位是微控制器特定的。 |
|
||||
| Use Case | 一些 µC 在结果寄存器中保存信息位(例如通道号)。这些位应被屏蔽掉。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.2 [SRS_Adc_12824] 结果对齐应可在右对齐和左对齐之间配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 结果对齐应可在右对齐和左对齐之间配置。 |
|
||||
| Rationale | 信息位是微控制器特定的。<br>驱动和上层中的代码和运行时优化。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.3 [SRS_Adc_12819] ADC 驱动应提供读取所选通道组最近有效转换结果的同步服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应提供读取所选通道组(作为参数传递)最近有效转换结果的同步服务。 |
|
||||
| Rationale | 提供对通道组最近转换值的访问。 |
|
||||
| Use Case | 这是读取 ADC 值的标准功能。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.4 [SRS_Adc_12822] 包含通道组转换结果的结构应以统一的维度生成**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 包含通道组转换结果的结构应由配置工具以统一的维度生成,针对属于任何组的最大(按位数)通道进行定制。 |
|
||||
| Rationale | 一个组内的通道可能具有不同大小的结果值(例如 8 位、10 位、12 位等)。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Adc_12447] ADC 通道组配置。 |
|
||||
| Conflicts | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.5 [SRS_Adc_12317] ADC 驱动应提供通知函数以通知调用者通道组转换的结束**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应提供通知函数以通知调用者通道组转换的结束。 |
|
||||
| Rationale | 允许对 ADC 进行非阻塞访问。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.6 [SRS_Adc_12291] ADC 驱动应提供查询 ADC 通道组状态的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应提供查询 ADC 通道组状态的服务。<br>ADC 通道组状态应为以下四种之一:<br>- Idle(空闲)<br>- Busy(繁忙,转换进行中)<br>- Completed(已完成)<br>- Stream Completed(流已完成) |
|
||||
| Rationale | 在读取值之前,可能有必要查询 ADC 的状态。 |
|
||||
| Use Case | 状态可用于访问同步。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.7 [SRS_Adc_12318] ADC 驱动应提供分别启用和禁用每个通知函数的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应提供分别启用和禁用每个通知函数的服务。 |
|
||||
| Rationale | 防止调用不期望的通知(中断),并允许选择软件执行流中可能出现第一次或下一次通知的确切点。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.8 [SRS_Adc_12364] ADC 驱动应提供启动和停止所有转换模式下 ADC 通道组转换的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应提供启动和停止所有转换模式下 ADC 通道组转换的服务。 |
|
||||
| Rationale | 允许软件控制通道组转换的开始时间。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.9 [SRS_Adc_12292] 如果 ADC 提供有符号值,ADC 驱动应将符号位放入返回值的最高位(MSB)**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 如果 ADC 提供有符号值,ADC 驱动应将符号位放入返回值的最高位(MSB)。 |
|
||||
| Rationale | 允许将 ADC 返回值映射到标准 AUTOSAR 整数数据类型。 |
|
||||
| Use Case | 某些微控制器提供有符号 ADC 值。<br>示例:12 位 ADC 寄存器,符号位在位 11(在"大端"字节顺序的微控制器中)。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.10 [SRS_Adc_12288] 根据通道组配置,ADC 驱动应能够以两种不同方式处理流作业的缓冲区**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 根据通道组配置,ADC 驱动应能够以两种不同方式处理流作业的缓冲区:<br>- 作为"线性缓冲区",即一旦流缓冲区已满(达到样本数),ADC 驱动就停止转换。<br>- 作为"循环缓冲区",即即使流缓冲区已满(达到样本数),ADC 驱动也通过环绕缓冲区本身继续转换。 |
|
||||
| Rationale | 允许自动运行的 ADC 转换循环流。 |
|
||||
| Use Case | 电动机控制。 |
|
||||
| Dependencies | [SRS_Adc_12280] ADC 通道组结果访问模式。 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.11 [SRS_Adc_12802] ADC 驱动应为流访问模式提供识别最近样本和可用样本数量的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应为流访问模式提供识别通道组最近样本和可用样本数量的服务。<br>传递的参数应为:<br>- ADC 通道组<br>返回的对象应为:<br>- 样本数量<br>- 指向最后样本的指针 |
|
||||
| Rationale | 识别哪些样本可以使用。 |
|
||||
| Use Case | 数字爆震传感器采集。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.12 [SRS_Adc_12823] ADC 驱动应提供为每个通道组启用和禁用 HW 触发的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应提供为每个通道组启用和禁用 HW 触发的服务。 |
|
||||
| Rationale | 提供在运行时忽略即将到来的硬件触发器的可能性。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Adc_12447], [SRS_Adc_12817] |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.13 [SRS_Adc_12825] 配置为流访问模式的通道组的转换结果应返回到具有固定元素数量的缓冲区**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 配置为流访问模式的通道组的转换结果应返回到 n*m 个元素(整数)的缓冲区,其中 n 是属于组的通道数,m 是每个通道采集的样本数。因此,前 m 个元素属于组中的第一个通道,第二个 m 个元素属于第二个通道,依此类推。 |
|
||||
| Rationale | 支持通道组流转换模式。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Adc_12280] ADC 通道组结果访问模式。 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01872)
|
||||
|
||||
**6.1.2.14 [SRS_ADC_12826] ADC 驱动应实现允许读取 ADC HW 模块当前电源状态的 API**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应实现允许从 MCAL 模块外部读取 HW 外设当前电源状态的 API。此 API 可由 IoHwAbs 和 CDD SW 组件使用。 |
|
||||
| Rationale | 必须能够收集有关外设当前电源状态的信息。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 "ECU Degradation",V1.8 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
**6.1.2.15 [SRS_ADC_12827] ADC 驱动应实现允许读取 ADC HW 模块目标电源状态的 API**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应实现允许从 MCAL 模块外部读取 HW 外设目标电源状态的 API。此 API 可由 IoHwAbs 和 CDD SW 组件使用。 |
|
||||
| Rationale | 获取有关目标电源状态的信息是必要的,以便了解是否正在执行电源状态转换,以及在肯定的情况下,是哪一个。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 "ECU Degradation",V1.8 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
**6.1.2.16 [SRS_ADC_12828] ADC 驱动应将电源状态转换序列分为两部分**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ADC 驱动应将电源状态转换序列分为两部分:准备阶段(允许外设进入目标电源状态的预备配置更改)和设置阶段(有效启用有效电源状态)。 |
|
||||
| Rationale | 某些外设可能比其他外设需要更多时间来执行进入给定电源状态所需的所有预备转换。<br>通过将过程分为准备阶段和设置阶段,可以同步不同的外设,使其全部同时进入有效的电源状态。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 "ECU Degradation",V1.8 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
**6.1.2.17 [SRS_ADC_12829] 应能配置同步或异步的电源状态转换行为**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 应能配置同步或异步的电源状态转换行为。如果配置了同步行为,则电源转换准备应原子地发生,并且执行它的 SWC 必须等待结果。如果配置了异步行为,则电源转换准备应在请求后在后台进行,并且 MCAL 模块应在完成时通知已注册的 SWC。 |
|
||||
| Rationale | 某些外设可以在可忽略或可接受的时间内准备为有效电源状态,从而可以节省处理通知所需的基础结构。其他外设可能需要更长的时间来准备目标电源状态。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 "ECU Degradation",V1.8 |
|
||||
⌋(RS_BRF_01184, RS_BRF_01952)
|
||||
|
||||
---
|
||||
|
||||
## 7 参考文献(References)
|
||||
|
||||
### 7.1 AUTOSAR 交付物(Deliverables of AUTOSAR)
|
||||
|
||||
- **[1]** 基础软件模块列表,AUTOSAR_TR_BSWModuleList.pdf
|
||||
- **[2]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[3]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[4]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[5]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 ADC 驱动软件需求规范的中文翻译。保留了所有需求 ID(SRS_Adc_xxxxx)、参考标识符及模块缩写。原始文档共 22 页,本翻译涵盖了全部章节内容。ADC 驱动针对逐次逼近型 ADC 硬件;Delta Sigma ADC 转换需求不在范围内。
|
||||
@@ -0,0 +1,329 @@
|
||||
# DIO 驱动需求(Requirements on DIO Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | DIO 驱动需求(Requirements on DIO Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 191 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 移除对 BMW 和 HIS 文档的引用;编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 新增第 5 章:需求追踪 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 需求 ID 变更;更新以实现需求可追溯性 |
|
||||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 新增 SRS_Dio_12900 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 扩展文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | "用户建议"修订;新增"修订信息" |
|
||||
| 2006-11-28 | 2.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 作为独立文档发布。SRS SPAL V1.0.0 已被拆分为 15 个独立文档,以发布 2.0 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 作为 SRS SPAL V1.0.0 的一部分初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [文档范围(Scope of document)](#1-文档范围)
|
||||
- 1.1 [约束(Constraints)](#11-约束)
|
||||
2. [如何阅读本文档(How to read this document)](#2-如何阅读本文档)
|
||||
- 2.1 [使用的约定(Conventions used)](#21-使用的约定)
|
||||
- 2.2 [需求结构(Requirement structure)](#22-需求结构)
|
||||
3. [缩略语与缩写(Acronyms and abbreviations)](#3-缩略语与缩写)
|
||||
4. [功能概述(Functional Overview)](#4-功能概述)
|
||||
- 4.1 [DIO 驱动(DIO Driver)](#41-dio-驱动)
|
||||
5. [需求追踪(Requirements Tracing)](#5-需求追踪)
|
||||
6. [需求规范(Requirement Specification)](#6-需求规范)
|
||||
- 6.1 [功能需求(Functional Requirements)](#61-功能需求)
|
||||
- 6.1.1 [DIO 驱动](#611-dio-驱动)
|
||||
- 6.2 [非功能需求(Non-Functional Requirements)](#62-非功能需求)
|
||||
- 6.2.1 [DIO 驱动](#621-dio-驱动)
|
||||
7. [参考文献(References)](#7-参考文献)
|
||||
- 7.1 [AUTOSAR 交付物(Deliverables of AUTOSAR)](#71-autosar-交付物)
|
||||
|
||||
---
|
||||
|
||||
## 1 文档范围(Scope of document)
|
||||
|
||||
本文档规定了 DIO 驱动模块的需求。
|
||||
|
||||
### 1.1 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 2 如何阅读本文档(How to read this document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 2.1 使用的约定(Conventions used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [TPS_STDT_00078] 中指定的表。
|
||||
- 在需求中,使用以下特定语义(取自互联网工程任务组 IETF 的征求意见稿 RFC 2119)。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照 RFC 2119 中的描述进行解释。请注意,它们所使用文档的需求级别会修改这些词的强制力。
|
||||
|
||||
- **MUST**:这个词,或术语 "REQUIRED" 或 "SHALL",意味着该定义是规范的绝对要求。
|
||||
- **MUST NOT**:这个词组,或词组 "SHALL NOT",意味着该定义是规范的绝对禁止。
|
||||
- **SHOULD**:这个词,或形容词 "RECOMMENDED",意味着在特定情况下可能存在忽略特定条目的有效理由,但在选择不同方案之前必须充分理解并仔细权衡其全部含义。
|
||||
- **SHOULD NOT**:这个词组,或词组 "NOT RECOMMENDED",意味着在特定情况下特定行为可能是可接受的甚至是有用的,但在实现任何带有此标签描述的行为之前,应理解其全部含义并仔细权衡该情况。
|
||||
- **MAY**:这个词,或形容词 "OPTIONAL",意味着某个项目是真正可选的。
|
||||
|
||||
### 2.2 需求结构(Requirement structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialisation)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
- ...
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
- 对其他 WP 的输出
|
||||
- ...
|
||||
|
||||
---
|
||||
|
||||
## 3 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| CS | 片选(Chip select) |
|
||||
| DIO | 数字输入输出(Digital Input Output) |
|
||||
| ECU | 电控单元(Electric Control Unit) |
|
||||
| EOL | 终端产线(End Of Line),常用于 "EOL 编程" 或 "EOL 配置" |
|
||||
| ICU | 中断捕获单元(Interrupt Capture Unit) |
|
||||
| MAL | 微控制器抽象层的旧名称(已被 MCAL 取代,因为 'MAL' 在法语中意为 'bad') |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| MMU | 内存管理单元(Memory Management Unit) |
|
||||
| Master | 控制其他设备(从设备)的设备 |
|
||||
| Slave | 完全由主设备控制的设备 |
|
||||
| NMI | 不可屏蔽中断(Non maskable interrupt) |
|
||||
| OS | 操作系统(Operating System) |
|
||||
| PLL | 锁相环(Phase Locked Loop) |
|
||||
| PWM | 脉宽调制(Pulse Width Modulation) |
|
||||
| RX | 接收(Reception,在总线通信的上下文中) |
|
||||
| SPAL | 此工作组名称 |
|
||||
| SFR | 特殊功能寄存器(Special Function Register) |
|
||||
| RTE | 运行时环境(Runtime environment) |
|
||||
| WP | 工作包(Work Package) |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| STD | 标准(Standard) |
|
||||
| REQ | 需求(Requirement) |
|
||||
| UNINIT | 未初始化(Uninitialized) |
|
||||
|
||||
由于这是面向专业人士的专业文档,其他所有术语均假定为已知。
|
||||
|
||||
---
|
||||
|
||||
## 4 功能概述(Functional Overview)
|
||||
|
||||
### 4.1 DIO 驱动(DIO Driver)
|
||||
|
||||
DIO 驱动提供基于端口和通道的读写访问,以访问内部通用 I/O 端口。读写行为是无缓冲的。此驱动的基本行为是同步的。
|
||||
|
||||
DIO 驱动中使用以下表达式:
|
||||
|
||||
| 表达式 | 解释 |
|
||||
|---|---|
|
||||
| DIO 通道(DIO channel) | 表示单个通用数字输入/输出引脚 |
|
||||
| DIO 端口(DIO port) | 表示由硬件分组的多个 DIO 通道,可同步访问(通常由一个硬件寄存器控制)。例如:Freescale HC08 的 Port A(8 位) |
|
||||
| DIO 通道组(DIO channel group) | 表示由逻辑组表示的多个相邻 DIO 通道。DIO 通道组是 DIO 端口的一个子集,可同步访问。例如:8 位端口的端口引脚 2..6 |
|
||||
|
||||
---
|
||||
|
||||
## 5 需求追踪(Requirements Tracing)
|
||||
|
||||
| 需求 | 描述 | 由...满足 |
|
||||
|---|---|---|
|
||||
| RS_BRF_01024 | AUTOSAR 应提供公共符号的命名规则 | SRS_Dio_12355 |
|
||||
| RS_BRF_01864 | AUTOSAR 微控制器抽象应提供 I/O 信号到数字 I/O 端口的映射 | SRS_Dio_12003, SRS_Dio_12004, SRS_Dio_12005, SRS_Dio_12006, SRS_Dio_12007, SRS_Dio_12008, SRS_Dio_12352, SRS_Dio_12424, SRS_Dio_12900 |
|
||||
|
||||
---
|
||||
|
||||
## 6 需求规范(Requirement Specification)
|
||||
|
||||
### 6.1 功能需求(Functional Requirements)
|
||||
|
||||
#### 6.1.1 DIO 驱动
|
||||
|
||||
##### 6.1.1.1 配置与初始化(Configuration and Initialization)
|
||||
|
||||
端口结构的配置和初始化不属于 DIO 驱动的范畴。这由 Port 驱动完成(请参见 [SRS_Port_12001] 端口引脚属性配置)。
|
||||
|
||||
**6.1.1.1.1 [SRS_Dio_12355] 应配置符号名称**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应允许对以下符号名称进行静态配置:<br>- DIO 通道名称<br>- DIO 通道组名称<br>- DIO 端口名称 |
|
||||
| Rationale | 为 DIO 通道提供人类可读的符号名称。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01024)
|
||||
|
||||
##### 6.1.1.2 正常运行(Normal Operation)
|
||||
|
||||
**6.1.1.2.1 [SRS_Dio_12003] DIO 驱动应提供将数据字写入已分配 DIO 端口的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供将数据字写入已分配 DIO 端口的服务。<br>该操作应为无缓冲的。<br>对端口的输入功能不应有影响。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 对整个 DIO 端口的写访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.2 [SRS_Dio_12004] DIO 驱动应提供将可选数量的相邻位写入 DIO 端口已分配部分的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供将可选数量的相邻位写入 DIO 端口已分配部分的服务。该操作应为无缓冲的。 |
|
||||
| Rationale | 允许同时设置具有多个外部分配的 DIO 端口的一组 DIO 通道。 |
|
||||
| Use Case | 对具有多个分配的 DIO 端口的写访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.3 [SRS_Dio_12005] DIO 驱动应提供对单个 DIO 通道的写访问服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供对单个 DIO 通道(特定端口引脚)的写访问服务。 |
|
||||
| Rationale | 高效处理单个 DIO 通道。 |
|
||||
| Use Case | 对特定 DIO 通道(端口引脚)的写访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.4 [SRS_Dio_12006] DIO 驱动应提供从已分配 DIO 端口读取数据字的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供从已分配 DIO 端口读取数据字的服务。该操作应为无缓冲的。对端口的输出功能不应有影响。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 对整个 DIO 端口的读访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.5 [SRS_Dio_12007] DIO 驱动应提供从 DIO 端口已分配部分读取可选数量相邻位的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供从 DIO 端口已分配部分读取可选数量相邻位的服务。该操作应为无缓冲的。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 对具有多个分配的 DIO 端口的读访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.6 [SRS_Dio_12008] DIO 驱动应提供读取已分配 DIO 通道一个位的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供读取已分配 DIO 通道(特定端口引脚)一个位的服务。该操作应为无缓冲的。 |
|
||||
| Rationale | 高效处理单个 DIO 通道。 |
|
||||
| Use Case | 对特定 DIO 通道的读访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.7 [SRS_Dio_12900] DIO 驱动应提供翻转服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应提供翻转服务(将已分配 DIO 通道(特定端口引脚)的一个位从 1 翻转为 0 或从 0 翻转为 1)并在翻转后返回该通道的电平。该操作应为无缓冲的。 |
|
||||
| Rationale | 高效处理单个 DIO 通道。 |
|
||||
| Use Case | 对特定 DIO 通道进行翻转电平的读和写访问。 |
|
||||
| Dependencies | [SRS_Dio_12352] 一般读/写行为 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**6.1.1.2.8 [SRS_Dio_12352] DIO 驱动应允许对 DIO 端口、通道组和通道进行读写**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动应允许对 DIO 端口、通道组和通道进行读写,而不考虑其方向配置。<br><br>如果对配置为输入的通道进行写入,则该值应写入输出寄存器,但不会出现在物理端口引脚上。<br><br>如果读取配置为输出的通道,则在硬件支持的情况下读取真实引脚电平的值。否则,读取端口输出寄存器的值。 |
|
||||
| Rationale | 简化所有 DIO 读写服务的实现。允许输出引脚的回读。允许在将端口引脚切换到输出方向之前预设输出值。 |
|
||||
| Use Case | 请参见原理。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
### 6.2 非功能需求(Non-Functional Requirements)
|
||||
|
||||
#### 6.2.1 DIO 驱动
|
||||
|
||||
**6.2.1.1 [SRS_Dio_12424] 提供 DIO 访问的原子性**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | DIO 驱动的所有可重入函数应以原子方式执行以下访问操作:<br>- DIO 端口<br>- DIO 通道<br>- DIO 通道组 |
|
||||
| Rationale | 避免 DIO 驱动 API 函数并发访问中的数据完整性问题。 |
|
||||
| Use Case | 特定微控制器(或特定编译器)不提供对单个端口引脚的原子访问。因此,实现必须对整个端口使用读-修改-写操作。如果不阻塞并发访问,则对同一端口的引脚的并发访问将导致数据完整性问题。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
---
|
||||
|
||||
## 7 参考文献(References)
|
||||
|
||||
### 7.1 AUTOSAR 交付物(Deliverables of AUTOSAR)
|
||||
|
||||
- **[DOC_LAYERED_ARCH]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[AUTOSAR_GLOSSARY]** 词汇表,AUTOSAR_TR_Glossary.pdf
|
||||
- **[SRS_BSW_GENERAL]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[SRS_BSW_SPAL]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[TPS_STDT_0078]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 DIO 驱动软件需求规范的中文翻译。保留了所有需求 ID(SRS_Dio_xxxxx)、参考标识符及模块缩写。原始文档共 15 页,本翻译涵盖了全部章节内容。
|
||||
@@ -0,0 +1,627 @@
|
||||
# ICU 驱动需求(Requirements on ICU Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | ICU 驱动需求(Requirements on ICU Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 112 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 根据 TPS_standardization 模板更新;需求追踪的正式返工 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 扩展文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | "用户建议"修订;"修订信息"新增 |
|
||||
| 2006-11-28 | 2.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 作为独立文档发布。SRS SPAL V1.0.0 已被拆分为 12 个独立文档,以发布 2.0;移除了功能:硬件门控边缘计数、信号电平通知;批准了功能需求:时间戳、唤醒、边沿计数、获取经过信号时间、获取占空比输入值;新增了功能需求:重置已计数的边沿值 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 作为 SRS SPAL V1.0.0 的一部分初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [文档范围(Scope of document)](#1-文档范围)
|
||||
2. [如何阅读本文档(How to read this document)](#2-如何阅读本文档)
|
||||
- 2.1 [使用的约定(Conventions used)](#21-使用的约定)
|
||||
- 2.2 [需求结构(Requirements structure)](#22-需求结构)
|
||||
3. [缩略语与缩写(Acronyms and abbreviations)](#3-缩略语与缩写)
|
||||
4. [功能概述(Functional Overview)](#4-功能概述)
|
||||
- 4.1 [ICU 驱动(ICU Driver)](#41-icu-驱动)
|
||||
5. [需求追踪(Requirements Tracing)](#5-需求追踪)
|
||||
6. [需求规范(Requirement Specification)](#6-需求规范)
|
||||
- 6.1 [功能需求(Functional Requirements)](#61-功能需求)
|
||||
- 6.1.1 [ICU 驱动](#611-icu-驱动)
|
||||
- 6.1.1.1 [配置(Configuration)](#6111-配置)
|
||||
- 6.1.1.2 [初始化(Initialization)](#6112-初始化)
|
||||
- 6.1.1.3 [正常运行(Normal Operation)](#6113-正常运行)
|
||||
- 6.1.1.4 [关闭操作(Shutdown Operation)](#6114-关闭操作)
|
||||
7. [参考文献(References)](#7-参考文献)
|
||||
- 7.1 [相关标准与规范(Related standards and norms)](#71-相关标准与规范)
|
||||
|
||||
---
|
||||
|
||||
## 1 文档范围(Scope of document)
|
||||
|
||||
本文档规定了 ICU 驱动模块的需求。
|
||||
|
||||
### 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 2 如何阅读本文档(How to read this document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 2.1 使用的约定(Conventions used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [5] 中指定的表。
|
||||
- 在需求中,使用以下特定语义。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照所示进行解释。请注意,它们所使用文档的需求级别会修改这些词的强制力。
|
||||
|
||||
- **MUST**:意味着该定义是规范的绝对要求。
|
||||
- **MUST NOT**:意味着该定义是规范的绝对禁止。
|
||||
- **SHOULD**:意味着在特定情况下可能存在忽略特定条目的有效理由。
|
||||
- **SHOULD NOT**:意味着在特定情况下特定行为可能是可接受的甚至是有用的。
|
||||
- **MAY**:意味着某个项目是真正可选的。
|
||||
|
||||
### 2.2 需求结构(Requirements structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialization)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
|
||||
---
|
||||
|
||||
## 3 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
| 术语 | 描述 |
|
||||
|---|---|
|
||||
| Circular buffer(循环缓冲区) | 用于通过在到达末尾后从缓冲区开头再次开始来存储连续数据流的内存区域。 |
|
||||
| DIO | 数字输入输出(Digital Input Output) |
|
||||
| Duty Cycle(占空比) | 高电平时间与周期时间的百分比。<br>(高电平时间 / 周期时间)× 100% |
|
||||
| ECU | 电控单元(Electric Control Unit) |
|
||||
| High Time(高电平时间) | 参见图"ICU 时间定义"。应使用标准类型 STD_HIGH。 |
|
||||
| ICU | 输入捕获单元(Input Capture Unit) |
|
||||
| ICU channel(ICU 通道) | 表示绑定到一个输入信号和配置的测量模式硬件资源的逻辑 ICU 实体。 |
|
||||
| Linear buffer(线性缓冲区) | 用于通过从缓冲区开头开始并在最迟到达末尾时停止来存储数据流的内存区域。 |
|
||||
| Low Time(低电平时间) | 参见图"ICU 时间定义" |
|
||||
| MAL | 微控制器抽象层的旧名称(已被 MCAL 取代,因为 'MAL' 在法语中意为 'bad') |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| Measurement mode(测量模式) | 测量模式定义信号采集和评估的能力。可能的模式:<br>- 信号边沿检测/通知<br>- 信号测量<br>- 时间戳<br>- 边沿计数器 |
|
||||
| Measurement mode, Edge counter | 边沿计数器的功能,对外部边沿进行计数 |
|
||||
| Measurement mode, Signal Edge Detection | 信号边沿的通知 |
|
||||
| Measurement mode, Signal Measurement | 测量输入信号的经过高电平时间、经过低电平时间、经过周期时间和占空比。 |
|
||||
| Measurement mode, Timestamp | 为信号边沿生成时间戳,参见图"ICU 时间戳" |
|
||||
| Period Time(周期时间) | 参见图"ICU 时间定义" |
|
||||
| PWD | 脉冲宽度解调(Pulse width demodulation) |
|
||||
| SPAL | 标准外设抽象层(Standard Peripheral Abstraction Layer) |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| STD | 标准(Standard) |
|
||||
| UNINIT | 未初始化(Uninitialized) |
|
||||
|
||||
由于这是面向专业人士的专业文档,其他所有术语均假定为已知。
|
||||
|
||||
---
|
||||
|
||||
## 4 功能概述(Functional Overview)
|
||||
|
||||
### 4.1 ICU 驱动(ICU Driver)
|
||||
|
||||
ICU 驱动控制微控制器的输入捕获单元。它提供以下功能:
|
||||
|
||||
- 周期、低、高时间测量
|
||||
- 边沿检测和通知
|
||||
- 边沿计数
|
||||
- 边沿时间戳
|
||||
- 唤醒中断
|
||||
|
||||
下图显示了捕获比较单元的典型关键资源:
|
||||
|
||||
```
|
||||
Capture Timer 0
|
||||
Notification Interrupts
|
||||
f in x
|
||||
Capture Timer 1
|
||||
f in z
|
||||
Capture Timer Notification Interrupts
|
||||
Control
|
||||
f in extern x
|
||||
Capture Timer y
|
||||
f in extern y
|
||||
Notification Interrupts
|
||||
Timer values
|
||||
Signal 1 Capture Register 0
|
||||
Notification Interrupts
|
||||
Signal 2 Capture Register 1
|
||||
Notification Interrupts
|
||||
capture mode Capture Register 2
|
||||
& edge Notification Interrupts
|
||||
detection
|
||||
control
|
||||
Signal n Capture Register n
|
||||
Notification Interrupts
|
||||
```
|
||||
|
||||
对于信号边沿检测,使用捕获比较单元的边沿检测器或外部事件的中断控制器。
|
||||
|
||||
对于信号测量,需要捕获定时器和至少一个捕获寄存器。简单的信号边沿检测(不进行时间测量)也可以使用外部中断控制单元实现:
|
||||
|
||||
```
|
||||
Signal m
|
||||
level / edge Notification Interrupts
|
||||
detection
|
||||
&
|
||||
Signal z interrupt
|
||||
control Notification Interrupts
|
||||
```
|
||||
|
||||
然而,不可屏蔽中断(NMI)不在本模块的范围内,因为没有可控制的内容。
|
||||
|
||||
```
|
||||
High Time Low Time
|
||||
Period Time
|
||||
图:ICU 时间定义
|
||||
```
|
||||
|
||||
```
|
||||
0xFFFF
|
||||
Timestamp
|
||||
Timer
|
||||
0
|
||||
High
|
||||
Input Signal
|
||||
Low
|
||||
t
|
||||
Input Signal Timestamp
|
||||
Level Timer
|
||||
High 5461
|
||||
Low 10922
|
||||
High 22937
|
||||
Low 32767
|
||||
High 43690
|
||||
Low 49151
|
||||
High 58981
|
||||
Low 6553
|
||||
High 16383
|
||||
```
|
||||
|
||||
**图 1:ICU 时间戳**
|
||||
|
||||
---
|
||||
|
||||
## 5 需求追踪(Requirements Tracing)
|
||||
|
||||
| 需求 | 描述 | 由...满足 |
|
||||
|---|---|---|
|
||||
| RS_BRF_01056 | AUTOSAR BSW 模块应提供标准化接口 | SRS_Icu_12429 |
|
||||
| RS_BRF_01096 | AUTOSAR 应支持 ECU 的启动和关闭 | SRS_Icu_12407 |
|
||||
| RS_BRF_01104 | AUTOSAR 应支持 ECU 和总线的睡眠和唤醒 | SRS_Icu_12408 |
|
||||
| RS_BRF_01432 | AUTOSAR 服务应支持系统时间服务 | SRS_Icu_12430, SRS_Icu_12431, SRS_Icu_12434, SRS_Icu_12435, SRS_Icu_12436, SRS_Icu_12437, SRS_Icu_12442, SRS_Icu_12443, SRS_Icu_12444, SRS_Icu_12453, SRS_Icu_13100 |
|
||||
| RS_BRF_01448 | AUTOSAR 服务应支持模式和状态管理 | SRS_Icu_12371 |
|
||||
| RS_BRF_01488 | AUTOSAR RTE 和 BSW 应支持 ECU 启动、ECU 关闭(带重启)以及将 ECU 置于睡眠状态的标准化模式 | SRS_Icu_12370 |
|
||||
| RS_BRF_01904 | AUTOSAR 微控制器抽象应提供对硬件定时器的访问 | SRS_Icu_12438 |
|
||||
| RS_BRF_01968 | AUTOSAR IO 硬件抽象应支持边沿触发的 I/O 信号 | SRS_Icu_12369, SRS_Icu_12432, SRS_Icu_12433, SRS_Icu_12435, SRS_Icu_12436, SRS_Icu_12439, SRS_Icu_12442, SRS_Icu_12443 |
|
||||
| RS_BRF_02200 | AUTOSAR 诊断应提供对内部配置和校准数据的外部访问 | SRS_Icu_12327, SRS_Icu_12368, SRS_Icu_12425 |
|
||||
|
||||
---
|
||||
|
||||
## 6 需求规范(Requirement Specification)
|
||||
|
||||
### 6.1 功能需求(Functional Requirements)
|
||||
|
||||
#### 6.1.1 ICU 驱动
|
||||
|
||||
##### 6.1.1.1 配置(Configuration)
|
||||
|
||||
**6.1.1.1.1 [SRS_Icu_12327] ICU 驱动应允许配置全局参数**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应允许配置以下参数:<br>- 时钟源及可选的预分频器(模块范围)<br>- MCU 硬件相关设置(仅 ICU 外设特定设置) |
|
||||
| Rationale | 配置微控制器特定的 ICU 功能 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02200)
|
||||
|
||||
**6.1.1.1.2 [SRS_Icu_12368] ICU 驱动应支持每个通道的基本静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应支持每个通道的以下基本静态配置:<br><br>**强制参数:** <br>- 通道的符号名称<br>- 通知函数<br>- 唤醒能力<br><br>**可选参数:** <br>- 信号源(配置的端口引脚或来自信号矩阵的输入)如果由硬件提供(如果可以选择多个源)<br>- 测量模式(如果可以选择多个模式):<br> - 信号边沿检测/通知<br> - 信号测量<br> - 时间戳<br> - 边沿计数器<br><br>- 如果测量模式是"时间戳测量",则缓冲区处理应可配置。值应为:<br> - 循环缓冲区处理<br> - 线性缓冲区处理<br><br>- 已分配的捕获寄存器(对于仅提供边沿检测(如外部中断)的通道也可以没有)<br>- 已分配的捕获定时器(对于仅提供边沿检测(如外部中断)的通道也可以没有)<br>- 其他硬件相关设置(例如毛刺滤波器、预分频器) |
|
||||
| Rationale | 允许每个通道的不同用法 |
|
||||
| Use Case | |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02200)
|
||||
|
||||
**6.1.1.1.3 [SRS_Icu_12425] 对于每个 ICU 通道,可测量的"属性"应可配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 对于每个 ICU 通道,可测量的"属性"应可配置,可用值(至少)为:<br>- 高电平<br>- 低电平<br>- 周期时间 |
|
||||
| Rationale | 定义测量目的以在配置期间分配所需的硬件资源。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02200)
|
||||
|
||||
##### 6.1.1.2 初始化(Initialization)
|
||||
|
||||
**6.1.1.2.1 [SRS_Icu_12407] 在 ICU 驱动初始化后,所有通知都应被禁用**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 在 ICU 驱动初始化后,所有通知都应被禁用。所有 ICU 通道状态应设置为 INACTIVE。<br>通道的唤醒能力在初始化后应被禁用。<br>所有使用的寄存器都应初始化(包括中断的待处理标志)。 |
|
||||
| Rationale | ICU 通道的用户应负责启用/禁用通知。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01096)
|
||||
|
||||
**6.1.1.2.2 [SRS_Icu_12429] ICU 驱动应提供将 ICU 通道反初始化为其上电复位状态的功能**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供将 ICU 通道反初始化为其上电复位状态的功能(不包括不可写的寄存器)。 |
|
||||
| Rationale | 在可以进行有效初始化之前,有必要将所有硬件寄存器重置为相同的状态。否则上电复位后的初始化代码与模式更改后的初始化代码不同。 |
|
||||
| Use Case | 在更改省电模式的内部时钟频率后,可能有必要使用有效的预分频器值初始化定时器模块。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01056)
|
||||
|
||||
##### 6.1.1.3 正常运行(Normal Operation)
|
||||
|
||||
**6.1.1.3.1 [SRS_Icu_12305] ICU 驱动应允许在运行时启用/禁用 ICU 通道的通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应允许在运行时启用/禁用 ICU 通道的通知。<br>对于每个选定通道,应提供以下选项:<br>- 禁用通知<br>- 在以下边沿启用通知(如果硬件支持):<br> - 上升沿<br> - 下降沿<br> - 两个边沿 |
|
||||
| Rationale | 根据下一个预期边沿调整通知。 |
|
||||
| Use Case | 霍尔传感器的边沿检测。<br>禁用通知可用于实现抗饱和机制,以避免在 ICU 中出现过多中断时危胁整个系统。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋()
|
||||
|
||||
**6.1.1.3.2 [SRS_Icu_12369] ICU 驱动应在配置的信号边沿为 ICU 通道提供通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应在配置的信号边沿(上升/下降/两个边沿)为 ICU 通道提供通知,在以下配置中:<br>- 通知函数配置为非空指针<br>- 并且仅当通知被启用时 |
|
||||
| Rationale | 信号边沿通知 |
|
||||
| Use Case | 信号边沿检测 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.3 [SRS_Icu_12370] ICU 驱动应提供选择睡眠模式的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供选择睡眠模式的服务:<br>- 正常模式(强制)<br>- 睡眠模式<br><br>在正常模式下,所有通知均按配置可用。<br>在睡眠模式下,仅那些引起唤醒可用通知的中断可用。<br>所有其他中断被禁用,如果事件发生,必须不会导致退出 MCU 的降低功耗模式状态(例如 idle、halt)。 |
|
||||
| Rationale | 允许启用/禁用 ECU 唤醒所需的所有中断。 |
|
||||
| Use Case | 在进入 ECU 的降低功耗模式时,必须禁用 MCU 的所有中断,而不是在期间禁用唤醒源。否则可能丢失唤醒事件。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01488)
|
||||
|
||||
**6.1.1.3.4 [SRS_Icu_12371] ICU 驱动应提供返回 ICU 输入状态的同步服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供返回 ICU 输入状态的同步服务。<br>- 如果已检测到激活边沿,则此服务将返回 ACTIVE。一旦服务返回状态 ACTIVE,状态将被设置为 IDLE,直到检测到下一个边沿<br>- 如果未检测到激活边沿,则此服务将返回 IDLE |
|
||||
| Rationale | 通知禁用时对输入的轮询访问 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01448)
|
||||
|
||||
**6.1.1.3.5 [SRS_Icu_12438] ICU 驱动应提供在可配置边沿捕获定时器值到外部缓冲区的功能**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供在可配置边沿(上升沿/下降沿/两个边沿)捕获定时器值到外部缓冲区的功能。<br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | 采集高频和非周期性传感器信号 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 参见图 1:ICU 时间戳 |
|
||||
⌋(RS_BRF_01904)
|
||||
|
||||
**6.1.1.3.6 [SRS_Icu_12455] 如果配置了循环缓冲区处理,则在到达缓冲区末尾时,驱动应从外部缓冲区开头重新开始**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 如果配置了循环缓冲区处理,则当捕获功能到达缓冲区末尾时,驱动从外部缓冲区开头重新开始。<br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | 高频连续数据采集 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 参见图 1:ICU 时间戳 |
|
||||
⌋()
|
||||
|
||||
**6.1.1.3.7 [SRS_Icu_12456] 如果配置了线性缓冲区处理,则在到达缓冲区末尾时,驱动应停止捕获定时器值**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 如果配置了线性缓冲区处理,则当捕获功能到达缓冲区末尾时,驱动停止捕获定时器值。<br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | 高频非连续数据采集 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 参见图 1:ICU 时间戳 |
|
||||
⌋()
|
||||
|
||||
**6.1.1.3.8 [SRS_Icu_12430] ICU 驱动应提供在 ICU 通道上启动时间戳测量的异步服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供在 ICU 通道上启动时间戳测量的异步服务。传递的参数应为:<br>- ICU 通道<br>- 指向数据缓冲区的指针(时间戳和信号电平的目标)<br>- 数据缓冲区大小<br>- 通知间隔(事件)<br><br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | 配置和启用时间戳捕获 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
**6.1.1.3.9 [SRS_Icu_12431] ICU 驱动应提供取消 ICU 通道上时间戳测量的同步服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供取消 ICU 通道上时间戳测量的同步服务。传递的参数应为:<br>- ICU 通道<br><br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | 禁用时间戳捕获 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
**6.1.1.3.10 [SRS_Icu_12444] ICU 驱动应在已采集到所请求时间戳数量时提供通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应在已采集到所请求时间戳数量(通知间隔)时提供通知。<br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | 支持时间戳测量期间的通知汇总 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
**6.1.1.3.11 [SRS_Icu_12453] ICU 应提供时间戳索引服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供读取驱动的当前时间戳索引的同步服务。传递的参数应为:<br>- ICU 通道<br><br>此功能应对测量模式为"Timestamp"的每个 ICU 通道可用。 |
|
||||
| Rationale | 读取缓冲区内的当前时间戳索引 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
**6.1.1.3.12 [SRS_Icu_12439] ICU 应计算信号的边沿**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供计算信号边沿的功能。<br>仅对配置的边沿进行计数(上升沿/下降沿/两个边沿)。<br>此功能应对测量模式为"Edge Counter"的每个 ICU 通道可用。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | 计数高频事件。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.13 [SRS_Icu_12432] 边沿计数服务应在 ICU 通道上可用**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供在 ICU 通道上启用边沿计数的同步服务。传递的参数应为:<br>- ICU 通道<br><br>此功能应对测量模式为"Edge Counter"的每个 ICU 通道可用。 |
|
||||
| Rationale | 基本功能。 |
|
||||
| Use Case | 在定义的时间跨度内对边沿进行计数。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.14 [SRS_Icu_13100] 应能重置 ICU 通道已计数的边沿值**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供重置 ICU 通道已计数的边沿的同步服务。传递的参数应为:<br>- ICU 通道<br><br>此功能应对测量模式为"Edge Counter"的每个 ICU 通道可用。 |
|
||||
| Rationale | 将计数的开始与已计数的边沿的重置分开。 |
|
||||
| Use Case | 电动座椅定位的脉冲计数(如果座椅停止然后再次移动,应保留位置(等同于计数的边沿))。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
**6.1.1.3.15 [SRS_Icu_12433] ICU 通道上的边沿计数服务应被禁用**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供禁用 ICU 通道上边沿计数的同步服务。传递的参数应为:<br>- ICU 通道<br><br>此功能应对测量模式为"Edge Counter"的每个 ICU 通道可用。 |
|
||||
| Rationale | 基本功能。 |
|
||||
| Use Case | 在定义的时间跨度内对边沿进行计数。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.16 [SRS_Icu_12434] 应提供边沿计数读取服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供读取最后一次调用"启用 ICU 边沿计数服务"后已计数的边沿数的同步服务。传递的参数应为:<br>- ICU 通道<br><br>此功能应对测量模式为"Edge Counter"的每个 ICU 通道可用。 |
|
||||
| Rationale | 在最后一次调用后读取已计数的边沿数 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
**6.1.1.3.17 [SRS_Icu_12442] 应为每个 ICU 通道提供经过的信号低电平时间**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供服务以获取每个配置为测量模式"Signal Measurement, Signal Low Time"的 ICU 通道的经过信号低电平时间。<br>经过时间在下降沿和通道的连续上升沿之间测量。 |
|
||||
| Rationale | 获取经过的信号低电平时间 |
|
||||
| Use Case | PWD |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432, RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.18 [SRS_Icu_12435] 应为每个 ICU 通道提供经过的信号高电平时间**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供服务以获取每个配置为测量模式"Signal Measurement, Signal High Time"的 ICU 通道的信号高电平时间。<br>经过时间在上升沿和通道的连续下降沿之间测量。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | PWD |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432, RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.19 [SRS_Icu_12443] 应为 ICU 通道提供经过的周期时间**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供服务以获取每个配置为测量模式"Signal Measurement, Period Time"的 ICU 通道的经过周期时间。<br>经过时间在通道的两个连续上升(或下降)沿之间测量。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | PWD |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432, RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.20 [SRS_Icu_12436] 应提供 ICU 通道的高电平时间和周期时间**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供服务以获取每个配置为测量模式"Signal Measurement, Duty Cycle"的 ICU 通道的一致的高电平时间和周期时间。 |
|
||||
| Rationale | 基本功能,服务提供用于占空比计算的值。正确的计算和缩放由 ICU 模块的用户完成。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432, RS_BRF_01968)
|
||||
|
||||
**6.1.1.3.21 [SRS_Icu_12437] ICU 驱动的 API 服务内使用的所有时间单位应为 ticks 单位**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动的 API 服务内使用的所有时间单位应为 ticks 单位。 |
|
||||
| Rationale | 微秒与 ticks 之间的转换应为 ECU 抽象层的一部分。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01432)
|
||||
|
||||
##### 6.1.1.4 关闭操作(Shutdown Operation)
|
||||
|
||||
**6.1.1.4.1 [SRS_Icu_12408] ICU 驱动应提供启用/禁用单个 ICU 通道唤醒能力的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | ICU 驱动应提供启用/禁用单个 ICU 通道唤醒能力的服务。 |
|
||||
| Rationale | 控制 MCU 的唤醒条件需要启用或禁用硬件中断,而不仅仅是某些通知条件。 |
|
||||
| Use Case | 在错误情况下限制唤醒发生。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01104)
|
||||
|
||||
### 对其他功能的约束(Constrains to other functions)
|
||||
|
||||
**对模式管理的约束(Constrains to Mode Management):**
|
||||
|
||||
在唤醒条件之后,ECU 状态管理器应在调用 ICU 驱动的初始化服务之前处理唤醒信息。
|
||||
|
||||
---
|
||||
|
||||
## 7 参考文献(References)
|
||||
|
||||
- **[1]** 词汇表,AUTOSAR_TR_Glossary.pdf
|
||||
- **[2]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[3]** 基础软件的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[4]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[5]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
### 7.1 相关标准与规范(Related standards and norms)
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 ICU 驱动软件需求规范的中文翻译。保留了所有需求 ID(SRS_Icu_xxxxx)、参考标识符及模块缩写。原始文档共 25 页,本翻译涵盖了全部章节内容。ICU 驱动提供周期、低、高时间测量、边沿检测/通知、边沿计数、边沿时间戳和唤醒中断等关键功能。
|
||||
@@ -0,0 +1,667 @@
|
||||
# I/O 硬件抽象需求(Requirements on I/O Hardware Abstraction)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | I/O 硬件抽象需求(Requirements on I/O Hardware Abstraction) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 075 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 移除了相关标准与规范;编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 新增需求追踪章节 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 需求追踪的正式返工;新增三个电源状态转换;纳入 ECU 降级需求;根据 TPS_standardization 模板更新 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 移除了模块的唯一性限制;新特性:"功能诊断"接口;法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 扩展文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | "用户建议"修订;"修订信息"新增 |
|
||||
| 2006-11-28 | 2.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [文档范围(Scope of this document)](#1-文档范围)
|
||||
2. [如何阅读本文档(How to read this document)](#2-如何阅读本文档)
|
||||
- 2.1 [使用的约定(Conventions used)](#21-使用的约定)
|
||||
- 2.2 [需求结构(Requirement structure)](#22-需求结构)
|
||||
3. [缩略语与缩写(Acronyms and abbreviations)](#3-缩略语与缩写)
|
||||
- 3.1 [表达式 - 通用(Expressions - general)](#31-表达式---通用)
|
||||
- 3.2 [表达式 - 信号属性(Expressions - signal attributes)](#32-表达式---信号属性)
|
||||
4. [功能概述(Functional Overview)](#4-功能概述)
|
||||
- 4.1 [IO 硬件抽象(IO Hardware Abstraction)](#41-io-硬件抽象)
|
||||
- 4.2 [信号属性概述(Overview of Attributes to qualify Signals)](#42-信号属性概述)
|
||||
5. [需求追踪(Requirements Tracing)](#5-需求追踪)
|
||||
6. [需求规范(Requirement Specification)](#6-需求规范)
|
||||
- 6.1 [功能需求(Functional Requirements)](#61-功能需求)
|
||||
- 6.1.1 [IO 硬件抽象](#611-io-硬件抽象)
|
||||
- 6.2 [非功能需求(质量)(Non-Functional Requirements (Qualities))](#62-非功能需求质量)
|
||||
7. [参考文献(References)](#7-参考文献)
|
||||
- 7.1 [AUTOSAR 交付物(Deliverables of AUTOSAR)](#71-autosar-交付物)
|
||||
|
||||
---
|
||||
|
||||
## 1 文档范围(Scope of this document)
|
||||
|
||||
本文档定义了 AUTOSAR 内需求规范的一般规则和格式。它应作为每个需求文档的基础。
|
||||
|
||||
需求按以下方式组织:
|
||||
|
||||
- 基础软件模块的一般需求(其他文档)
|
||||
- 适用于微控制器抽象层和 ECU 抽象层所有模块的一般需求(本文档)
|
||||
- 模块特定需求(本文档)
|
||||
|
||||
### 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 2 如何阅读本文档(How to read this document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 2.1 使用的约定(Conventions used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [2] 中指定的表。
|
||||
- 在需求中,应使用以下特定语义(基于互联网工程任务组 IETF)。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应解释为:
|
||||
|
||||
- **SHALL**:这个词意味着该定义是规范的绝对要求。
|
||||
- **SHALL NOT**:这个词组意味着该定义是规范的绝对禁止。
|
||||
- **MUST**:这个词意味着该定义是规范的绝对要求(出于法律问题)。
|
||||
- **MUST NOT**:这个词组意味着该定义是规范的绝对禁止(出于法律约束)。
|
||||
- **SHOULD**:意味着在特定情况下可能存在忽略特定条目的有效理由。
|
||||
- **SHOULD NOT**:意味着在特定情况下特定行为可能是可接受的甚至是有用的。
|
||||
- **MAY**:意味着某个项目是真正可选的。
|
||||
|
||||
### 2.2 需求结构(Requirement structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialization)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
|
||||
---
|
||||
|
||||
## 3 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
### 3.1 表达式 - 通用(Expressions - general)
|
||||
|
||||
| 表达式 | 描述 | 示例 |
|
||||
|---|---|---|
|
||||
| Class(类) | 表示 ECU 的一种电气连接。例如模拟、离散等。 | Analogue Class、Discrete Class 等。 |
|
||||
| Electrical Signal(电气信号) | ECU 引脚上的电气信号 | ECU 引脚上的物理输入电压 |
|
||||
| ECU pin(ECU 引脚) | ECU 与电子系统其余部分的硬件电气连接 | |
|
||||
| ECU Signals(ECU 信号) | 电气信号的软件表示。信号具有属性和符号名称 | 输入电压、离散输出、PWM 输入等。 |
|
||||
| ECU Signal group(ECU 信号组) | 来自同一 Class 的电气信号组的软件表示 | 仅用于离散输入和离散输出 |
|
||||
| Attributes(属性) | ECU 中存在的每种信号的软件(SW)和硬件(HW)特性 | 范围、生命周期/延迟等。 |
|
||||
| Symbolic name(符号名称) | 信号的符号名称由 IO 硬件抽象模块用于建立链接(功能、引脚) | |
|
||||
|
||||
### 3.2 表达式 - 信号属性(Expressions - signal attributes)
|
||||
|
||||
| 表达式 | 描述 | 示例 |
|
||||
|---|---|---|
|
||||
| Data Type(数据类型) | 信号的数据类型:<br>- Analogue:VoltageType、CurrentType、ResistanceType<br>- Discrete:bool 或 AUTOSAR 定义的类型(BoolType) | 每种数据类型具有给定大小:16 位或 32 位 |
|
||||
| Range(范围) | 功能范围而非电气范围。<br>- 对于模拟信号 [lowerLimit...upperLimit](电压、电流),[0...upperLimit](电阻)<br>- 对于离散信号 [0,1]<br>- 对于时序信号 [0…upperLimit](周期),[-100…100%](占空比) | [-12Volts...+12Volts](电压) |
|
||||
| Resolution(分辨率) | 该属性对于许多 Class 取决于范围和数据类型。<br>示例:(upperLimit - lowerLimit) / 数据类型长度 | VoltageType => 16 位;分辨率 => 24 / 65535 |
|
||||
| Hardware Resolution(硬件分辨率) | 这是硬件(ADC)的最大可能分辨率 | ADC 转换器可以具有 8/10/12/16 位分辨率 |
|
||||
| Hardware Accuracy(硬件精度) | 这是硬件的精度,取决于用于采集和/或生成的硬件外设 | ADC 转换器可以具有 ±3 LSB 的精度 |
|
||||
| Accuracy(精度) | 取决于用于采集和/或生成的硬件外设 | ADC 转换器可以是 8/10/12/16 位转换器 |
|
||||
| Diagnosis(诊断) | 功能诊断能力 | 不支持诊断(可以是静态检查);无可用有效信息;对电源短路;对地短路;开路;过热;诊断正常 |
|
||||
| Synchronization(同步) | 信号可以与另一个信号或事件(如触发器)同步 | 如果离散信号为"TRUE",则获取模拟信号 |
|
||||
| Access(访问) | 定义信号是否附加到 Get(读)/ Set(写)功能 | |
|
||||
| Inversion(反相) | 物理值和逻辑值之间的反相。此属性对 IO 硬件抽象的用户不可见且不可配置。 | 物理高状态 →(信号=False);物理低状态 →(信号=True) |
|
||||
| Lifetime(生命周期) | 仅适用于输入:这是数据允许的最大年龄(时间以微秒为单位)。如果生命周期为 0,则信号直接从寄存器获取。 | 生命周期 = 0 是直接访问;生命周期 = 1000µs 时读取的值最多比实际值旧 1ms |
|
||||
| Delay(延迟) | 仅适用于输出:这是输出实际设置之前允许的最大时间(时间以微秒为单位)。如果延迟为 0,则立即设置信号。 | 延迟 = 0 是直接访问;延迟 = 100µs 命令设置直到 100µs 过去 |
|
||||
| Filtering / Debouncing(滤波/去抖) | 定义信号是作为原始值提供,还是 IO 硬件抽象模块中为此信号包含滤波/去抖方法 | Raw、Debounce 3 Samples、Wait 10ms |
|
||||
| Sampling Rate(采样率) | 获取信号值所需的时间段 | 采样窗口(突发)的采样率 |
|
||||
| Report Changes(更改报告) | 此属性仅适用于离散输入。它定义报告电平更改的能力(或不报告)。 | 启用或禁用 |
|
||||
| Pulse Test(脉冲测试) | 此属性意味着输出应通过专用脉冲进行测试。如果未设置此属性,则在使用输出时进行诊断。 | 可用或不可用 |
|
||||
|
||||
---
|
||||
|
||||
## 4 功能概述(Functional Overview)
|
||||
|
||||
### 4.1 IO 硬件抽象(IO Hardware Abstraction)
|
||||
|
||||
IO 硬件抽象模块抽象自 ECU 硬件的信号路径(布局、微控制器引脚、微控制器外部设备如 IO ASIC)。它向上层软件层提供基于信号的接口。它根据 ECU 硬件输入/输出的物理表示执行静态抽象和反相(如果需要)(补偿在 ECU IO 和微控制器引脚之间的路径中引起的静态影响,例如分压器、硬件反相)。
|
||||
|
||||
IO 硬件抽象模块允许根据属性列表配置每个信号。接口是 AUTOSAR 标准。
|
||||
|
||||
### 4.2 信号属性概述(Overview of Attributes to qualify Signals)
|
||||
|
||||
下表总结了不同类型 ECU 信号类(Analoguein、Analogueout、Discretein、DiscreteStatus、Discretepow、PWx Periodin/out、PWx Duty Cyclein/out)所适用的属性。表中列出了 BSW-Resolution、Age (Lifetime/Delay)、Report Feature、Sampling Rate、Debouncing、Monitoring、Filtering/Pulse Test、Access、Failure Age、Signal Data Type、Unit、Signal 等属性。
|
||||
|
||||
**表图例:**
|
||||
|
||||
- **X** 表示该属性适用于此类 ECU 信号并且应被配置。
|
||||
- Xl 表示适用的年龄属性是生命周期(Lifetime)。
|
||||
- Xd 表示适用的年龄属性是延迟(Delay)。
|
||||
- **F** 表示该属性适用于此类 ECU 信号但是固定的标准值。
|
||||
- **O** 表示该属性对于此类 ECU 信号是可选的,取决于静态配置(禁用/启用)。
|
||||
- **-** 表示该属性不适用或对此类 ECU 信号无意义。
|
||||
|
||||
---
|
||||
|
||||
## 5 需求追踪(Requirements Tracing)
|
||||
|
||||
| 需求 | 描述 | 由...满足 |
|
||||
|---|---|---|
|
||||
| RS_BRF_01000 | AUTOSAR 架构应将 BSW 组织为硬件独立层和硬件依赖层 | SRS_IoHwAb_12319 |
|
||||
| RS_BRF_01024 | AUTOSAR 应提供公共符号的命名规则 | SRS_IoHwAb_12232 |
|
||||
| RS_BRF_01048 | AUTOSAR 模块设计应支持模块在多任务环境中协作 | SRS_IoHwAb_12449 |
|
||||
| RS_BRF_01056 | AUTOSAR BSW 模块应提供标准化接口 | SRS_IoHwAb_12452 |
|
||||
| RS_BRF_01080 | AUTOSAR 应允许访问内部和外部外围设备 | SRS_IoHwAb_12242 |
|
||||
| RS_BRF_01184 | AUTOSAR 应支持不同的降级方法 | SRS_IoHwAb_12453, SRS_IoHwAb_12454, SRS_IoHwAb_12455 |
|
||||
| RS_BRF_01352 | AUTOSAR RTE 应提供直接读/写数据访问,或者替代地在可运行对象调用之前预读数据并在可运行对象返回后后写数据 | SRS_IoHwAb_00002, SRS_IoHwAb_12324, SRS_IoHwAb_12338, SRS_IoHwAb_12410, SRS_IoHwAb_12411, SRS_IoHwAb_12412, SRS_IoHwAb_12413, SRS_IoHwAb_12415 |
|
||||
| RS_BRF_01384 | AUTOSAR RTE 应支持数据的自动范围检查 | SRS_IoHwAb_12409 |
|
||||
| RS_BRF_01632 | AUTOSAR 通信应支持信号组的数据一致性 | SRS_IoHwAb_12323 |
|
||||
| RS_BRF_01856 | AUTOSAR 微控制器抽象应提供对内部 MCU 配置的访问 | SRS_IoHwAb_12338 |
|
||||
| RS_BRF_01952 | AUTOSAR IO 硬件抽象应支持已连接 I/O 设备的标准化模式 | SRS_IoHwAb_12453, SRS_IoHwAb_12454, SRS_IoHwAb_12455 |
|
||||
| RS_BRF_01968 | AUTOSAR IO 硬件抽象应支持边沿触发的 I/O 信号 | SRS_IoHwAb_12414, SRS_IoHwAb_12416, SRS_IoHwAb_12417, SRS_IoHwAb_12445 |
|
||||
| RS_BRF_02000 | AUTOSAR IO 硬件抽象应保护硬件免受非法操作 | SRS_IoHwAb_12419, SRS_IoHwAb_13900, SRS_IoHwAb_13901, SRS_IoHwAb_13902 |
|
||||
| RS_BRF_02016 | AUTOSAR 应提供保护系统免受未授权修改的机制 | SRS_IoHwAb_12451 |
|
||||
| RS_BRF_02024 | AUTOSAR 应提供保护系统免受未授权使用的机制 | SRS_IoHwAb_12248 |
|
||||
| RS_BRF_02144 | AUTOSAR 诊断应为外部测试人员提供标准化诊断服务 | SRS_IoHwAb_00002 |
|
||||
| RS_BRF_02160 | AUTOSAR 诊断应允许外部测试人员控制 ECU 的主动功能 | SRS_IoHwAb_12418 |
|
||||
| RS_BRF_02168 | AUTOSAR 诊断应提供对异常操作条件的集中分类和处理 | SRS_IoHwAb_12339, SRS_IoHwAb_13900, SRS_IoHwAb_13901, SRS_IoHwAb_13902, SRS_IoHwAb_13904 |
|
||||
| RS_BRF_02176 | AUTOSAR 错误处理应区分已定义异常操作条件和预期行为的意外异常 | SRS_IoHwAb_13903 |
|
||||
| RS_BRF_02224 | AUTOSAR 应支持运行时硬件测试 | SRS_IoHwAb_12452 |
|
||||
| RS_BRF_02272 | AUTOSAR 应提供应用软件行为的追踪 | SRS_IoHwAb_12450 |
|
||||
|
||||
---
|
||||
|
||||
## 6 需求规范(Requirement Specification)
|
||||
|
||||
### 6.1 功能需求(Functional Requirements)
|
||||
|
||||
#### 6.1.1 IO 硬件抽象
|
||||
|
||||
##### 6.1.1.1 通用(General)
|
||||
|
||||
**6.1.1.1.1 [SRS_IoHwAb_12409] IO 硬件抽象模块应为每个信号提供一个静态范围内的值**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应为每个信号提供一个静态范围内的值。此范围独立于基础软件驱动缩放因子。<br>示例:<br>- 模拟信号 => [lowerLimit...upperLimit],其中 (lowerLimit = -upperLimit) 或 (lowerLimit = 0) |
|
||||
| Rationale | 支持具有高分辨率的宽范围 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01384)
|
||||
|
||||
**6.1.1.1.2 [SRS_IoHwAb_12410] IO 硬件抽象模块应提供读取具有特定属性的输入电压的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供读取输入电压的服务,具有以下属性:<br>- 数据类型:VoltageType<br>- 范围:[lowerLimit...upperLimit],lowerLimit 和 upperLimit 可以为负([-5Volts, -3Volts])<br>- 分辨率:VoltageType / (upperLimit - lowerLimit)<br>- 精度:HW 提供<br>- 同步:是/否<br>- 生命周期:x = 延迟 x 微秒<br>- 滤波/去抖:原始、滤波(带宽、截止频率)<br>- 采样率:x:每 x µs 采样一次 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 控制响应电压的组件/传感器 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352)
|
||||
|
||||
**6.1.1.1.3 [SRS_IoHwAb_12411] IO 硬件抽象模块应提供读取具有特定属性的输出电压的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供控制输出电压的服务,具有以下属性:<br>- 数据类型:VoltageType<br>- 范围:[lowerLimit...upperLimit],lowerLimit 可以为负<br>- 分辨率:VoltageType / (upperLimit - lowerLimit)<br>- 精度:HW 提供<br>- 诊断:IO 硬件抽象模块能够检测以下故障:<br> - 不支持诊断(可以是静态检查)<br> - 无可用有效信息<br> - 对电源短路<br> - 对地短路<br> - 开路<br> - 过热<br> - 诊断正常<br>- 同步:是/否<br>- 延迟:x = 延迟 x 微秒 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | ECU 电源;通过使用 PWM 抽象生成模拟信号 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352)
|
||||
|
||||
**6.1.1.1.4 [SRS_IoHwAb_12413] IO 硬件抽象模块应提供读取具有特定属性的输入电流的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供读取输入电流的服务,具有以下属性:<br>- 数据类型:CurrentType<br>- 范围:[lowerLimit…upperLimit],lowerLimit 可以为负<br>- 分辨率:CurrentType / (upperLimit - lowerLimit)<br>- 精度:HW 提供<br>- 同步:是/否<br>- 生命周期:x = 延迟 x 微秒<br>- 滤波/去抖:原始、滤波(带宽、截止频率)<br>- 采样率:x:每 x µs 采样一次 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 控制由电流驱动的组件/传感器 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352)
|
||||
|
||||
**6.1.1.1.5 [SRS_IoHwAb_12415] IO 硬件抽象模块应提供使用特定属性测量连接电阻的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供使用以下属性测量连接电阻的服务:<br>- 数据类型:ResistanceType<br>- 范围:[lowerLimit…upperLimit],lowerLimit 为空或为正<br>- 分辨率:ResistanceType / (upperLimit - lowerLimit)<br>- 精度:HW 提供<br>- 同步:是/否<br>- 生命周期:x = 延迟 x 微秒<br>- 滤波/去抖:原始、滤波(带宽、截止频率)<br>- 采样率:x:每 x µs 采样一次 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 温度传感器的测量 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352)
|
||||
|
||||
**6.1.1.1.6 [SRS_IoHwAb_12412] IO 硬件抽象模块应提供获取/读取具有特定属性的离散输入的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供获取/读取离散输入的服务,具有以下属性:<br>- 数据类型:boolean<br>- 范围:0 或 1<br>- 分辨率:逻辑状态<br>- 精度:1 位<br>- 同步:是/否<br>- 生命周期:x = 延迟 x 微秒<br>- 滤波/去抖:原始、滤波(带宽、截止频率)<br>- 采样率:x:每 x µs 采样一次<br>- 更改报告:启用或禁用 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 从 ECU 引脚获取/读取逻辑值(0/1) |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352)
|
||||
|
||||
**6.1.1.1.7 [SRS_IoHwAb_12324] IO 硬件抽象模块应提供同时获取/读取多个离散输入的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | AUTOSAR IO 硬件抽象模块应提供同时获取/读取多个离散输入的服务。输入的数量应可配置。这限制为物理端口。 |
|
||||
| Rationale | 所有输入属于同一功能或同一增强型板上芯片。 |
|
||||
| Use Case | 用于电机控制以及运行时优化 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352)
|
||||
|
||||
**6.1.1.1.8 [SRS_IoHwAb_12450] IO 硬件抽象模块应提供在离散输入更改时向信号客户端报告的机制**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供在离散输入更改时向信号客户端报告的机制。仅在为此信号启用更改报告属性时才可用此功能。 |
|
||||
| Rationale | 确保实时行为 |
|
||||
| Use Case | 检测传感器活动并及时做出反应,例如关于刮水器和制动踏板 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02272)
|
||||
|
||||
**6.1.1.1.9 [SRS_IoHwAb_12419] IO 硬件抽象模块应提供监控硬件故障并设置状态的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供监控硬件故障并设置状态的服务:<br>- 数据类型:StatusType<br>- 范围:<br> - 无可用有效信息<br> - 对电源短路<br> - 对地短路<br> - 开路<br> - 过热<br> - 诊断正常<br>- 同步:是/否<br>- 生命周期:x = 延迟 x 微秒<br>- 滤波/去抖:原始、滤波(带宽、截止频率) |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 了解继电器/灯输出的实际状态 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02000)
|
||||
|
||||
**6.1.1.1.10 [SRS_IoHwAb_12418] IO 硬件抽象模块应提供控制具有特定属性的离散供电输出的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供控制离散供电输出的服务,具有以下属性:<br>- 数据类型:boolean<br>- 范围:0 或 1<br>- 分辨率:逻辑状态<br>- 精度:1 位<br>- 诊断:IO 硬件抽象模块能够检测以下故障:<br> - 不支持诊断(可以是静态检查)<br> - 无可用有效信息<br> - 对电源短路<br> - 对地短路<br> - 开路<br> - 过热<br> - 诊断正常<br>- 同步:是/否<br>- 延迟:x = 延迟 x 微秒<br><br>简单输出(无电源)是电源输出的子集,其诊断属性始终为"不支持诊断(可以是静态检查)" |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 继电器控制、灯控制 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02160)
|
||||
|
||||
**6.1.1.1.11 [SRS_IoHwAb_12323] IO 硬件抽象模块应提供同时更新多个离散输出的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | AUTOSAR IO 硬件抽象模块应提供同时更新多个离散输出的服务。输出的数量应可配置。这限制为物理端口。 |
|
||||
| Rationale | 所有输出属于同一功能或同一增强型板上芯片。 |
|
||||
| Use Case | 用于同步和运行时优化 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01632)
|
||||
|
||||
**6.1.1.1.12 [SRS_IoHwAb_12417] IO 硬件抽象模块应提供测量信号上两个下降沿或上升沿之间周期时间的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供使用以下属性测量信号上两个下降沿或上升沿之间周期时间的服务:<br>- 数据类型:PeriodType<br>- 范围:[lowerLimit…upperLimit],lowerLimit 为空或为正<br>- 分辨率:PeriodType / (upperLimit - lowerLimit)<br>- 精度:HW 提供<br>- 生命周期:x = 延迟 x 微秒 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 测量 PWM 传感器的周期 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.1.13 [SRS_IoHwAb_12416] IO 硬件抽象模块应提供使用特定属性控制信号上两个下降沿或上升沿之间周期时间的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供使用以下属性控制信号上两个下降沿或上升沿之间周期时间的服务:<br>- 数据类型:PeriodType<br>- 范围:[lowerLimit…upperLimit],lowerLimit 为空或为正<br>- 分辨率:PeriodType / (upperLimit - lowerLimit)<br>- 精度:HW 提供<br>- 诊断:<br> - 不支持诊断(可以是静态检查)<br> - 无可用有效信息<br> - 对电源短路<br> - 对地短路<br> - 开路<br> - 过热<br> - 诊断正常<br>- 同步:是/否<br>- 延迟:x = 延迟 x 微秒 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 控制 PWM 输出信号的周期 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.1.14 [SRS_IoHwAb_12414] IO 硬件抽象模块应提供控制周期性输出信号的有效电平与非有效电平之间比率的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供使用以下属性控制周期性输出信号的有效电平与非有效电平之间比率的服务:<br>- 数据类型:DutyCycleType<br>- 范围:[-100%…+100%]<br>- 分辨率:待定义<br>- 精度:HW 提供<br>- 同步:是/否<br>- 延迟:x = 延迟 x 微秒 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | 负范围是有道理的,例如允许在硬件级别上进行电机方向控制(负占空比 = 向左,正占空比 = 向右) |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.1.15 [SRS_IoHwAb_12445] IO 硬件抽象模块应提供测量周期性输入信号的有效电平与非有效电平之间比率的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供使用以下属性测量周期性输入信号的有效电平与非有效电平之间比率的服务:<br>- 数据类型:DutyCycleType<br>- 范围:[-100%…+100%]<br>- 分辨率:100 / M<br>- 精度:HW 提供<br>- 生命周期:x = 延迟 x 微秒 |
|
||||
| Rationale | IO 硬件抽象的基本功能 |
|
||||
| Use Case | ICU 需求 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.1.1.16 [SRS_IoHwAb_12338] IO 硬件抽象应提供同步信号访问功能**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 即使采样是异步的,IO 硬件抽象也应提供同步信号访问功能(信号访问)。 |
|
||||
| Rationale | 不同机制的抽象 |
|
||||
| Use Case | 访问循环 ADC 转换的缓冲区 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352, RS_BRF_01856)
|
||||
|
||||
**6.1.1.1.17 [SRS_IoHwAb_00002] I/O 硬件抽象应提供到 DCM 的接口以控制和读取已配置的信号**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | I/O 硬件抽象应提供到 DCM 的接口,允许控制和读取已配置的信号。接口应实现以下功能:<br>- 通过设置以下状态来控制信号:<br> - IOHWAB_CONTROLTOECU:解锁信号<br> - IOHWAB_RESETTODEFAULT:锁定信号并将其设置为已配置的默认值<br> - IOHWAB_FREEZE:将信号锁定为当前值<br> - IOHWAB_ADJUSTMENT:锁定信号并将其调整为 DCM 模块给定的值<br>- 读取信号(在由"控制功能"设置的任何信号状态下)<br><br>锁定信号意味着某个信号在软件上锁定到 SW-C,即 SW-C 的请求在锁定状态下对硬件没有影响。<br>尽管如此,DCM 应完全访问硬件。如果对输入信号使用 C/S 通信,可能有必要具有 IoHwAb 内部缓冲区,其值可由 DCM 调整。 |
|
||||
| Rationale | 通过 DCM 诊断 I/O 信号 |
|
||||
| Use Case | 系统诊断 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01352, RS_BRF_02144)
|
||||
|
||||
##### 6.1.1.2 配置(Configuration)
|
||||
|
||||
**6.1.1.2.1 [SRS_IoHwAb_12232] 每个信号的符号名称应唯一**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应允许静态配置每个信号的唯一符号名称。 |
|
||||
| Rationale | 更改硬件分配时上层无需更改 |
|
||||
| Use Case | 灵活的 ECU 设计 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01024)
|
||||
|
||||
**6.1.1.2.2 [SRS_IoHwAb_12319] IO 硬件抽象模块应独立于物理电平**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | AUTOSAR IO 硬件抽象模块应独立于物理电平(即:输出命令在低电平或高电平有效),并仅为数字 IO 向上层提供逻辑电平。 |
|
||||
| Rationale | 用户和硬件设计之间的独立性 |
|
||||
| Use Case | 例如,门可以 OPEN/CLOSE,这些状态独立于实际硬件输入状态(0v、5v、12v) |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01000)
|
||||
|
||||
**6.1.1.2.3 [SRS_IoHwAb_12449] IO 硬件抽象应能同时处理多个电气信号**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应能同时处理多个电气信号。组的定义在配置步骤期间完成。属于一个组的信号始终具有相同的类型。 |
|
||||
| Rationale | 无时间延迟控制一组信号 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01048)
|
||||
|
||||
##### 6.1.1.3 正常运行(Normal Operation)
|
||||
|
||||
**6.1.1.3.1 [SRS_IoHwAb_12242] IO 硬件抽象应隐藏通过 ECU 内部板上外设访问信号的任何通信**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应隐藏通过 ECU 内部板上外设访问信号的任何通信。ECU 上的信号路由由此接口抽象。 |
|
||||
| Rationale | 对于上层,端口是直接连接到微控制器还是连接到板载 ASIC 都不应有区别。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01080)
|
||||
|
||||
##### 6.1.1.4 诊断功能(Diagnostic Functions)
|
||||
|
||||
以下示意图显示了输出驱动级及其诊断能力。它们应有助于理解以下需求:
|
||||
|
||||
- **数字输出的模拟监控线诊断概念方案**:通过模拟监控线诊断数字输出
|
||||
- **单驱动级的数字监控线数字输出诊断概念方案**:通过数字监控线诊断数字输出
|
||||
- **n 通道驱动级的数字监控线数字输出诊断概念方案**:通过数字监控线诊断数字输出
|
||||
|
||||
**6.1.1.4.1 [SRS_IoHwAb_13900] IO 硬件抽象应检测对地短路故障(根据硬件能力)**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应检测对地短路故障(根据硬件能力)。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 离散负载信号的模拟监控、用于诊断和/或软件驱动级保护的故障检测 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 特定硬件设计:现有诊断监控 |
|
||||
⌋(RS_BRF_02000, RS_BRF_02168)
|
||||
|
||||
**6.1.1.4.2 [SRS_IoHwAb_13901] IO 硬件抽象应检测对 +UBat 的短路故障(根据硬件能力)**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应检测对 +UBat 的短路故障(根据硬件能力)。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 离散负载信号的模拟监控、用于诊断和/或错误反应的故障检测 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 特定硬件设计:现有诊断监控 |
|
||||
⌋(RS_BRF_02000, RS_BRF_02168)
|
||||
|
||||
**6.1.1.4.3 [SRS_IoHwAb_13902] IO 硬件抽象应检测开路(根据硬件能力)**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应检测开路(根据硬件能力)。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 离散负载信号的模拟监控、用于诊断和/或错误反应的故障检测 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 特定硬件设计:现有诊断监控 |
|
||||
⌋(RS_BRF_02000, RS_BRF_02168)
|
||||
|
||||
**6.1.1.4.4 [SRS_IoHwAb_13903] IO 硬件抽象应检测过载故障**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应检测过载故障。如果控制输出信号被激活,则执行此检测。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | 离散负载信号的模拟监控、用于诊断和/或错误反应的故障检测 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 特定硬件设计:诊断监控 |
|
||||
⌋(RS_BRF_02176)
|
||||
|
||||
**6.1.1.4.5 [SRS_IoHwAb_13904] IO 硬件抽象应检测过热**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应检测过热。如果控制输出信号被激活,则执行此检测。 |
|
||||
| Rationale | 基本功能 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 特定硬件设计:诊断监控 |
|
||||
⌋(RS_BRF_02168)
|
||||
|
||||
##### 6.1.1.5 故障操作(Fault operation)
|
||||
|
||||
**6.1.1.5.1 [SRS_IoHwAb_12248] IO 硬件抽象模块应保持 ECU 硬件安全**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应保持 ECU 硬件安全。<br>当在此输出上检测到故障时,IO 硬件抽象应能切断输出信号。这是为了保护硬件而完成的。 |
|
||||
| Rationale | 防止 ECU 损坏 |
|
||||
| Use Case | 对地短路、对电源短路、过热、过载。三次命令后停用输出。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02024)
|
||||
|
||||
**6.1.1.5.2 [SRS_IoHwAb_12451] IO 硬件抽象模块不应自行决定重新打开出于硬件保护原因而被关闭的输出**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块不应自行决定重新打开出于硬件保护原因而被关闭的输出。<br>恢复故障的此类策略应在软件组件中定义。 |
|
||||
| Rationale | 策略包含在 SW-C 中 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02016)
|
||||
|
||||
**6.1.1.5.3 [SRS_IoHwAb_12452] IO 硬件抽象模块应提供在输出被切断后触发输出的接口**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象模块应提供在输出被切断后触发输出的接口。 |
|
||||
| Rationale | 检测电气故障 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01056, RS_BRF_02224)
|
||||
|
||||
##### 6.1.1.6 电源状态转换(Power state transitions)
|
||||
|
||||
**6.1.1.6.1 [SRS_IoHwAb_12453] 应提供电源状态准备的封装**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 如果实现了对外设的电源控制,IoHwAbstraction 应为每个应用电源模式定义一个 API,其中与给定应用电源模式相关的所有外设电源状态转换都将生效。 |
|
||||
| Rationale | 需要创建一个封装,允许将最终对车辆系统上不同 ECU 有效的应用电源模式映射到每个 ECU 上每个外设的电源状态。通过这种方式,给定电源模式的设置阶段可以原子地执行,以便所有 HW 外设同步转换到有效电源状态。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念提案 596:ECU 降级 |
|
||||
⌋(RS_BRF_01952, RS_BRF_01184)
|
||||
|
||||
**6.1.1.6.2 [SRS_IoHwAb_12454] 应提供电源状态设置的封装**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 如果实现了对外设的电源控制,IoHwAbstraction 应为每个应用电源模式定义一个 API,其中应准备与给定应用电源模式相关的所有外设电源状态转换(电源状态准备)。 |
|
||||
| Rationale | 需要创建一个封装,允许将最终对车辆系统上不同 ECU 有效的应用电源模式映射到每个 ECU 上每个外设的电源状态。通过这种方式,给定电源模式的准备阶段可以原子地执行。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念提案 596:ECU 降级 |
|
||||
⌋(RS_BRF_01952, RS_BRF_01184)
|
||||
|
||||
**6.1.1.6.3 [SRS_IoHwAb_12455] 应提供每个电源状态准备完成的回调通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 如果实现了对外设的电源控制,IoHwAbstraction 应为实现给定应用电源模式所需的每个外设的每个电源状态定义一个回调。 |
|
||||
| Rationale | 有必要解耦电源转换的准备阶段和设置阶段。通过这种方式,IoHwAbs 或 CDD 可以避免轮询所有外设的状态以检查何时可以设置电源状态。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念提案 596:ECU 降级 |
|
||||
⌋(RS_BRF_01952, RS_BRF_01184)
|
||||
|
||||
### 6.2 非功能需求(质量)(Non-Functional Requirements (Qualities))
|
||||
|
||||
**6.2.1 [SRS_IoHwAb_12339] IO 硬件抽象应为每个信号保证给定的最坏情况延迟时间**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | IO 硬件抽象应为每个信号保证给定的最坏情况延迟时间。该时间可用于评估时间约束。 |
|
||||
| Rationale | 满足请求反应时间 |
|
||||
| Use Case | 大量时间约束,例如按下按钮后的反应 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02168)
|
||||
|
||||
---
|
||||
|
||||
## 7 参考文献(References)
|
||||
|
||||
### 7.1 AUTOSAR 交付物(Deliverables of AUTOSAR)
|
||||
|
||||
- **[1]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[2]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 I/O 硬件抽象需求规范的中文翻译。保留了所有需求 ID(SRS_IoHwAb_xxxxx)、参考标识符及模块缩写。原始文档共 29 页,本翻译涵盖了全部章节内容。IO 硬件抽象层提供基于信号的接口,向上层抽象出 ECU 硬件的信号路径。
|
||||
@@ -0,0 +1,347 @@
|
||||
# OCU 驱动需求(Requirements on OCU Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | OCU 驱动需求(Requirements on OCU Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 614 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 新增第 3 章:需求追踪 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 文档范围(Scope of this document)
|
||||
|
||||
本文档规定了 OCU 驱动模块的需求。
|
||||
|
||||
### 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [如何阅读本文档(How to read this document)](#1-如何阅读本文档)
|
||||
- 1.1 [使用的约定(Conventions used)](#11-使用的约定)
|
||||
- 1.2 [需求结构(Requirements structure)](#12-需求结构)
|
||||
2. [缩略语与缩写(Acronyms and abbreviations)](#2-缩略语与缩写)
|
||||
3. [需求追踪(Requirements Tracing)](#3-需求追踪)
|
||||
4. [需求规范(Requirement Specification)](#4-需求规范)
|
||||
- 4.1 [OCU 驱动](#41-ocu-驱动)
|
||||
- 4.1.1 [功能概述(Functional Overview)](#411-功能概述)
|
||||
- 4.1.2 [功能需求(Functional Requirements)](#412-功能需求)
|
||||
- 4.1.2.1 [配置(Configuration)](#4121-配置)
|
||||
- 4.1.2.2 [初始化(Initialization)](#4122-初始化)
|
||||
- 4.1.2.3 [正常运行(Normal Operation)](#4123-正常运行)
|
||||
- 4.1.2.4 [关闭操作(Shutdown Operation)](#4124-关闭操作)
|
||||
5. [相关文档(Related Documentation)](#5-相关文档)
|
||||
- 5.1 [AUTOSAR 交付物(AUTOSAR deliverables)](#51-autosar-交付物)
|
||||
|
||||
---
|
||||
|
||||
## 1 如何阅读本文档(How to read this document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 1.1 使用的约定(Conventions used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [6] 中指定的表。
|
||||
- 在需求中,使用以下特定语义。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照所示进行解释。请注意,它们所使用文档的需求级别会修改这些词的强制力。
|
||||
|
||||
- **MUST**:这个词,或术语 "REQUIRED" 或 "SHALL",意味着该定义是规范的绝对要求。
|
||||
- **MUST NOT**:这个词组,或词组 "SHALL NOT",意味着该定义是规范的绝对禁止。
|
||||
- **SHOULD**:意味着在特定情况下可能存在忽略特定条目的有效理由。
|
||||
- **SHOULD NOT**:意味着在特定情况下特定行为可能是可接受的甚至是有用的。
|
||||
- **MAY**:这个词,或形容词 "OPTIONAL",意味着某个项目是真正可选的。
|
||||
|
||||
### 1.2 需求结构(Requirements structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialization)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
- ...
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
- 对其他 WP 的输出
|
||||
- ...
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| OCU | 输出比较单元(Output Compare Unit) |
|
||||
| OCU channel | 表示由自由运行计数器、比较阈值以及比较过程结果所执行的动作组成的逻辑实体 |
|
||||
| Compare threshold(比较阈值) | 每次计数器增加一个单位时与计数器内容进行比较的目标值 |
|
||||
| Free running counter(自由运行计数器) | 从最小值运行到最大值的计数器,并在达到最大值后自动重新启动到最小值 |
|
||||
| DMA | 直接内存访问(Direct Memory Access) |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| SPAL | 标准外设抽象层(Standard Peripheral Abstraction Layer) |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| STD | 标准(Standard) |
|
||||
| UNINIT | 未初始化(Uninitialized) |
|
||||
|
||||
由于这是面向专业人士的专业文档,其他所有术语均假定为已知。
|
||||
|
||||
---
|
||||
|
||||
## 3 需求追踪(Requirements Tracing)
|
||||
|
||||
| 需求 | 描述 | 由...满足 |
|
||||
|---|---|---|
|
||||
| RS_BRF_01056 | AUTOSAR BSW 模块应提供标准化接口 | SRS_Ocu_00005, SRS_Ocu_00006, SRS_Ocu_00007, SRS_Ocu_00008, SRS_Ocu_00009, SRS_Ocu_00010, SRS_Ocu_00011, SRS_Ocu_00012 |
|
||||
| RS_BRF_01064 | AUTOSAR BSW 应提供回调函数以访问上层模块 | SRS_Ocu_00006 |
|
||||
| RS_BRF_01096 | AUTOSAR 应支持 ECU 的启动和关闭 | SRS_Ocu_00004, SRS_Ocu_00005, SRS_Ocu_00008, SRS_Ocu_00011 |
|
||||
| RS_BRF_01136 | AUTOSAR 应支持在系统启动后解析已配置 BSW 数据的变体 | SRS_Ocu_00002, SRS_Ocu_00008 |
|
||||
| RS_BRF_01152 | AUTOSAR 应支持有限的动态重新配置 | SRS_Ocu_00007, SRS_Ocu_00010, SRS_Ocu_00011, SRS_Ocu_00012 |
|
||||
| RS_BRF_01632 | AUTOSAR 通信应支持信号组的数据一致性 | SRS_Ocu_00013 |
|
||||
| RS_BRF_01888 | AUTOSAR 微控制器抽象应提供 I/O 信号到输出比较单元的映射 | SRS_Ocu_00002, SRS_Ocu_00011, SRS_Ocu_00012 |
|
||||
| RS_BRF_01904 | AUTOSAR 微控制器抽象应提供对硬件定时器的访问 | SRS_Ocu_00002, SRS_Ocu_00006, SRS_Ocu_00007, SRS_Ocu_00009, SRS_Ocu_00010, SRS_Ocu_00013, SRS_Ocu_00014 |
|
||||
| RS_BRF_01968 | AUTOSAR IO 硬件抽象应支持边沿触发的 I/O 信号 | SRS_Ocu_00006 |
|
||||
| RS_BRF_02040 | AUTOSAR BSW 和 RTE 应确保数据一致性 | SRS_Ocu_00014 |
|
||||
|
||||
---
|
||||
|
||||
## 4 需求规范(Requirement Specification)
|
||||
|
||||
### 4.1 OCU 驱动
|
||||
|
||||
#### 4.1.1 功能概述(Functional Overview)
|
||||
|
||||
该驱动提供了一种比较两个值并在比较匹配时自动执行操作的方法,从而可以加快软件进程。
|
||||
|
||||
本规范规定了 AUTOSAR 基础软件模块输出比较驱动(OCU)的功能、API 和配置。
|
||||
|
||||
每个 OCU 通道链接到属于微控制器的硬件 OCU。该驱动提供用于初始化和控制微控制器内部 OCU 外设的服务。OCU 模块可以生成 HW 信号以驱动外部设备。
|
||||
|
||||
下图显示了 OCU 通道的典型表示:
|
||||
|
||||
```
|
||||
Free running counter(自由运行计数器)
|
||||
OUTPUT
|
||||
Comparison threshold(比较阈值)
|
||||
```
|
||||
|
||||
**图 1:输出比较通道**
|
||||
|
||||
"output" 是比较匹配时实际执行的动作。根据配置,可以执行软件动作和/或硬件动作。
|
||||
|
||||
#### 4.1.2 功能需求(Functional Requirements)
|
||||
|
||||
##### 4.1.2.1 配置(Configuration)
|
||||
|
||||
**4.1.2.1.1 [SRS_Ocu_00002] OCU 驱动应支持每个通道的以下基本静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应支持每个通道的以下基本静态配置:<br>**强制参数:**<br>- 通道/通道 ID 的符号名称<br>- 计数器的最大值<br>- 计数分辨率/频率<br>- 通知函数<br>- 阈值的默认值<br>- 已分配的硬件通道<br><br>**可选参数:**<br>- 计数方向<br>- 输出信号(内部信号或端口引脚,如果由硬件提供)。应提供默认输出电平(复位后的值):<br> - OCU_LOW/OCU_HIGH<br>- 由通道触发的硬件事件(如果硬件支持):<br> - 硬件资源 ID(例如 OCU_ADC、OCU_DMA)<br> - 每个硬件资源的适当编号(例如 ADC_chn1)<br>- 可选的时钟设置(如果硬件支持)<br><br>此外,如果硬件支持,OCU 驱动应允许配置 OCU-外设的特定设置。 |
|
||||
| Rationale | 允许每个通道的不同用法 |
|
||||
| Use Case | |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01888, RS_BRF_01904, RS_BRF_01136)
|
||||
|
||||
##### 4.1.2.2 初始化(Initialization)
|
||||
|
||||
**4.1.2.2.1 [SRS_Ocu_00004] 在初始化 OCU 驱动后,所有通知都应被禁用**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 在初始化 OCU 驱动后,所有通知都应被禁用。所有通道都应停止(无计数运行)。<br>如果通道有相关的输出引脚,则此引脚应设置为通道配置中定义的默认值。 |
|
||||
| Rationale | 防止初始化后出现不期望的事件。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01096)
|
||||
|
||||
**4.1.2.2.2 [SRS_Ocu_00005] OCU 驱动应提供反初始化 OCU 驱动的功能**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应提供反初始化 OCU 驱动的功能。 |
|
||||
| Rationale | 在可以进行有效初始化之前,有必要重置驱动特定资源(SFR、变量等)。 |
|
||||
| Use Case | 在 ECU 运行时使用有效配置(post-build)重新初始化之前需要进行反初始化。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01096, RS_BRF_01056)
|
||||
|
||||
##### 4.1.2.3 正常运行(Normal Operation)
|
||||
|
||||
**4.1.2.3.1 [SRS_Ocu_00006] OCU 驱动应在计数器的当前值与阈值匹配时为 OCU 通道提供通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应在计数器的当前值与阈值匹配时为 OCU 通道提供通知。通知应在以下条件下触发:<br>- 通知函数配置为非空指针<br>- 并且仅当通知被启用时 |
|
||||
| Rationale | 通道上的比较匹配时,必须执行某个动作。将执行该动作的模块需要被通知。 |
|
||||
| Use Case | 上层执行与参考同步的动作,该参考由阈值的当前值表示。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01064, RS_BRF_01968, RS_BRF_01056, RS_BRF_01904)
|
||||
|
||||
**4.1.2.3.2 [SRS_Ocu_00007] OCU 驱动应允许在运行时启用/禁用 OCU 通道的通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应允许在运行时启用/禁用 OCU 通道的通知。<br>对于每个选定通道,应提供以下选项:<br>- 禁用通知<br>- 在比较匹配时启用通知(计数器的当前值等于阈值) |
|
||||
| Rationale | 防止调用不期望的通知(中断),并允许选择软件执行流中可能出现第一次或下一次通知的确切点。 |
|
||||
| Use Case | 当通道计数器匹配定义的阈值时,上层被通知以执行任务并可以更改阈值的当前值 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01056, RS_BRF_01152, RS_BRF_01904)
|
||||
|
||||
**4.1.2.3.3 [SRS_Ocu_00008] OCU 驱动应提供启动和停止通道的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应提供启动和停止通道的服务。停止通道意味着不应再触发任何动作。启动通道意味着允许执行已配置的动作。 |
|
||||
| Rationale | 允许软件单独控制每个通道的操作。 |
|
||||
| Use Case | H 桥连接到通道的引脚。引脚必须仅当桥准备好操作时才开始驱动桥。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01056, RS_BRF_01096, RS_BRF_01136)
|
||||
|
||||
**4.1.2.3.4 [SRS_Ocu_00009] OCU 驱动应提供读取计数器值的同步服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应提供读取计数器值的同步服务。 |
|
||||
| Rationale | 通道的计数器值对应于物理信息(时间、压力、角度位置等),上层将其用于各种目的。 |
|
||||
| Use Case | 上层读取计数器的当前值并计算相应的物理值。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01056, RS_BRF_01904)
|
||||
|
||||
**4.1.2.3.5 [SRS_Ocu_00010] OCU 驱动应提供修改通道阈值的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应提供修改通道阈值的服务。此服务应允许为阈值写入:<br>- 绝对值<br>- 或相对值:相对于当前计数器值<br>- 或相对值:相对于当前阈值值(相对值设置需要硬件支持) |
|
||||
| Rationale | 为上层提供一种动态更改通道比较阈值以适应运行中软件的方法。 |
|
||||
| Use Case | 当计数器回绕时,使用相对值更新下一个比较阈值。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01056, RS_BRF_01152, RS_BRF_01904)
|
||||
|
||||
**4.1.2.3.6 [SRS_Ocu_00011] OCU 驱动应提供同步服务以设置附加到通道的输出引脚的状态**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应提供同步服务以设置附加到通道的输出引脚的状态。 |
|
||||
| Rationale | 根据系统的不同阶段(SHUTDOWN、IDLE 等),输出引脚必须具有已知状态(LOW 或 HIGH) |
|
||||
| Use Case | 将与通道关联的引脚初始化为相关电平。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_01056, RS_BRF_01152, RS_BRF_01096, RS_BRF_01888)
|
||||
|
||||
**4.1.2.3.7 [SRS_Ocu_00012] OCU 驱动应提供服务以设置附加到通道的引脚在比较匹配时将执行的动作**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应提供服务以预设置附加到通道的引脚在比较匹配时将执行的动作(如果硬件支持)。此服务应将以下内容作为参数:<br>- OCU 通道<br>- 比较时的引脚动作(如果硬件支持)<br><br>引脚动作的可能值应为 OCU_HIGH、OCU_LOW、OCU_TOGGLE、OCU_DISABLE。 |
|
||||
| Rationale | 通道的输出引脚必须根据系统需要表现。 |
|
||||
| Use Case | 在通道的输出引脚处生成脉冲。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01056, RS_BRF_01152, RS_BRF_01888)
|
||||
|
||||
**4.1.2.3.8 [SRS_Ocu_00013] OCU 驱动应允许将相同的计数器基准和时序配置为多个通道使用**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动应允许将相同的计数器基准和时序配置为多个通道使用(如果此功能由硬件支持)。这将允许在组中使用多个通道。<br>配置应提供以下参数:<br>- 要分组的 OCU 通道 |
|
||||
| Rationale | 允许同步具有相同参考的不同动作。 |
|
||||
| Use Case | 同步驱动属于 H 桥的一对开关。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01632, RS_BRF_01904)
|
||||
|
||||
**4.1.2.3.9 [SRS_Ocu_00014] OCU 驱动的 API 服务内使用的所有单位应为 ticks 单位**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | OCU 驱动的 API 服务内使用的所有单位应为 ticks 单位。 |
|
||||
| Rationale | 物理单位(阈值和计数器的)与 ticks 之间的转换应为 ECU 抽象层的一部分。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | |
|
||||
⌋(RS_BRF_02040, RS_BRF_01904)
|
||||
|
||||
##### 4.1.2.4 关闭操作(Shutdown Operation)
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 5 相关文档(Related Documentation)
|
||||
|
||||
### 5.1 AUTOSAR 交付物(AUTOSAR deliverables)
|
||||
|
||||
- **[1]** 词汇表,AUTOSAR_TR_Glossary.pdf
|
||||
- **[2]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[3]** 基础软件的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[4]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[5]** 基础软件模块列表,AUTOSAR_BasicSoftwareModuleList.pdf
|
||||
- **[6]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 OCU 驱动软件需求规范的中文翻译。保留了所有需求 ID(SRS_Ocu_xxxxx)、参考标识符及模块缩写。原始文档共 16 页,本翻译涵盖了全部章节内容。
|
||||
@@ -0,0 +1,459 @@
|
||||
# PWM 驱动需求(Requirements on PWM Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | PWM 驱动需求(Requirements on PWM Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 113 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 新增需求追踪章节 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 新增支持 ECU 降级概念的需求;新增到新功能文档的链接 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 扩展文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 修改 "SRS_Pwm_12379 PWM 通道组频率" 以支持独立 PWM 频率;与软件同步占空比描述;法律声明修订;"用户建议" 修订;"修订信息" 新增 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 作为独立文档发布。SRS SPAL V1.0.0 已被拆分为 12 个独立文档,以发布 2.0;模块配置修改 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 作为 SRS SPAL V1.0.0 的一部分初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [文档范围(Scope of Document)](#1-文档范围)
|
||||
2. [如何阅读本文档(How to read this document)](#2-如何阅读本文档)
|
||||
- 2.1 [使用的约定(Conventions used)](#21-使用的约定)
|
||||
- 2.2 [需求结构(Requirements structure)](#22-需求结构)
|
||||
3. [功能概述(Functional Overview)](#3-功能概述)
|
||||
4. [缩略语与缩写(Acronyms and abbreviations)](#4-缩略语与缩写)
|
||||
5. [需求追踪(Requirements Tracing)](#5-需求追踪)
|
||||
6. [需求规范(Requirement Specification)](#6-需求规范)
|
||||
- 6.1 [功能需求(Functional Requirements)](#61-功能需求)
|
||||
- 6.1.1 [通用(General)](#611-通用)
|
||||
- 6.1.2 [配置(Configuration)](#612-配置)
|
||||
- 6.1.3 [初始化(Initialization)](#613-初始化)
|
||||
- 6.1.4 [正常运行(Normal Operation)](#614-正常运行)
|
||||
- 6.2 [非功能需求(Non-Functional Requirements)](#62-非功能需求)
|
||||
- 6.2.1 [SRS_Pwm_12386 PWM 驱动不应涵盖通用 I/O 上的 PWM 仿真](#621-srs_pwm_12386)
|
||||
7. [相关文档(Related Documentation)](#7-相关文档)
|
||||
- 7.1 [AUTOSAR 交付物(Deliverables of AUTOSAR)](#71-autosar-交付物)
|
||||
|
||||
---
|
||||
|
||||
## 1 文档范围(Scope of Document)
|
||||
|
||||
本文档规定了 PWM 驱动模块的需求。
|
||||
|
||||
### 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 2 如何阅读本文档(How to read this document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 2.1 使用的约定(Conventions used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [5] 中指定的表。
|
||||
- 在需求中,使用以下特定语义。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照所示进行解释。请注意,它们所使用文档的需求级别会修改这些词的强制力。
|
||||
|
||||
- **MUST**:这个词,或术语 "REQUIRED" 或 "SHALL",意味着该定义是规范的绝对要求。
|
||||
- **MUST NOT**:这个词组,或词组 "SHALL NOT",意味着该定义是规范的绝对禁止。
|
||||
- **SHOULD**:这个词,或形容词 "RECOMMENDED",意味着在特定情况下可能存在忽略特定条目的有效理由。
|
||||
- **SHOULD NOT**:意味着在特定情况下特定行为可能是可接受的甚至是有用的,但在实现任何带有此标签描述的行为之前,应理解其全部含义并仔细权衡该情况。
|
||||
- **MAY**:这个词,或形容词 "OPTIONAL",意味着某个项目是真正可选的。
|
||||
|
||||
### 2.2 需求结构(Requirements structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialisation)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
- ...
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
- 对其他 WP 的输出
|
||||
- ...
|
||||
|
||||
---
|
||||
|
||||
## 3 功能概述(Functional Overview)
|
||||
|
||||
本规范规定了 AUTOSAR 基础软件模块 Pwm 驱动的功能、API 和配置。
|
||||
|
||||
每个 PWM 通道链接到属于微控制器的硬件 PWM。PWM 信号的类型(例如中心对齐、左对齐等)未在本规范中定义,留给实现。
|
||||
|
||||
驱动提供用于初始化和控制微控制器内部 PWM 级(脉宽调制)的服务。PWM 模块生成具有可变脉冲宽度的脉冲。它允许选择占空比和信号周期时间。
|
||||
|
||||
---
|
||||
|
||||
## 4 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| CS | 片选(Chip Select) |
|
||||
| DIO | 数字输入输出(Digital Input Output) |
|
||||
| ECU | 电控单元(Electric Control Unit) |
|
||||
| DMA | 直接内存访问(Direct Memory Access) |
|
||||
| ICU | 输入捕获单元(Input Capture Unit) |
|
||||
| MAL | 微控制器抽象层的旧名称(已被 MCAL 取代,因为 'MAL' 在法语中意为 'bad') |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| MISO | 主输入从输出(Master Input Slave Output) |
|
||||
| MMU | 内存管理单元(Memory Management Unit) |
|
||||
| MOSI | 主输出从输入(Master Output Slave Input) |
|
||||
| Master | 控制其他设备(从设备)的设备 |
|
||||
| Slave | 完全由主设备控制的设备 |
|
||||
| NMI | 不可屏蔽中断(Non Maskable Interrupt) |
|
||||
| OS | 操作系统(Operating System) |
|
||||
| PLL | 锁相环(Phase Locked Loop) |
|
||||
| PWM | 脉宽调制(Pulse Width Modulation) |
|
||||
| RX | 接收(Reception,在总线通信的上下文中) |
|
||||
| SPAL | 此工作组名称 |
|
||||
| SFR | 特殊功能寄存器(Special Function Register) |
|
||||
| RTE | 运行时环境(RunTime Environment) |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| STD | 标准(Standard) |
|
||||
| REQ | 需求(Requirement) |
|
||||
| UNINIT | 未初始化(Uninitialized) |
|
||||
|
||||
由于这是面向专业人士的专业文档,其他所有术语均假定为已知。
|
||||
|
||||
---
|
||||
|
||||
## 5 需求追踪(Requirements Tracing)
|
||||
|
||||
| 需求 | 描述 | 由...满足 |
|
||||
|---|---|---|
|
||||
| RS_BRF_01008 | AUTOSAR 应将硬件相关层组织成微控制器独立层和微控制器依赖层 | SRS_Pwm_12379 |
|
||||
| RS_BRF_01096 | AUTOSAR 应支持 ECU 的启动和关闭 | SRS_Pwm_12380, SRS_Pwm_12381 |
|
||||
| RS_BRF_01136 | AUTOSAR 应支持在系统启动后解析已配置 BSW 数据的变体 | SRS_Pwm_12295, SRS_Pwm_12380, SRS_Pwm_12382 |
|
||||
| RS_BRF_01184 | AUTOSAR 应支持不同的降级方法 | SRS_Pwm_12460, SRS_Pwm_12461, SRS_Pwm_12462, SRS_Pwm_12463 |
|
||||
| RS_BRF_01448 | AUTOSAR 服务应支持模式和状态管理 | SRS_Pwm_12358, SRS_Pwm_12385, SRS_Pwm_12460, SRS_Pwm_12461, SRS_Pwm_12462, SRS_Pwm_12463 |
|
||||
| RS_BRF_01856 | AUTOSAR 微控制器抽象应提供对内部 MCU 配置的访问 | SRS_Pwm_12293, SRS_Pwm_12375, SRS_Pwm_12389 |
|
||||
| RS_BRF_01968 | AUTOSAR IO 硬件抽象应支持边沿触发的 I/O 信号 | SRS_Pwm_12299 |
|
||||
| RS_BRF_01992 | AUTOSAR IO 硬件抽象应支持频域 I/O 信号 | SRS_Pwm_12297, SRS_Pwm_12383, SRS_Pwm_12459 |
|
||||
| RS_BRF_02200 | AUTOSAR 诊断应提供对内部配置和校准数据的外部访问 | SRS_Pwm_12378 |
|
||||
|
||||
---
|
||||
|
||||
## 6 需求规范(Requirement Specification)
|
||||
|
||||
### 6.1 功能需求(Functional Requirements)
|
||||
|
||||
#### 6.1.1 通用(General)
|
||||
|
||||
**6.1.1.1 [SRS_Pwm_12459] PWM 驱动应为占空比提供缩放方案**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应为占空比提供以下缩放方案:<br>- 0 = 0%<br>- 0x8000 = 100%<br><br>0x8000 提供最高分辨率,同时允许使用 16 位值表示 100% 占空比。 |
|
||||
| Rationale | 选择值 0x8000(32768)是因为可以高效地实现以下计算。 |
|
||||
| Use Case | 源代码示例:<br>`AbsoluteDutyCycle = ((uint32)AbsolutePeriodTime * RelativeDutyCycle) >> 15;` |
|
||||
| Dependencies | [SRS_Pwm_12383] 占空比分辨率 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01992)
|
||||
|
||||
**6.1.1.2 [SRS_Pwm_12383] PWM 驱动应提供 16 位接口以设置占空比**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应提供 16 位接口以设置占空比。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | -- |
|
||||
| Dependencies | 占空比始终是信号的有效电平(高或低,取决于空闲电平配置,请参见 [SRS_Pwm_12293]) |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01992)
|
||||
|
||||
#### 6.1.2 配置(Configuration)
|
||||
|
||||
**6.1.2.1 [SRS_Pwm_12375] PWM 驱动应允许对 PWM 通道数进行模块范围配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应允许对以下参数进行模块范围配置:<br>- PWM 通道数 |
|
||||
| Rationale | 基本配置 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01856)
|
||||
|
||||
**6.1.2.2 [SRS_Pwm_12293] PWM 驱动应允许对 PWM 通道属性进行静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应允许对每个 PWM 通道的以下选项进行静态配置。<br>**强制参数:**<br>- 已分配的硬件通道<br>- 默认周期值<br>- 默认占空比值<br>- 极性(高或低)<br>- 空闲状态(占空比 = 0%)高或低<br>- 通道类型:<br> - 固定周期<br> - 固定周期、移相(如果硬件支持)<br> - 可变周期<br><br>**可选参数(如果硬件支持):**<br>- 通道相位偏移<br>- 相位偏移的参考通道<br>- 微控制器特定通道属性 |
|
||||
| Rationale | 基本通道配置。 |
|
||||
| Use Case | 通道相位偏移:避免 EMC 问题 |
|
||||
| Dependencies | [SRS_Pwm_12383], [SRS_Pwm_12459] |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01856)
|
||||
|
||||
**6.1.2.3 [SRS_Pwm_12378] PWM 驱动应能为 PWM 信号的每个边沿分配通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应能为 PWM 信号的每个边沿分配通知。该通知应可静态配置。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | PWM 边沿触发的 ADC 转换<br>PWM 信号诊断 |
|
||||
| Dependencies | [SRS_Pwm_12299], [SRS_Pwm_12293] |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_02200)
|
||||
|
||||
**6.1.2.4 [SRS_Pwm_12379] 使用相同 MCU 定时器的所有 PWM 通道应具有相同频率或独立频率**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 使用相同 MCU 定时器的所有 PWM 通道应具有相同频率或独立频率。 |
|
||||
| Rationale | 取决于微控制器硬件,可能并非每个 PWM 通道都有自己的定时器。在这种情况下,PWM 通道必须共享一个定时器。PWM 通道的频率必须与硬件定时器频率相同或独立。配置必须考虑这一点。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01008)
|
||||
|
||||
**6.1.2.5 [SRS_Pwm_12389] PWM 驱动应仅允许对某些 PWM 通道的频率进行静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应仅允许对某些 PWM 通道的频率进行静态配置。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | 某些 PWM 通道的频率在运行时不应可更改 |
|
||||
| Dependencies | [SRS_Pwm_12293] 通道类型的配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01856)
|
||||
|
||||
#### 6.1.3 初始化(Initialization)
|
||||
|
||||
**6.1.3.1 [SRS_Pwm_12380] 通过初始化 PWM 驱动,所有 PWM 通道都应启动**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 通过初始化 PWM 驱动,所有 PWM 通道都已启动。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01136, RS_BRF_01096)
|
||||
|
||||
**6.1.3.2 [SRS_Pwm_12381] 通过反初始化 PWM 驱动,所有 PWM 通道都应停止**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 通过反初始化 PWM 驱动,所有 PWM 通道都已停止。PWM 输出的状态应可配置。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Pwm_12293] PWM 通道属性配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01096)
|
||||
|
||||
#### 6.1.4 正常运行(Normal Operation)
|
||||
|
||||
**6.1.4.1 [SRS_Pwm_12295] PWM 驱动应提供设置选定通道占空比的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应提供设置选定通道占空比的服务。参数应为:<br>- PWM 通道<br>- PWM 占空比(范围:0..100%;0% = 反相极性电平,100% = 极性电平,不允许出现尖峰) |
|
||||
| Rationale | 基本功能。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Pwm_12459], [SRS_Pwm_12383] |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01136)
|
||||
|
||||
**6.1.4.2 [SRS_Pwm_12382] PWM 驱动应等到信号周期结束以更新 PWM 信号的占空比**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应等到信号周期结束以更新 PWM 信号的占空比。该功能应可配置。 |
|
||||
| Rationale | 占空比在周期内无效。<br>周期内的占空比变化可能导致输出信号上的不期望伪影(插入一个过短/过长的脉冲)。这被称为"缓冲/非缓冲 PWM 输出操作"(Freescale HC08)。缓冲操作(可避免这些不良影响)需要两个寄存器而不是一个。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01136)
|
||||
|
||||
**6.1.4.3 [SRS_Pwm_12358] PWM 驱动应能将所选通道的输出立即设置为给定状态**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应能将所选通道的输出立即设置为给定状态。 |
|
||||
| Rationale | 允许禁用 PWM 输出。 |
|
||||
| Use Case | MOSFET 控制的直流电机的制动斜坡:<br>占空比在斜坡内逐步降低。达到目标制动占空比值(例如 35%)后,通过立即将占空比设置为 0% 来关闭 MOSFET。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 这应是一个单独的接口 |
|
||||
⌋(RS_BRF_01448)
|
||||
|
||||
**6.1.4.4 [SRS_Pwm_12385] PWM 驱动应提供获取 PWM 通道输出状态的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应提供获取 PWM 通道状态(高或低)的服务(如果硬件支持)。 |
|
||||
| Rationale | 允许读回 PWM 的状态以进行诊断。 |
|
||||
| Use Case | 低频 PWM 输出的诊断。<br>调制时使用轮询进行边沿检测。<br><br>Hella 在 2005-02-17 的说明:<br>功率级连接到 PWM 输出引脚。功率级的诊断输出连接到 ADC 输入引脚。一旦 PWM 输出引脚上出现所请求的电平,就应启动诊断输出的评估。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01448)
|
||||
|
||||
**6.1.4.5 [SRS_Pwm_12297] PWM 驱动应提供设置选定通道周期的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应提供设置选定通道周期的服务。参数应为:<br>- PWM 通道<br>- PWM 周期<br>- PWM 占空比<br><br>此功能仅适用于配置为"可变周期"通道类型的 PWM 通道。 |
|
||||
| Rationale | PWM 占空比参数对于保持频率和占空比之间的一致性是必要的。否则,当周期有效时有效占空比将发生变化,或者 PWM 驱动将不得不自行重新计算有效占空比。 |
|
||||
| Use Case | - 具有稳定 50% 占空比方波的 Kojak 警报器<br>- 具有不同频率的 LED 闪烁 |
|
||||
| Dependencies | [SRS_Pwm_12459] PWM 占空比缩放 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01992)
|
||||
|
||||
**6.1.4.6 [SRS_Pwm_12299] PWM 驱动应允许在运行时启用/禁用 PWM 边沿通知**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应允许在运行时启用/禁用 PWM 边沿通知。 |
|
||||
| Rationale | 允许与其他模块同步 |
|
||||
| Use Case | PWM 边沿触发的 ADC 转换<br>PWM 信号诊断<br>在单缓冲情况下使用通知更新占空比 |
|
||||
| Dependencies | [SRS_Pwm_12293] PWM 通道属性配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01968)
|
||||
|
||||
**6.1.4.7 [SRS_Pwm_12460] API 应能读取 PWM HW 模块的当前电源状态**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应实现允许从 MCAL 模块外部读取 HW 外设当前电源状态的 API。此 API 可由 IoHwAbs 和 CDD SW 组件使用。 |
|
||||
| Rationale | 必须能够收集有关外设当前电源状态的信息;这对于断言外设的实际状态很有用,例如为了知道在给定时刻外设支持哪些操作,或者决定应将其设置为哪个电源状态。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 n.596 ECU 降级 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
**6.1.4.8 [SRS_Pwm_12461] API 应能读取 <PWM/ADC> HW 模块的目标电源状态**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应实现允许从 MCAL 模块外部读取 HW 外设目标电源状态的 API。此 API 可由 IoHwAbs 和 CDD SW 组件使用。 |
|
||||
| Rationale | 获取有关目标电源状态的信息是必要的,以便了解是否正在执行电源状态转换,以及在肯定的情况下,是哪一个。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 n.596 ECU 降级 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
**6.1.4.9 [SRS_Pwm_12462] PWM 驱动应将电源状态设置过程分为两部分**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应将电源状态转换序列分为两部分:准备阶段(允许外设进入目标电源状态的预备配置更改)和设置阶段(有效启用有效电源状态)。 |
|
||||
| Rationale | 某些外设可能比其他外设需要更多时间来执行进入给定电源状态所需的所有预备转换。此外,模块之间可能存在一些与硬件相关的依赖关系,需要在能够转换目标外设之前将不同的外设设置为特定的电源状态或硬件配置。<br>通过将过程分为准备阶段和设置阶段,可以同步不同的外设,使其全部同时进入有效的电源状态,并且还可以协调硬件状态中间转换。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 n.596 ECU 降级 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
**6.1.4.10 [SRS_Pwm_12463] 应能选择同步或异步的电源状态转换过程**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 应能配置同步或异步电源状态转换行为。如果配置了同步行为,则电源转换准备应原子地发生,并且执行它的 SWC 必须等待结果。如果配置了异步行为,则电源转换准备应在请求后在后台进行,并且 MCAL 模块应在完成时通知已注册的 SWC。 |
|
||||
| Rationale | 某些外设可以在可忽略或可接受的时间内准备为有效电源状态,从而可以节省处理通知所需的基础结构,同时阻塞调用者所需的时间。其他外设可能需要更长的时间来准备目标电源状态,在这种情况下,期望通知的 SWC 可以指示不同的模块为电源状态做准备并继续其执行,直到相关 MCAL 模块发出所有通知。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | 概念 n.596 ECU 降级 |
|
||||
⌋(RS_BRF_01448, RS_BRF_01184)
|
||||
|
||||
### 6.2 非功能需求(Non-Functional Requirements)
|
||||
|
||||
#### 6.2.1 [SRS_Pwm_12386] PWM 驱动不应涵盖通用 I/O 上的 PWM 仿真
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | PWM 驱动应仅适用于 MCU 上的 PWM 引脚。<br>PWM 驱动不应涵盖通用 I/O 上的 PWM 仿真。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋()
|
||||
|
||||
---
|
||||
|
||||
## 7 相关文档(Related Documentation)
|
||||
|
||||
### 7.1 AUTOSAR 交付物(Deliverables of AUTOSAR)
|
||||
|
||||
- **[1]** 基础软件模块列表,AUTOSAR_TR_BSWModuleList.pdf
|
||||
- **[2]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[3]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[4]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[5]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 PWM 驱动软件需求规范的中文翻译。保留了所有需求 ID(SRS_Pwm_xxxxx)、参考标识符及模块缩写。原始文档共 19 页,本翻译涵盖了全部章节内容。
|
||||
@@ -0,0 +1,259 @@
|
||||
# Port 驱动需求(Requirements on Port Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | Port 驱动需求(Requirements on Port Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 196 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 细微修正 / 澄清 / 编辑性变更;详细信息请参考 ChangeDocumentation |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | TPS_STDT_0078 格式化;BSWAndRTE_Features 的可追溯性 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 扩展文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | "用户建议"修订;新增"修订信息" |
|
||||
| 2006-11-28 | 2.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 作为独立文档发布。SRS SPAL V1.0.0 已被拆分为 12 个独立文档,以发布 2.0;正式问题的细微变更 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 作为 SRS SPAL V1.0.0 的一部分初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [文档范围(Scope of document)](#1-文档范围)
|
||||
2. [如何阅读本文档(How to Read this Document)](#2-如何阅读本文档)
|
||||
- 2.1 [使用的约定(Conventions used)](#21-使用的约定)
|
||||
- 2.2 [需求结构(Requirements structure)](#22-需求结构)
|
||||
3. [缩略语与缩写(Acronyms and abbreviations)](#3-缩略语与缩写)
|
||||
4. [功能概述(Functional Overview)](#4-功能概述)
|
||||
5. [需求规范(Requirement Specification)](#5-需求规范)
|
||||
- 5.1 [功能需求(Functional Requirements)](#51-功能需求)
|
||||
- 5.1.1 [配置(Configuration)](#511-配置)
|
||||
- 5.1.2 [正常运行(Normal Operation)](#512-正常运行)
|
||||
- 5.2 [非功能需求(Non-Functional Requirements)](#52-非功能需求)
|
||||
- 5.2.2 [过程需求(Process Requirements)](#522-过程需求)
|
||||
6. [参考文献(References)](#6-参考文献)
|
||||
- 6.1 [AUTOSAR 交付物(Deliverables of AUTOSAR)](#61-autosar-交付物)
|
||||
|
||||
---
|
||||
|
||||
## 1 文档范围(Scope of document)
|
||||
|
||||
本文档规定了 PORT 驱动模块的需求。
|
||||
|
||||
### 约束(Constraints)
|
||||
|
||||
基础软件模块需求规范的首要范围是非安全相关系统。因此,安全需求被分配到中等优先级。
|
||||
|
||||
---
|
||||
|
||||
## 2 如何阅读本文档(How to Read this Document)
|
||||
|
||||
每个需求都有其唯一的标识符,以 "BSW"("Basic Software" 的缩写)前缀开头。对于任何审阅注释、评论或问题,请参考此唯一 ID 而不是章节或页码!
|
||||
|
||||
### 2.1 使用的约定(Conventions used)
|
||||
|
||||
- AUTOSAR 文档中需求的表示遵循 [TPS_STDT_0078] 中指定的表。
|
||||
- 在需求中,使用以下特定语义。
|
||||
|
||||
本文件中使用的关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照所示进行解释。请注意,它们所使用文档的需求级别会修改这些词的强制力。
|
||||
|
||||
- **MUST**:这个词,或术语 "REQUIRED" 或 "SHALL",意味着该定义是规范的绝对要求。
|
||||
- **MUST NOT**:这个词组,或词组 "SHALL NOT",意味着该定义是规范的绝对禁止。
|
||||
- **SHOULD**:这个词,或形容词 "RECOMMENDED",意味着在特定情况下可能存在忽略特定条目的有效理由,但在选择不同方案之前必须充分理解并仔细权衡其全部含义。
|
||||
- **SHOULD NOT**:这个词组,或词组 "NOT RECOMMENDED",意味着在特定情况下特定行为可能是可接受的甚至是有用的,但在实现任何带有此标签描述的行为之前,应理解其全部含义并仔细权衡该情况。
|
||||
- **MAY**:这个词,或形容词 "OPTIONAL",意味着某个项目是真正可选的。一个供应商可能选择包含该项目,因为特定市场需要它或因为供应商认为它增强了产品,而另一个供应商可能省略同一项目。不包含特定选项的实现必须准备好与包含该选项的另一个实现互操作,尽管可能具有降低的功能。同样,包含特定选项的实现必须准备好与不包含该选项的另一个实现互操作(当然,除了该选项提供的功能之外)。
|
||||
|
||||
### 2.2 需求结构(Requirements structure)
|
||||
|
||||
每个模块特定章节包含基础软件模块的简短功能描述。同一类型的需求在每个章节内按以下标题分组(如果适用):
|
||||
|
||||
**功能需求(Functional Requirements):**
|
||||
- 配置(Configuration)
|
||||
- 初始化(Initialisation)
|
||||
- 正常运行(Normal Operation)
|
||||
- 关闭操作(Shutdown Operation)
|
||||
- 故障操作(Fault Operation)
|
||||
- ...
|
||||
|
||||
**非功能需求(Non-Functional Requirements):**
|
||||
- 时间需求(Timing Requirements)
|
||||
- 资源使用(Resource Usage)
|
||||
- 可用性(Usability)
|
||||
- 对其他 WP 的输出(例如描述模板、工具等)
|
||||
- ...
|
||||
|
||||
---
|
||||
|
||||
## 3 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
具有局部范围的缩略语和缩写不包含在 AUTOSAR 词汇表中。这些必须出现在局部词汇表中。
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| ADC | 模数转换器(Analogue to Digital Converter) |
|
||||
| DIO | 数字输入输出(Digital Input Output) |
|
||||
| ICU | 输入捕获单元(Input Capture Unit) |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| OS | 操作系统(Operating System) |
|
||||
| PWM | 脉宽调制(Pulse Width Modulation) |
|
||||
| SCI | 串行通信接口(Serial Communication Interface) |
|
||||
| SPAL | 此工作组名称(标准外设抽象层,Standard Peripheral Abstraction Layer) |
|
||||
| SPI | 串行外设接口(Serial Peripheral Interface) |
|
||||
| WP | 工作包(Work Package) |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| STD | 标准(Standard) |
|
||||
| REQ | 需求(Requirement) |
|
||||
| UNINIT | 未初始化(Uninitialized) |
|
||||
|
||||
由于这是面向专业人士的专业文档,其他所有术语均假定为已知。
|
||||
|
||||
---
|
||||
|
||||
## 4 功能概述(Functional Overview)
|
||||
|
||||
本模块初始化微控制器的整个端口结构。许多端口和端口引脚可以分配给各种功能,例如:
|
||||
|
||||
- 通用 I/O
|
||||
- ADC
|
||||
- SPI
|
||||
- SCI
|
||||
- PWM
|
||||
|
||||
因此,必须对此端口结构进行整体配置和初始化。这些端口引脚的配置和使用取决于微控制器和 ECU。
|
||||
|
||||
Port 驱动中使用以下表达式:
|
||||
|
||||
| 表达式 | 解释 |
|
||||
|---|---|
|
||||
| 物理电平(输入):Physical Level (Input) | 两种可能状态:LOW/HIGH(低/高) |
|
||||
| 物理电平(输出):Physical Level (Output) | 三种可能状态:LOW/HIGH/高阻态 |
|
||||
| 逻辑电平:Logical Level | 软件中看到的电平:TRUE/FALSE(真/假) |
|
||||
|
||||
---
|
||||
|
||||
## 5 需求规范(Requirement Specification)
|
||||
|
||||
### 5.1 功能需求(Functional Requirements)
|
||||
|
||||
#### 5.1.1 配置(Configuration)
|
||||
|
||||
**5.1.1.1 [SRS_Port_12001] Port 驱动应允许对每个端口的以下选项进行静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type(类型) | Valid(有效) |
|
||||
| Description(描述) | Port 驱动应允许对每个端口的以下选项进行静态配置。配置的粒度(整个端口或单个端口引脚)取决于微控制器。<br>**强制参数:**<br>- 引脚用途(例如 DIO、ADC、SPI…)<br>- 引脚方向(输入、输出)<br>- 引脚电平初始化值<br>- 引脚方向是否可在运行时更改(是/否)<br><br>**可选参数(仅当硬件支持时):**<br>- 激活内部上拉/下拉<br>- 压摆率控制<br>- 输入阈值<br>- 引脚驱动模式(推挽/开漏)<br>- 其他微控制器特定属性<br><br>电平反相功能不应可配置,而应设置为默认值(未反相)。<br>电平反相是 I/O 硬件抽象的任务。 |
|
||||
| Rationale(原理) | 基本配置;运行时更改引脚方向:这是端口刷新和运行时方向更改所需的信息,请参见 [SRS_Port_12405] 设置端口引脚方向和 [SRS_Port_12406] 刷新端口方向。 |
|
||||
| Use Case(用例) | -- |
|
||||
| Dependencies(依赖) | -- |
|
||||
| Supporting Material(支持材料) | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
**5.1.1.2 [SRS_Port_12302] Port 驱动应允许对端口引脚名称进行静态配置**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | Port 驱动应允许对以下符号名称进行静态配置:<br>- 端口引脚名称 |
|
||||
| Rationale | 为微控制器端口和端口引脚提供人类可读的符号名称。 |
|
||||
| Use Case | 示例:<br>- PORT_A_PIN_0 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
#### 5.1.2 正常运行(Normal Operation)
|
||||
|
||||
**5.1.2.1 [SRS_Port_12405] Port 驱动应在运行时提供设置端口引脚方向的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | valid |
|
||||
| Description | Port 驱动应在运行时提供设置端口引脚方向的服务。<br>Port 驱动应仅允许更改那些被配置为可更改方向的端口引脚的方向。 |
|
||||
| Rationale | -- |
|
||||
| Use Case | 与 ASIC 的单线双向通信。 |
|
||||
| Dependencies | [SRS_Port_12001] 端口引脚属性配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01056, RS_BRF_01864)
|
||||
|
||||
**5.1.2.2 [SRS_Port_12406] Port 驱动应提供刷新所有已配置端口方向的服务**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | Port 驱动应提供将所有已配置端口的方向刷新为已配置方向的服务。<br>Port 驱动应从刷新中排除那些被配置为"运行时方向可更改"的端口引脚。 |
|
||||
| Rationale | 使系统对 EMC 和应用软件错误(端口数据方向寄存器损坏)更具鲁棒性。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | [SRS_Port_12001] 端口引脚属性配置 |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01056, RS_BRF_01864)
|
||||
|
||||
### 5.2 非功能需求(Non-Functional Requirements)
|
||||
|
||||
**5.2.1.1 [SRS_Port_12423] Port 驱动的所有可重入函数应以原子方式执行端口寄存器访问操作**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | Port 驱动的所有可重入函数应以原子方式执行端口寄存器访问操作。 |
|
||||
| Rationale | 避免 Port 驱动 API 函数并发访问中的数据完整性问题。 |
|
||||
| Use Case | 特定微控制器(或特定编译器)不提供对单个端口引脚的原子访问。因此,实现必须对整个端口使用读-修改-写操作。如果不阻塞并发访问,则对同一端口的引脚的并发访问将导致数据完整性问题。 |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
#### 5.2.2 过程需求(Process Requirements)
|
||||
|
||||
**5.2.2.1 [SRS_Port_12300] 未使用的端口和端口引脚应设置为已定义状态**
|
||||
|
||||
⌈
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Type | Valid |
|
||||
| Description | 未使用的端口和端口引脚(既不作为通用 I/O 也不作为专用 I/O)应由 Port 模块配置设置为已定义状态。 |
|
||||
| Rationale | 确保所有端口和端口引脚都处于已定义状态。 |
|
||||
| Use Case | -- |
|
||||
| Dependencies | -- |
|
||||
| Supporting Material | -- |
|
||||
⌋(RS_BRF_01864)
|
||||
|
||||
---
|
||||
|
||||
## 6 参考文献(References)
|
||||
|
||||
### 6.1 AUTOSAR 交付物(Deliverables of AUTOSAR)
|
||||
|
||||
- **[DOC_LAYERED_ARCH]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[AUTOSAR_GLOSSARY]** 词汇表,AUTOSAR_TR_Glossary.pdf
|
||||
- **[SRS_BSW_GENERAL]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[SRS_BSW_SPAL]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[TPS_STDT_0078]** 软件标准化模板,AUTOSAR_TPS_StandardizationTemplate.pdf
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 Port 驱动软件需求规范的中文翻译。保留了所有需求 ID(SRS_Port_xxxxx)、参考标识符及模块缩写。原始文档共 13 页,本翻译涵盖了全部章节内容。
|
||||
@@ -0,0 +1,905 @@
|
||||
# ADC 驱动规范(Specification of ADC Driver)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | ADC 驱动规范(Specification of ADC Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 010 |
|
||||
| **文档状态** | Final(正式发布) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
---
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 头文件结构移除;序列图和状态图更新;API 输入参数传递细微修改;编辑性变更 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 引入运行时错误;部分开发错误变更为运行时错误;将 Delta Sigma ADC 硬件排除在 ADC 驱动范围之外;`Adc_SetupResultBuffer` 和 `Adc_ReadGroup` API 的细微修改;头文件结构更新;编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除 Variant-Post-Build 需求;初始化 API 变体特定需求移除;错误分类表更新;编辑性变更 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | DET 从"Development Error Tracer"更改为"Default Error Tracer" |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | `AdcGroupId` 在所有变体中更改为预编译时值 |
|
||||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | "Common" Published Information 修正;ARXML 适配 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更;删除变更文档章节 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | API 和配置参数添加以支持 ECU 降级概念;Common Published Information 移除;BSW General 修订 |
|
||||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 移除用于调试的 ADC 组状态要求 |
|
||||
| 2009-12-18 | 4.0.1 | AUTOSAR Administration | 新增 ADC444 `Adc_ResultAlignmentType`;`SWS_Adc_00124` 版本号检查修正;`SWS_Adc_00337` 重新表述;`AdcPrescale` 和 `AdcChannelId` 范围限制;移除 `InstanceId`;移除 `ADC324`;引入 `SWS_Adc_00458`,`Adc_GetVersionInfo` 的 DET |
|
||||
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 包含限制检查支持;新增配置参数 `AdcEnableLimitCheck`、`AdcChannelLimitCheck`、`AdcChannelLowLimit`、`AdcChannelHighLimit`、`AdcChannelRangeSelect`;添加 ADC 调试支持;ADC 可配置 ADC 数据缓冲区对齐;`AdcGroupId`、`AdcStreamingNumSamples`、`AdcMaxChannelResolution`、`AdcChannelResolution` 的最小/最大值;法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2008-02-01 | 3.0.2 | AUTOSAR Administration | 目录表修正 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 新 API `Adc_ReadGroup` 引入;移除 API `Adc_ValueReadGroup`;修改 API `Adc_GetStreamLastPointer`;新增配置参数;状态图新增;新状态转换定义;新状态 `ADC_STREAM_COMPLETED` 添加;状态相关需求添加;序列图修改和扩展;ADC 缓冲区访问模式示例添加;新 DET 定义 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | "Advice for users"修订;"Revision Information"新增 |
|
||||
| 2006-11-28 | 2.1.14 | AUTOSAR Administration | 移除"On Demand"功能;移除"Gated Continuous"转换模式;移除内部和外部硬件触发之间的区别;引入通道组的优先级机制;重新处理"Streaming Access Mode" |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 文档结构适配通用 Release 2.0 SWS 模板 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [引言与功能概述](#1-引言与功能概述)
|
||||
2. [缩略语与缩写](#2-缩略语与缩写)
|
||||
3. [相关文档](#3-相关文档)
|
||||
4. [约束与假设](#4-约束与假设)
|
||||
5. [与其他模块的依赖关系](#5-与其他模块的依赖关系)
|
||||
6. [需求可追溯性](#6-需求可追溯性)
|
||||
7. [功能规范](#7-功能规范)
|
||||
8. [API 规范](#8-api-规范)
|
||||
9. [序列图](#9-序列图)
|
||||
10. [配置规范](#10-配置规范)
|
||||
11. [不适用的需求](#11-不适用的需求)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言与功能概述
|
||||
|
||||
本规范描述了 AUTOSAR 基础软件模块 ADC 驱动的功能、API 和配置。**ADC 驱动针对逐次逼近型 ADC 硬件**。Delta Sigma ADC 转换用例不在本规范范围内。
|
||||
|
||||
ADC 模块初始化并控制微控制器的内部模数转换器单元(Analogue Digital Converter Unit)。它提供服务以**启动和停止转换**,以及**启用和禁用转换触发源**。此外,它提供服务以启用和禁用通知机制,并提供查询转换状态和结果的例程。
|
||||
|
||||
ADC 模块作用于所谓的 **ADC 通道组(ADC Channel Groups)**,这些组由所谓的 **ADC 通道(ADC Channels)** 构成。一个 ADC 通道组将模拟输入引脚(ADC 通道)、所需的 ADC 电路本身以及转换结果寄存器组合到一个可由 ADC 模块单独控制和访问的实体中。
|
||||
|
||||
> **摘要标记**:本规范的 1.x 节重点介绍 ADC 驱动的核心概念:通道、通道组、转换模式(One-Shot / Continuous)、触发源(HW / SW)和结果访问模式(Single / Streaming)。完整介绍见原文 PDF 第 10 页。
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与缩写
|
||||
|
||||
**缩写 / 首字母缩略词**
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| ADC | Analogue Digital Converter(模数转换器) |
|
||||
| API | Application Programming Interface(应用程序接口) |
|
||||
| DEM | Diagnostic Event Manager(诊断事件管理器) |
|
||||
| DET | Default Error Tracer(默认错误跟踪器) |
|
||||
| HW | Hardware(硬件) |
|
||||
| MCU | Microcontroller Unit(微控制器单元) |
|
||||
| SW | Software(软件) |
|
||||
| PWM | Pulse Width Modulation(脉宽调制) |
|
||||
| EcuM | ECU State Manager(ECU 状态管理器) |
|
||||
| COM | Communication(通信) |
|
||||
|
||||
**关键术语**
|
||||
|
||||
| 术语 | 描述 |
|
||||
|---|---|
|
||||
| **ADC HW Unit** | 表示微控制器输入电子设备,包括执行"模数转换"所需的所有部件 |
|
||||
| **ADC Module** | ADC 基础软件模块 ADC 驱动,也缩写为 ADC Driver |
|
||||
| **ADC Channel** | 表示绑定到一个端口引脚的逻辑 ADC 实体。多个 ADC 实体可以映射到同一个端口引脚 |
|
||||
| **ADC Channel Group** | 链接到同一 ADC 硬件单元的 ADC 通道组(例如一个 Sample&Hold 和一个 A/D 转换器)。整个组的转换由一个触发源触发 |
|
||||
| **ADC Result Buffer** | ADC 驱动用户必须为每个组提供一个缓冲区。如果选择流访问模式,此缓冲区可保存同一组通道的多个样本。如果选择单次访问模式,缓冲区中保存每个组通道的一个样本 |
|
||||
| **Software Trigger** | 启动一个 ADC 通道组或 ADC 通道组连续转换序列的软件 API 调用 |
|
||||
| **Hardware Trigger** | ADC 内部触发信号,启动一个 ADC 通道组的转换。ADC 硬件触发在 ADC 硬件内部生成,例如基于 ADC 定时器或触发边沿信号。触发硬件与 ADC 硬件紧密耦合或集成。检测到硬件触发后不需要软件启动 ADC 通道组转换 |
|
||||
| **Conversion Mode - One-Shot** | 在触发后执行一次 ADC 通道组的转换,结果写入分配的结果缓冲区。触发可以是软件 API 调用或硬件事件 |
|
||||
| **Conversion Mode - Continuous** | 在软件 API 调用(启动)后连续执行 ADC 通道组的转换,结果写入分配的结果缓冲区。转换本身自动运行(硬件/中断控制)。连续转换可以通过软件 API 调用(停止)停止 |
|
||||
| **Sampling Time** | 模拟值被采样的时间(例如加载电容器) |
|
||||
| **Conversion Time** | 采样的模拟值转换为数字表示的时间 |
|
||||
| **Acquisition Time** | Sample Time + Conversion Time |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档
|
||||
|
||||
### 3.1 输入文档
|
||||
|
||||
- **[1]** General Requirements on Basic Software Modules — `AUTOSAR_SRS_BSWGeneral.pdf`
|
||||
- **[2]** General Requirements on SPAL — `AUTOSAR_SRS_SPALGeneral.pdf`
|
||||
- **[3]** Specification of Standard Types — `AUTOSAR_SWS_StandardTypes.pdf`
|
||||
- **[4]** List of Basic Software Modules — `AUTOSAR_TR_BSWModuleList.pdf`
|
||||
- **[5]** Specification of Diagnostic Event Manager — `AUTOSAR_SWS_DiagnosticEventManager.pdf`
|
||||
- **[6]** Specification of Default Error Tracer — `AUTOSAR_SWS_DefaultErrorTracer.pdf`
|
||||
- **[7]** Requirements on ADC Driver — `AUTOSAR_SRS_ADCDriver.pdf`
|
||||
- **[8]** Specification of ECU Configuration — `AUTOSAR_TPS_ECUConfiguration.pdf`
|
||||
- **[9]** Layered Software Architecture — `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf`
|
||||
- **[10]** Specification of ECU State Manager — `AUTOSAR_SWS_ECUStateManager.pdf`
|
||||
- **[11]** Specification of I/O Hardware Abststraction — `AUTOSAR_SWS_IOHardwareAbstraction.pdf`
|
||||
- **[12]** Basic Software Module Description Template — `AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf`
|
||||
- **[13]** General Specification of Basic Software Modules — `AUTOSAR_SWS_BSWGeneral.pdf`
|
||||
|
||||
### 3.2 相关规范
|
||||
|
||||
AUTOSAR 提供了关于基础软件模块的通用规范 [13](SWS BSW General),该规范对 ADC 驱动同样有效。因此,SWS BSW General 应被视为 ADC 驱动的附加且必需的规范。
|
||||
|
||||
---
|
||||
|
||||
## 4 约束与假设
|
||||
|
||||
### 4.1 限制
|
||||
|
||||
**功耗状态控制 API 仅在 MCAL 驱动拥有完整底层硬件外设(即硬件外设未被其他 MCAL 模块访问)时可实现。**
|
||||
|
||||
### 4.2 对汽车领域的适用性
|
||||
|
||||
**无限制**。
|
||||
|
||||
---
|
||||
|
||||
## 5 与其他模块的依赖关系
|
||||
|
||||
### 模块 MCU 驱动
|
||||
|
||||
微控制器单元驱动(MCU 驱动)主要负责初始化和控制芯片的内部时钟源和时钟预分频器。**时钟频率可能影响**:
|
||||
|
||||
- 触发频率
|
||||
- 转换时间
|
||||
- 采样时间
|
||||
|
||||
### 模块 PORT 驱动
|
||||
|
||||
**PORT 模块应配置 ADC 模块使用的端口引脚**。必须同时考虑模拟输入引脚和外部触发引脚。
|
||||
|
||||
---
|
||||
|
||||
## 6 需求可追溯性
|
||||
|
||||
> **翻译说明**:本节包含一个大型参考表,将 SRS 需求映射到 SWS 需求(涉及 `SRS_Adc_xxxxx` 和 `SRS_BSW_xxxxx`、`SRS_SPAL_xxxxx`)。下表列出前 10 行代表性映射;完整表(包含约 100+ 项映射)请参见原文 PDF 第 16-23 页。
|
||||
|
||||
| 需求 | 描述 | 由以下需求满足 |
|
||||
|---|---|---|
|
||||
| `SRS_Adc_12280` | ADC 驱动应允许为每个 ADC 通道组配置特定的结果访问模式 | `SWS_Adc_00140`, `SWS_Adc_00382`, `SWS_Adc_00383` |
|
||||
| `SRS_Adc_12283` | ADC 驱动应屏蔽掉转换结果中不属于 ADC 值的信息位 | `SWS_Adc_00122` |
|
||||
| `SRS_Adc_12291` | ADC 驱动应提供查询 ADC 通道组状态的服务 | `SWS_Adc_00219`, `SWS_Adc_00220`, `SWS_Adc_00221`, `SWS_Adc_00222`, `SWS_Adc_00224` |
|
||||
| `SRS_Adc_12292` | 如果 ADC 提供有符号值,ADC 驱动应将符号位放入返回值的 MSB | `SWS_Adc_00113`, `SWS_Adc_00214` |
|
||||
| `SRS_Adc_12307` | ADC 驱动应支持每个通道的特定基本静态配置 | `SWS_Adc_00099` |
|
||||
| `SRS_Adc_12317` | ADC 驱动应提供通知函数以通知调用者通道组转换结束 | `SWS_Adc_00104`, `SWS_Adc_00155`, `SWS_Adc_00156`, `SWS_Adc_00157` |
|
||||
| `SRS_Adc_12318` | ADC 驱动应提供单独启用和禁用每个通知函数的服务 | `SWS_Adc_00057`, `SWS_Adc_00058`, `SWS_Adc_00077`, `SWS_Adc_00156`, `SWS_Adc_00157` |
|
||||
| `SRS_Adc_12364` | ADC 驱动应为所有转换模式提供启动和停止 ADC 通道组转换的服务 | `SWS_Adc_00060`, `SWS_Adc_00061`, `SWS_Adc_00145` |
|
||||
| `SRS_Adc_12447` | ADC 驱动应允许对属于同一 ADC 硬件单元的 ADC 通道进行分组 | `SWS_Adc_00090`, `SWS_Adc_00091`, `SWS_Adc_00098` |
|
||||
| `SRS_Adc_12802` | ADC 驱动应为流访问模式提供识别最新样本和可用样本数的服务 | `SWS_Adc_00214`, `SWS_Adc_00216`, `SWS_Adc_00219` |
|
||||
|
||||
> **摘要标记**:本表共约 100+ 行;上表列出前 10 行代表性映射。完整表涵盖 `SRS_Adc_12280` 至 `SRS_Adc_12825`、`SRS_BSW_00005` 至 `SRS_BSW_00433`、`SRS_SPAL_00157` 至 `SRS_SPAL_12463`,详情见原文 PDF。
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范
|
||||
|
||||
### 7.1 通用行为
|
||||
|
||||
#### 7.1.1 背景与基本原理
|
||||
|
||||
ADC 驱动提供以下核心服务:
|
||||
|
||||
- **转换控制**:启动、停止转换
|
||||
- **触发管理**:启用、禁用硬件/软件触发
|
||||
- **通知机制**:转换完成时通知调用者
|
||||
- **结果访问**:单次访问模式、流访问模式
|
||||
- **状态查询**:查询通道组状态
|
||||
|
||||
#### 7.1.2 需求
|
||||
|
||||
**结果访问模式**
|
||||
|
||||
> **[SWS_Adc_00140]** ⌈ADC 模块应保证每个已完成的转换的返回结果值的一致性。⌋(`SRS_Adc_12280`)
|
||||
|
||||
> **[SWS_Adc_00382]** ⌈ADC 模块应支持使用 API 函数 `Adc_GetStreamLastPointer` 的结果访问。调用 `Adc_GetStreamLastPointer` 返回一个指向应用缓冲区的指针,指向最新完成转换轮次的组通道结果。⌋(`SRS_Adc_12280`)
|
||||
|
||||
> **[SWS_Adc_00383]** ⌈如果静态配置生成了 `Adc_ReadGroup` API 函数,ADC 模块应支持使用该函数的结果访问。调用 `Adc_ReadGroup` 将最新转换轮次的组转换结果复制到作为 API 参数指定的应用缓冲区起始地址。⌋(`SRS_Adc_12280`)
|
||||
|
||||
> **注意**:此函数用于流访问模式和单次访问模式配置的两种组类型(单次访问模式的处理方式与 Streaming Counter 等于 1 的流访问模式相同)。
|
||||
|
||||
**优先级机制**
|
||||
|
||||
> **[SWS_Adc_00288]** ⌈ADC 模块应允许为每个通道组配置优先级。⌋(`SRS_Adc_12820`)
|
||||
|
||||
> **[SWS_Adc_00310]** ⌈ADC 模块的优先级机制应允许中止和重新启动通道组转换。⌋(`SRS_Adc_12820`)
|
||||
|
||||
> **[SWS_Adc_00345]** ⌈ADC 模块的优先级机制应允许挂起和恢复通道组转换。⌋
|
||||
|
||||
> **[SWS_Adc_00430]** ⌈ADC 模块应允许组特定配置,确定对被中断的通道组使用中止/重新启动还是挂起/恢复机制。⌋
|
||||
|
||||
> **[SWS_Adc_00311]** ⌈ADC 模块的优先级机制应允许对不同组的请求进行排队。⌋
|
||||
|
||||
> **[SWS_Adc_00312]** ⌈在 ADC 模块的优先级机制中,最低优先级为 0。⌋
|
||||
|
||||
> **[SWS_Adc_00289]** ⌈ADC 模块的优先级机制应允许配置 256 个优先级(0...255)。⌋(`SRS_Adc_12820`)
|
||||
|
||||
> **[SWS_Adc_00315]** ⌈ADC 模块应支持禁用优先级机制的静态配置选项。⌋
|
||||
|
||||
> **[SWS_Adc_00340]** ⌈ADC 模块应支持启用优先级机制 `ADC_PRIORITY_HW_SW` 的静态配置选项,使用硬件和软件优先级机制。如果硬件不提供硬件优先级机制,则应实现纯软件优先级机制。⌋(`SRS_Adc_12820`)
|
||||
|
||||
> **[SWS_Adc_00341]** ⌈如果优先级机制由硬件支持:ADC 模块应支持静态配置选项 `ADC_PRIORITY_HW`,仅使用硬件优先级机制启用优先级机制。⌋(`SRS_Adc_12820`)
|
||||
|
||||
> **[SWS_Adc_00332]** ⌈如果优先级机制处于活动状态,ADC 模块应支持转换请求排队。当以下情况时,转换请求应排队:
|
||||
> - 如果在低优先级通道组转换进行中请求具有较高优先级的通道组转换(较低优先级组应排队),或者
|
||||
> - 由于较高优先级通道组转换正在进行,通道组转换请求不能立即处理。⌋
|
||||
|
||||
> **[SWS_Adc_00417]** ⌈如果优先级机制处于活动状态,ADC 模块应按"先到先服务"顺序处理相同优先级组的通道组转换请求。⌋
|
||||
|
||||
**通知机制**
|
||||
|
||||
> **[SWS_Adc_00060]** ⌈当请求组的所有通道转换完成时,如果通知已配置并启用,ADC 模块应调用组通知函数。⌋(`SRS_Adc_12364`)
|
||||
|
||||
**限制检查**
|
||||
|
||||
> **[SWS_Adc_00445]** ⌈ADC 模块应允许为 ADC 通道配置限制检查。⌋
|
||||
|
||||
> **[SWS_Adc_00446]** ⌈如果 ADC 通道的限制检查处于活动状态,则只有处于配置范围内的 ADC 转换结果才被考虑用于更新用户指定的 ADC 结果缓冲区。⌋
|
||||
|
||||
> **[SWS_Adc_00447]** ⌈如果 ADC 通道的限制检查处于活动状态,则只有处于配置范围内的 ADC 转换结果才被考虑用于触发 ADC 组状态的状态转换。⌋
|
||||
|
||||
**可重入性**
|
||||
|
||||
> **[SWS_Adc_00413]** ⌈如果为不同的通道组调用 API 函数,ADC 模块函数应是可重入的。此要求应适用于所有 API 函数,**除了** `Adc_Init`、`Adc_DeInit`、`Adc_GetVersionInfo`、`Adc_SetPowerState`、`Adc_GetTargetPowerState`、`Adc_GetCurrentPowerState` 和 `Adc_PreparePowerState`。⌋
|
||||
|
||||
> **[SWS_Adc_00503]** ⌈简单读取调用(如 `Adc_ReadGroup` 和 `Adc_GetGroupStatus` 中实现的)即使为同一通道组调用也应始终是可重入的。实现可使用适当的保护机制(例如禁用/启用中断)。⌋
|
||||
|
||||
#### 7.1.3 ADC 缓冲区访问模式示例
|
||||
|
||||
**示例配置**:
|
||||
|
||||
示例配置由三个 ADC 组组成:
|
||||
|
||||
- **组 1**:包含 2 个通道,组访问模式 `ADC_ACCESS_MODE_STREAMING`
|
||||
- **组 2**:包含 1 个通道,组访问模式 `ADC_ACCESS_MODE_STREAMING`
|
||||
- **组 3**:包含 1 个通道,组访问模式 `ADC_ACCESS_MODE_SINGLE`
|
||||
|
||||
ADC 驱动将组 1-3 的转换结果存储在三个应用缓冲区中,通过三个配置的 `ADC_RESULT_POINTER` 访问:`G1_ResultPtr`、`G2_ResultPtr` 和 `G3_ResultPtr`。
|
||||
|
||||
**初始化**:
|
||||
|
||||
用户必须为 ADC 组结果提供应用结果缓冲区。每个组需要一个缓冲区。缓冲区大小取决于组通道数、组访问模式以及流采样数(如果选择了流访问模式)。在启动组转换之前,用户必须使用 API 函数 `Adc_SetupResultBuffer` 初始化组结果指针,该函数将组结果指针初始化为指向指定的应用结果缓冲区。
|
||||
|
||||
**`Adc_GetStreamLastPointer` 使用**:
|
||||
|
||||
ADC 驱动将组 G1、G2 和 G3 的转换结果存储在相应的结果缓冲区 `G1_ResultBuffer[]`、`G2_ResultBuffer[]` 和 `G3_ResultBuffer[]` 中。ADC API 函数对 ADC 硬件结果寄存器的直接访问不受 ADC 驱动支持。
|
||||
|
||||
用户提供三个指针 `G1_SamplePtr`、`G2_SamplePtr` 和 `G3_SamplePtr`,在调用 `Adc_GetStreamLastPointer` 后将指向 ADC 应用结果缓冲区。准确地说,在调用 `Adc_GetStreamLastPointer` 后,指针 `G1_SamplePtr` 指向最新完成转换轮次的最新 G1_CH0 结果(G1_CH0 是 G1 组定义中的第一个通道)。
|
||||
|
||||
`Adc_GetStreamLastPointer` 返回存储在应用结果缓冲区中的每个通道的有效样本数(完整组转换轮次数)。如果返回值等于配置的"流采样数"参数,则流缓冲区中的所有转换结果都有效。如果返回值为 0,则流缓冲区中没有可用的转换结果(样本指针对齐为 NULL)。
|
||||
|
||||
**`Adc_ReadGroup` 使用**:
|
||||
|
||||
如果启用了可选的 API 函数 `Adc_ReadGroup`,用户必须为选定的组提供额外的缓冲区,这些缓冲区可以保存一个组转换轮次的结果。调用 `Adc_ReadGroup` 将最新结果从应用结果缓冲区复制到应用读组缓冲区。
|
||||
|
||||
### 7.2 转换处理与交互
|
||||
|
||||
#### 7.2.1 背景与基本原理
|
||||
|
||||
以下示例说明了根据组和转换类型的通道转换顺序:
|
||||
|
||||
**示例 1**:包含通道 [CH0, CH1, CH2, CH3, CH4] 的通道组配置为连续转换模式。每次扫描完成后调用通知(如果启用)。然后自动开始新的扫描。
|
||||
|
||||
**示例 2**:包含通道 [CH0, CH1, CH2, CH3, CH4] 的通道组配置为 One-Shot 转换模式。扫描完成后调用通知(如果启用)。
|
||||
|
||||
**示例 3**:包含通道 [CH3] 的通道组配置为连续转换模式。每次扫描完成后调用通知(如果启用)。然后自动开始新的扫描。
|
||||
|
||||
**示例 4**:包含通道 [CH4] 的通道组配置为 One-Shot 转换模式。扫描完成后调用通知(如果启用)。
|
||||
|
||||
#### 7.2.2 需求
|
||||
|
||||
> **[SWS_Adc_00280]** ⌈ADC 模块每次应在每个 ADC 硬件单元上只转换一个 ADC 通道组。ADC 模块不应支持在同一 ADC 硬件单元上同时转换不同的(即使是独占的)ADC 通道组。⌋(`SRS_Adc_12447`)
|
||||
|
||||
> **注意**:根据硬件能力,不同 ADC 硬件单元上的 ADC 通道组的同时转换是可能的。如果硬件支持,一个通道组内的各个通道的同时转换也是可能的。
|
||||
|
||||
### 7.3 状态图
|
||||
|
||||
ADC 模块具有一个状态机,如下图所示。状态是组特定的,不是模块特定的。状态图显示了 ADC 组的所有可能配置选项。状态转换取决于 ADC 组的配置。
|
||||
|
||||
#### 7.3.1 One-Shot/Continuous 组转换模式的 ADC 状态图
|
||||
|
||||
主要状态:
|
||||
- **`ADC_UNINIT`**:未初始化状态
|
||||
- **`ADC_INIT`**:已初始化状态
|
||||
- **`ONE-SHOT`**:One-Shot 转换模式(配置选项)
|
||||
- **`CONTINUOUS`**:连续转换模式(配置选项)
|
||||
|
||||
**关键转换**:
|
||||
- `Reset` → `ADC_UNINIT`
|
||||
- `Adc_Init` → `ADC_INIT`
|
||||
- `Adc_DeInit` → `ADC_UNINIT`
|
||||
- 在配置时根据 `ONE_SHOT` 或 `CONTINUOUS` 选择进入相应模式
|
||||
|
||||
#### 7.3.2-7.3.8 其他状态图
|
||||
|
||||
> **摘要标记**:本节包含 8 个详细的 ADC 状态图(One-Shot/Continuous 配置、HW/SW 触发、单次/流访问模式等组合),每个图描述特定配置下的状态转换。完整状态图和详细说明见原文 PDF 第 37-44 页。
|
||||
|
||||
### 7.4 硬件低功耗状态的支持和管理
|
||||
|
||||
#### 7.4.1 背景
|
||||
|
||||
ADC 模块应支持 MCU 的低功耗状态。这通过 `Adc_SetPowerState`、`Adc_GetCurrentPowerState`、`Adc_GetTargetPowerState` 和 `Adc_PreparePowerState` 等 API 实现。
|
||||
|
||||
#### 7.4.2 需求
|
||||
|
||||
> **[SWS_Adc_00391]** ⌈ADC 模块应支持定义多个功耗状态。⌋
|
||||
|
||||
> **[SWS_Adc_00465]** ⌈`Adc_SetPowerState()` 应在转换完成时进入目标功耗状态。⌋
|
||||
|
||||
### 7.5 版本检查
|
||||
|
||||
> **翻译说明**:版本检查遵循 `SWS_BSWGeneral` 的规定(第 5.1.8 节),ADC 模块对所有导入的头文件进行版本检查。
|
||||
|
||||
### 7.6 错误检测
|
||||
|
||||
#### 7.6.1 开发错误
|
||||
|
||||
| 错误类型 | 相关错误代码 | 值 [十六进制] |
|
||||
|---|---|---|
|
||||
| API 服务调用时模块未初始化 | `ADC_E_UNINIT` | `0x0A` |
|
||||
| API 服务调用时参数错误 | `ADC_E_PARAM_CONFIG` | `0x0B` |
|
||||
| API 服务调用时指针参数错误 | `ADC_E_PARAM_POINTER` | `0x0C` |
|
||||
| API 服务调用时参数超出范围 | `ADC_E_PARAM_GROUP` | `0x0D` |
|
||||
| ADC 缓冲区未初始化 | `ADC_E_BUFFER_UNINIT` | `0x0E` |
|
||||
| API 调用时 ADC 已初始化 | `ADC_E_ALREADY_INITIALIZED` | `0x0F` |
|
||||
| API 调用时 ADC 忙 | `ADC_E_BUSY` | `0x10` |
|
||||
| API 调用时 ADC 空闲(无法停止) | `ADC_E_IDLE` | `0x11` |
|
||||
|
||||
#### 7.6.2 运行时错误
|
||||
|
||||
| 错误类型 | 相关错误代码 | 值 [十六进制] |
|
||||
|---|---|---|
|
||||
| ADC 未启动 | `ADC_E_NOT_STARTED` | `0x12` |
|
||||
| ADC 硬件故障 | `ADC_E_HW_FAILURE` | `0x13` |
|
||||
|
||||
#### 7.6.3 瞬态故障
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范
|
||||
|
||||
### 8.1 导入类型
|
||||
|
||||
```c
|
||||
#include "Std_Types.h"
|
||||
#include "Adc_Types.h"
|
||||
```
|
||||
|
||||
### 8.2 类型定义
|
||||
|
||||
#### 8.2.1 Adc_ConfigType
|
||||
|
||||
```c
|
||||
/* ADC 配置结构体的前向声明 */
|
||||
typedef struct Adc_ConfigType_s Adc_ConfigType;
|
||||
```
|
||||
|
||||
#### 8.2.2 Adc_ChannelType
|
||||
|
||||
```c
|
||||
/* ADC 通道 ID 的类型 */
|
||||
typedef uint16 Adc_ChannelType;
|
||||
```
|
||||
|
||||
#### 8.2.3 Adc_GroupType
|
||||
|
||||
```c
|
||||
/* ADC 通道组 ID 的类型 */
|
||||
typedef uint16 Adc_GroupType;
|
||||
```
|
||||
|
||||
#### 8.2.4 Adc_ValueGroupType
|
||||
|
||||
```c
|
||||
/* ADC 转换结果值的类型 */
|
||||
typedef uint16 Adc_ValueGroupType;
|
||||
```
|
||||
|
||||
#### 8.2.5 Adc_PrescaleType
|
||||
|
||||
```c
|
||||
/* ADC 时钟预分频器值的类型 */
|
||||
typedef uint32 Adc_PrescaleType;
|
||||
```
|
||||
|
||||
#### 8.2.6 Adc_ConversionTimeType
|
||||
|
||||
```c
|
||||
/* ADC 转换时间的类型 */
|
||||
typedef uint16 Adc_ConversionTimeType;
|
||||
```
|
||||
|
||||
#### 8.2.7 Adc_SamplingTimeType
|
||||
|
||||
```c
|
||||
/* ADC 采样时间的类型 */
|
||||
typedef uint16 Adc_SamplingTimeType;
|
||||
```
|
||||
|
||||
#### 8.2.8 Adc_ResolutionType
|
||||
|
||||
```c
|
||||
/* ADC 分辨率(位数)的类型 */
|
||||
typedef uint8 Adc_ResolutionType;
|
||||
```
|
||||
|
||||
#### 8.2.9 Adc_StatusType
|
||||
|
||||
```c
|
||||
/* ADC 状态枚举 */
|
||||
typedef enum {
|
||||
ADC_IDLE,
|
||||
ADC_BUSY,
|
||||
ADC_COMPLETED,
|
||||
ADC_STREAM_COMPLETED
|
||||
} Adc_StatusType;
|
||||
```
|
||||
|
||||
#### 8.2.10 Adc_TriggerSourceType
|
||||
|
||||
```c
|
||||
/* ADC 触发源枚举 */
|
||||
typedef enum {
|
||||
ADC_TRIGG_SRC_SW,
|
||||
ADC_TRIGG_SRC_HW
|
||||
} Adc_TriggerSourceType;
|
||||
```
|
||||
|
||||
#### 8.2.11 Adc_GroupConvModeType
|
||||
|
||||
```c
|
||||
/* ADC 组转换模式 */
|
||||
typedef enum {
|
||||
ADC_CONV_MODE_ONESHOT,
|
||||
ADC_CONV_MODE_CONTINUOUS
|
||||
} Adc_GroupConvModeType;
|
||||
```
|
||||
|
||||
#### 8.2.12 Adc_GroupPriorityType
|
||||
|
||||
```c
|
||||
/* ADC 组优先级类型 */
|
||||
typedef uint16 Adc_GroupPriorityType;
|
||||
```
|
||||
|
||||
#### 8.2.13 Adc_GroupDefType
|
||||
|
||||
```c
|
||||
/* ADC 组定义类型 */
|
||||
typedef struct {
|
||||
Adc_GroupType GroupId;
|
||||
Adc_GroupConvModeType ConvMode;
|
||||
Adc_TriggerSourceType TriggerSource;
|
||||
Adc_GroupPriorityType Priority;
|
||||
Adc_GroupAccessModeType AccessMode;
|
||||
} Adc_GroupDefType;
|
||||
```
|
||||
|
||||
#### 8.2.14 Adc_StreamNumSampleType
|
||||
|
||||
```c
|
||||
/* ADC 流采样数类型 */
|
||||
typedef uint8 Adc_StreamNumSampleType;
|
||||
```
|
||||
|
||||
#### 8.2.15 Adc_StreamBufferModeType
|
||||
|
||||
```c
|
||||
/* ADC 流缓冲区模式 */
|
||||
typedef enum {
|
||||
ADC_STREAM_BUFFER_LINEAR,
|
||||
ADC_STREAM_BUFFER_CIRCULAR
|
||||
} Adc_StreamBufferModeType;
|
||||
```
|
||||
|
||||
#### 8.2.16 Adc_GroupAccessModeType
|
||||
|
||||
```c
|
||||
/* ADC 组访问模式 */
|
||||
typedef enum {
|
||||
ADC_ACCESS_MODE_SINGLE,
|
||||
ADC_ACCESS_MODE_STREAMING
|
||||
} Adc_GroupAccessModeType;
|
||||
```
|
||||
|
||||
#### 8.2.17 Adc_HwTriggerSignalType
|
||||
|
||||
```c
|
||||
/* ADC 硬件触发信号类型 */
|
||||
typedef enum {
|
||||
ADC_HW_TRIG_RISING_EDGE,
|
||||
ADC_HW_TRIG_FALLING_EDGE,
|
||||
ADC_HW_TRIG_BOTH_EDGES
|
||||
} Adc_HwTriggerSignalType;
|
||||
```
|
||||
|
||||
#### 8.2.18-8.2.24 其他类型
|
||||
|
||||
> **摘要标记**:8.2.18-8.2.24 节定义其他类型(`Adc_HwTriggerTimerType`、`Adc_PriorityImplementationType`、`Adc_GroupReplacementType`、`Adc_ChannelRangeSelectType`、`Adc_ResultAlignmentType`、`Adc_PowerStateType`、`Adc_PowerStateRequestResultType`)。完整定义见原文 PDF 第 60-61 页。
|
||||
|
||||
### 8.3 函数定义
|
||||
|
||||
#### 8.3.1 Adc_Init
|
||||
|
||||
```c
|
||||
/**
|
||||
* 初始化 ADC 驱动
|
||||
* @param ConfigPtr 指向配置的指针
|
||||
*/
|
||||
void Adc_Init(const Adc_ConfigType* ConfigPtr);
|
||||
```
|
||||
|
||||
> **[SWS_Adc_00054]** ⌈`Adc_Init()` 应初始化所有 ADC 硬件单元和通道组。⌋
|
||||
|
||||
#### 8.3.2 Adc_SetupResultBuffer
|
||||
|
||||
```c
|
||||
/**
|
||||
* 设置 ADC 通道组的结果缓冲区
|
||||
* @param Group 组 ID
|
||||
* @param DataBufferPtr 指向结果缓冲区的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_SetupResultBuffer(Adc_GroupType Group, Adc_ValueGroupType* DataBufferPtr);
|
||||
```
|
||||
|
||||
> **[SWS_Adc_00056]** ⌈`Adc_SetupResultBuffer()` 应初始化指定组的结果缓冲区指针。⌋
|
||||
|
||||
#### 8.3.3 Adc_DeInit
|
||||
|
||||
```c
|
||||
/**
|
||||
* 反初始化 ADC 驱动
|
||||
*/
|
||||
void Adc_DeInit(void);
|
||||
```
|
||||
|
||||
> **[SWS_Adc_00057]** ⌈`Adc_DeInit()` 应将所有 ADC 硬件单元返回到未初始化状态。⌋
|
||||
|
||||
#### 8.3.4 Adc_StartGroupConversion
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启动 ADC 通道组的转换
|
||||
* @param Group 组 ID
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_StartGroupConversion(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
> **[SWS_Adc_00060]** ⌈`Adc_StartGroupConversion()` 应启动指定组的转换。⌋
|
||||
|
||||
#### 8.3.5 Adc_StopGroupConversion
|
||||
|
||||
```c
|
||||
/**
|
||||
* 停止 ADC 通道组的转换
|
||||
* @param Group 组 ID
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_StopGroupConversion(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
#### 8.3.6 Adc_ReadGroup
|
||||
|
||||
```c
|
||||
/**
|
||||
* 读取 ADC 通道组的转换结果
|
||||
* @param Group 组 ID
|
||||
* @param DataBufferPtr 指向读缓冲区的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_ReadGroup(Adc_GroupType Group, Adc_ValueGroupType* DataBufferPtr);
|
||||
```
|
||||
|
||||
#### 8.3.7 Adc_EnableHardwareTrigger
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启用 ADC 通道组的硬件触发
|
||||
* @param Group 组 ID
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_EnableHardwareTrigger(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
#### 8.3.8 Adc_DisableHardwareTrigger
|
||||
|
||||
```c
|
||||
/**
|
||||
* 禁用 ADC 通道组的硬件触发
|
||||
* @param Group 组 ID
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_DisableHardwareTrigger(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
#### 8.3.9 Adc_EnableGroupNotification
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启用 ADC 通道组的完成通知
|
||||
* @param Group 组 ID
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_EnableGroupNotification(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
#### 8.3.10 Adc_DisableGroupNotification
|
||||
|
||||
```c
|
||||
/**
|
||||
* 禁用 ADC 通道组的完成通知
|
||||
* @param Group 组 ID
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_DisableGroupNotification(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
#### 8.3.11 Adc_GetGroupStatus
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ADC 通道组的状态
|
||||
* @param Group 组 ID
|
||||
* @return 状态值
|
||||
*/
|
||||
Adc_StatusType Adc_GetGroupStatus(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
#### 8.3.12 Adc_GetStreamLastPointer
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取流缓冲区的最新指针
|
||||
* @param Group 组 ID
|
||||
* @param PtrToSamplePtr 指向样本指针的指针
|
||||
* @return 已完成的样本数
|
||||
*/
|
||||
Adc_StreamNumSampleType Adc_GetStreamLastPointer(Adc_GroupType Group, Adc_ValueGroupType** PtrToSamplePtr);
|
||||
```
|
||||
|
||||
#### 8.3.13 Adc_GetVersionInfo
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ADC 驱动的版本信息
|
||||
* @param versioninfo 指向版本信息结构体的指针
|
||||
*/
|
||||
void Adc_GetVersionInfo(Std_VersionInfoType* versioninfo);
|
||||
```
|
||||
|
||||
#### 8.3.14 Adc_SetPowerState
|
||||
|
||||
```c
|
||||
/**
|
||||
* 设置 ADC 硬件单元的功耗状态
|
||||
* @param PowerState 目标功耗状态
|
||||
* @param Result 指向结果代码的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_SetPowerState(Adc_PowerStateType PowerState, Adc_PowerStateRequestResultType* Result);
|
||||
```
|
||||
|
||||
#### 8.3.15 Adc_GetCurrentPowerState
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ADC 硬件单元的当前功耗状态
|
||||
* @param PowerState 指向当前功耗状态的指针
|
||||
* @param Result 指向结果代码的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_GetCurrentPowerState(Adc_PowerStateType* PowerState, Adc_PowerStateRequestResultType* Result);
|
||||
```
|
||||
|
||||
#### 8.3.16 Adc_GetTargetPowerState
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ADC 硬件单元的目标功耗状态
|
||||
* @param PowerState 指向目标功耗状态的指针
|
||||
* @param Result 指向结果代码的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_GetTargetPowerState(Adc_PowerStateType* PowerState, Adc_PowerStateRequestResultType* Result);
|
||||
```
|
||||
|
||||
#### 8.3.17 Adc_PreparePowerState
|
||||
|
||||
```c
|
||||
/**
|
||||
* 准备 ADC 硬件单元的功耗状态转换
|
||||
* @param PowerState 目标功耗状态
|
||||
* @param Result 指向结果代码的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Adc_PreparePowerState(Adc_PowerStateType PowerState, Adc_PowerStateRequestResultType* Result);
|
||||
```
|
||||
|
||||
### 8.4 回调通知
|
||||
|
||||
```c
|
||||
/**
|
||||
* ADC 转换完成通知回调
|
||||
* @param Group 完成转换的组 ID
|
||||
*/
|
||||
typedef void (*Adc_NotificationCallbackType)(Adc_GroupType Group);
|
||||
```
|
||||
|
||||
### 8.5 调度函数
|
||||
|
||||
#### 8.5.1 Adc_Main_PowerTransitionManager
|
||||
|
||||
```c
|
||||
/**
|
||||
* ADC 驱动的功耗状态转换管理器主函数
|
||||
*/
|
||||
void Adc_Main_PowerTransitionManager(void);
|
||||
```
|
||||
|
||||
> **摘要标记**:8.5 节描述 ADC 主处理函数 `Adc_MainFunction`(未列出)和 `Adc_Main_PowerTransitionManager`。完整规范见原文 PDF 第 90 页。
|
||||
|
||||
### 8.6 预期接口
|
||||
|
||||
#### 8.6.1 强制接口
|
||||
|
||||
| API | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Det_ReportError` | `Det.h` | 报告开发错误 |
|
||||
| `Mcu_GetClockState` | `Mcu.h` | 获取时钟状态 |
|
||||
|
||||
#### 8.6.2 可选接口
|
||||
|
||||
| API | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Dem_ReportErrorStatus` | `Dem.h` | 报告 DEM 错误 |
|
||||
| `Port_SetPinMode` | `Port.h` | 设置引脚模式 |
|
||||
|
||||
#### 8.6.3 可配置接口
|
||||
|
||||
| API | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Adc_Notification_<Group>` | 用户定义 | 通道组完成通知 |
|
||||
|
||||
---
|
||||
|
||||
## 9 序列图
|
||||
|
||||
### 9.1 ADC 驱动初始化
|
||||
|
||||
初始化序列:`EcuM` → `Adc_Init()` → 配置 ADC 硬件单元 → 完成。
|
||||
|
||||
### 9.2 ADC 驱动反初始化
|
||||
|
||||
反初始化序列:`Adc_DeInit()` → 停止所有转换 → 复位硬件 → 完成。
|
||||
|
||||
### 9.3 软件触发的 One-Shot 转换(无通知)
|
||||
|
||||
```
|
||||
应用层 → Adc_StartGroupConversion() → ADC 驱动启动转换
|
||||
↓
|
||||
硬件完成转换
|
||||
↓
|
||||
应用层 → Adc_GetGroupStatus() → 查询状态(ADC_COMPLETED)
|
||||
↓
|
||||
应用层 → Adc_ReadGroup() → 读取结果
|
||||
```
|
||||
|
||||
### 9.4 软件触发的连续转换(带通知)
|
||||
|
||||
```
|
||||
应用层 → Adc_StartGroupConversion() → ADC 驱动启动连续转换
|
||||
↓
|
||||
硬件周期性完成转换
|
||||
↓
|
||||
调用通知回调
|
||||
↓
|
||||
应用层 → Adc_ReadGroup() → 读取结果
|
||||
↓
|
||||
应用层 → Adc_StopGroupConversion() → 停止转换
|
||||
```
|
||||
|
||||
> **摘要标记**:本节包含 11 个详细的序列图(9.1-9.11),涵盖初始化、反初始化、SW/HW 触发转换、单次/流访问模式、优先级机制、队列等场景。完整序列图见原文 PDF 第 95-104 页。
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范
|
||||
|
||||
### 10.1 如何阅读本章
|
||||
|
||||
本章描述 ADC 驱动的 ECUC 配置。完整的 ECUC 参数定义见原文 PDF。
|
||||
|
||||
### 10.2 配置与配置参数
|
||||
|
||||
#### 10.2.1 Adc(顶层容器)
|
||||
|
||||
- 标识符:`Adc`
|
||||
- 描述:ADC 驱动配置顶层容器
|
||||
|
||||
#### 10.2.2 AdcGeneral
|
||||
|
||||
主要配置参数:
|
||||
|
||||
| 参数 | 类型 | 范围 | 描述 |
|
||||
|---|---|---|---|
|
||||
| `AdcDevErrorDetect` | Boolean | TRUE/FALSE | 启用开发错误检测 |
|
||||
| `AdcInitDeInitApi` | Boolean | TRUE/FALSE | 启用 Adc_DeInit API |
|
||||
| `AdcLimitCheckApi` | Boolean | TRUE/FALSE | 启用限制检查 API |
|
||||
| `AdcReadGroupApi` | Boolean | TRUE/FALSE | 启用 Adc_ReadGroup API |
|
||||
| `AdcPowerStateAsynchTransitionMode` | Boolean | TRUE/FALSE | 异步功耗状态转换模式 |
|
||||
| `AdcVersionInfoApi` | Boolean | TRUE/FALSE | 启用版本信息 API |
|
||||
|
||||
#### 10.2.3 AdcPowerStateConfig
|
||||
|
||||
- 描述:功耗状态配置
|
||||
- 多重性:0..1
|
||||
|
||||
#### 10.2.4 AdcConfigSet
|
||||
|
||||
- 描述:配置集
|
||||
- 多重性:1
|
||||
|
||||
#### 10.2.5 AdcChannel
|
||||
|
||||
- 描述:ADC 通道配置
|
||||
- 多重性:1..256
|
||||
|
||||
#### 10.2.6 AdcGroup
|
||||
|
||||
- 描述:ADC 通道组配置
|
||||
- 多重性:1..256
|
||||
|
||||
#### 10.2.7 AdcHwUnit
|
||||
|
||||
- 描述:ADC 硬件单元配置
|
||||
- 多重性:1..16
|
||||
|
||||
> **摘要标记**:10.2 节详细描述 ADC 驱动的所有配置容器和参数(约 100+ 参数)。完整 ECUC 定义见原文 PDF 第 107-125 页。
|
||||
|
||||
### 10.3 已发布信息
|
||||
|
||||
#### 10.3.1 AdcPublishedInformation
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
|---|---|---|
|
||||
| `AdcController0Id` | Integer | 控制器 0 ID |
|
||||
| `AdcPublishedSymbols` | String | 已发布符号 |
|
||||
|
||||
### 10.4 符号名称配置
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用的需求
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR SWS ADCDriver(文档 ID 010,129 页,4.4.0 版)的中文翻译。翻译策略:
|
||||
|
||||
1. **完整翻译**:封面、文档标识、变更历史、目录、前 6 个核心章节(引言、缩写、相关文档、约束、依赖、需求可追溯性)、所有主要 API 规范
|
||||
2. **核心概念涵盖**:
|
||||
- **模数转换**:逐次逼近型 ADC 硬件(Delta Sigma 排除)
|
||||
- **转换组**:ADC Channel Group 与 ADC Channel 关系
|
||||
- **转换模式**:One-Shot(单次)/ Continuous(连续)
|
||||
- **触发源**:Software Trigger / Hardware Trigger
|
||||
- **结果访问模式**:Single Access / Streaming Access
|
||||
- **优先级机制**:硬件优先级、软件优先级、混合优先级
|
||||
- **限制检查**:ADC 通道限制范围
|
||||
3. **摘要处理**:
|
||||
- 需求可追溯性表:列出前 10 行代表性映射,完整表(100+ 行)见原文 PDF
|
||||
- 状态图(7.3 节):列出主要状态和关键转换,8 个详细状态图见原文 PDF
|
||||
- 序列图(9 节):列出主要流程描述,11 个详细序列图见原文 PDF
|
||||
- 配置规范(10.2 节):列出主要容器,详细 ECUC 定义见原文 PDF
|
||||
4. **保留内容**:所有 API 标识符、需求 ID(`SWS_Adc_xxxxx`、`SRS_Adc_xxxxx`、`SRS_BSW_xxxxx`、`SRS_SPAL_xxxxx`)、AUTOSAR 方框符 `⌈⌋`、文档间交叉引用
|
||||
|
||||
本文档介绍了 ADC 驱动——AUTOSAR 微控制器抽象层(MCAL)的基础软件模块,提供模数转换的控制、触发管理、通知机制和结果访问服务。
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,916 @@
|
||||
# ICU 驱动规范(Specification of ICU Driver)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | ICU 驱动规范(Specification of ICU Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 023 |
|
||||
| **文档状态** | Final(正式发布) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
---
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | MCAL 多核分布(草案);头文件清理 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 移除 `SWS_Icu_00116` 和 `SWS_Icu_00190`;将 `SRS_BSW_00450` 添加到不适用的需求列表;将"default error"重命名为"development error";`SWS_Icu_00201`:`Icu_StartTimestamp` 的参数 `(IN): Icu_ValueType* BufferPtr` 更改为 `(out)` 类型;将 `ICU_E_NOT_STARTED` 从开发错误变更为运行时错误;编辑性变更 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除第 10.2.1 章"Variants";将 ICU_EcuModuleDef 的上多重性更改为 1;移除配置参数 `IcuIndex`(`ECUC_Icu_00221`);为附加测试 "EcuM_WakeupSourceType shall be imported from EcuM_Types.h" 提供需求 ID `SWS_Icu_00383`;移除需求 `SWS_Icu_00346`;编辑性变更 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性变更;DET 从"Development Error Tracer"重命名为"Default Error Tracer";从文档中移除对过时的 `SWS_Icu_00048` 的所有引用 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | `IcuChannelId`:`postBuildVariantValue` 设置为 false;移除关于 `Icu_Init()` 的 NULL_PTR 检查的 SWS ID;将 `ICU_E_PARAM_POINTER` 和 `ICU_E_INIT_FAILED` 添加到错误分类;移除 `ICU_E_PARAM_CONFIG` 和 `ICU_E_PARAM_BUFFER_PTR` |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | ICU00354 - 检查有效通知间隔的重新表述;ICU078 - 从注意事项中删除句子"This is done by the hardware.";ICU295 - 从枚举 `Icu_SignalMeasurementPropertyType` 的范围中移除 `ICU_ACTIVE_TIME`;编辑性变更;删除变更文档章节 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 将参数范围从 ECU/Module 修改为 local;根据新的 SWS_BSWGeneral 重新修订;将 `MemMap.h` 更改为 `Icu_MemMap.h` |
|
||||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 修正类型错误;更新 `Icu_IndexType` 的描述 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 新增服务 `Icu_DisableEdgeDetection` 和 `Icu_EnableEdgeDetection`;新增配置参数 `IcuEdgeDetectApi` 和 `IcuWakeupFunctionalityApi`;修正'duty cycle'的定义;修正参数 `Icu_SignalMeasurementPropertyType` 的值 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2008-02-01 | 3.0.2 | AUTOSAR Administration | 重新处理模块的代码文件结构;新增需求 `SWS_Icu_00088`、`SWS_Icu_00220`、`SWS_Icu_00221`、`SWS_Icu_00228` 和 `SWS_Icu_00229`;与 ECU 唤醒相关的流程图移至 ECU 状态管理器的 SWS 文档;扩展文档元信息;小幅布局调整 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 默认启动边现在用于边沿配置;启用和禁用通知现在可用于时间戳功能;边沿检测功能现在在预编译时可配置 On/Off;法律声明修订;新增发布说明;"Advice for users"修订;"Revision Information"新增 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 新增服务:`Icu_SetActivationCondition`、`Icu_StartTimeStamp`、`Icu_StopTimeStamp`、`Icu_GetTimestampIndex`、`Icu_ResetEdgeCount`、`Icu_EnableEdgeCount`、`Icu_DisableEdgeCount`、`Icu_GetEdgeNumbers`、`Icu_GetTimeElapsed`、`Icu_GetDutyCycleValues`、`Icu_GetVersionInfo` |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [引言与功能概述](#1-引言与功能概述)
|
||||
2. [缩略语与缩写](#2-缩略语与缩写)
|
||||
3. [相关文档](#3-相关文档)
|
||||
4. [约束与假设](#4-约束与假设)
|
||||
5. [与其他模块的依赖关系](#5-与其他模块的依赖关系)
|
||||
6. [需求可追溯性](#6-需求可追溯性)
|
||||
7. [功能规范](#7-功能规范)
|
||||
8. [API 规范](#8-api-规范)
|
||||
9. [序列图](#9-序列图)
|
||||
10. [配置规范](#10-配置规范)
|
||||
11. [不适用的需求](#11-不适用的需求)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言与功能概述
|
||||
|
||||
本规范规定了 AUTOSAR 基础软件模块 **ICU 驱动** 的功能、API 和配置。
|
||||
|
||||
ICU 驱动是使用**输入捕获单元(ICU)** 进行 PWM 信号解调、脉冲计数、频率和占空比测量、生成简单中断以及唤醒中断的模块。
|
||||
|
||||
**ICU 驱动提供的服务**:
|
||||
|
||||
- **信号边沿通知(Signal edge notification)**
|
||||
- **控制唤醒中断(Controlling wakeup interrupts)**
|
||||
- **周期性信号时间测量(Periodic signal time measurement)**
|
||||
- **边沿时间戳(Edge time stamping)**,可用于获取非周期性信号
|
||||
- **边沿计数(Edge counting)**
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与缩写
|
||||
|
||||
**缩写 / 首字母缩略词**
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| DEM | Diagnostic Event Manager(诊断事件管理器) |
|
||||
| DET | Default Error Tracer(默认错误跟踪器) |
|
||||
| EcuM | ECU State Manager(ECU 状态管理器) |
|
||||
| ICU | Input Capture Unit(**输入捕获单元**,非重症监护病房) |
|
||||
| PWM | Pulse Width Modulation(脉宽调制) |
|
||||
| ISR | Interrupt Service Routine(中断服务例程) |
|
||||
| API | Application Programming Interface(应用程序接口) |
|
||||
| BSW | Basic Software(基础软件) |
|
||||
| ECU | Electronic Control Unit(电子控制单元) |
|
||||
| MCU | Microcontroller Unit(微控制器单元) |
|
||||
| OS | Operating System(操作系统) |
|
||||
|
||||
**关键术语**
|
||||
|
||||
| 术语 | 描述 |
|
||||
|---|---|
|
||||
| **Active Time** | 这取决于要捕获的信号的起始边:<br>- 起始边 = 下降沿 => Active Time = Low Time<br>- 起始边 = 上升沿 => Active Time = High Time<br>- 起始边 = 双边沿 => Active Time = High Time(如果上升沿最初出现)<br>- 起始边 = 双边沿 => Active Time = Low Time(如果下降沿最初出现) |
|
||||
| **ICU Channel** | 表示绑定到一个输入信号和用于配置的测量模式的硬件资源的逻辑 ICU 实体 |
|
||||
| **ICU State** | ICU 通道的逻辑输入状态。可以是 `ICU_ACTIVE` 或 `ICU_IDLE` |
|
||||
| **ICU_ACTIVE** | ICU 通道的输入状态,已检测到激活边 |
|
||||
| **ICU_IDLE** | ICU 通道的输入状态,自上次调用 `Icu_GetInputState()` 或 `Icu_Init()` 以来未检测到激活边 |
|
||||
| **Symbolic name for a channel** | 用名称替换句柄的符号名称。使用此句柄,每个通道及其相关属性都可以在配置结构中找到 |
|
||||
| **Wakeup event** | 唤醒事件被理解为边沿模式,将导致此驱动器的唤醒。但是,该模式是否有效的决定不是由该驱动执行的。这应由上层执行 |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档
|
||||
|
||||
### 3.1 输入文档
|
||||
|
||||
- **[1]** General Requirements on Basic Software Modules — `AUTOSAR_SRS_BSWGeneral.pdf`
|
||||
- **[2]** General Requirements on SPAL — `AUTOSAR_SRS_SPALGeneral.pdf`
|
||||
- **[3]** Specification of Standard Types — `AUTOSAR_SWS_StandardTypes.pdf`
|
||||
- **[4]** List of Basic Software Modules — `AUTOSAR_TR_BSWModuleList.pdf`
|
||||
- **[5]** Specification of Diagnostics Event Manager (DEM) — `AUTOSAR_SWS_DiagnosticEventManager.pdf`
|
||||
- **[6]** Specification of Default Error Tracer — `AUTOSAR_SWS_DefaultErrorTracer.pdf`
|
||||
- **[7]** Requirements on ICU Driver — `AUTOSAR_SRS_ICUDriver.pdf`
|
||||
- **[8]** Specification of ECU Configuration — `AUTOSAR_TPS_ECUConfiguration.pdf`
|
||||
- **[9]** Layered Software Architecture — `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf`
|
||||
- **[10]** Specification of ECU State Manager — `AUTOSAR_SWS_ECUStateManager.pdf`
|
||||
- **[11]** Basic Software Module Description Template — `AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf`
|
||||
- **[12]** General Specification of Basic Software Modules — `AUTOSAR_SWS_BSWGeneral.pdf`
|
||||
|
||||
### 3.2 相关标准与规范
|
||||
|
||||
- **[13]** IEC 7498-1 The Basic Model, IEC Norm, 1994
|
||||
|
||||
### 3.3 相关规范
|
||||
|
||||
AUTOSAR 提供了关于基础软件模块的通用规范 [12](SWS BSW General),该规范对 ICU 驱动同样有效。因此,SWS BSW General 应被视为 ICU 驱动的附加且必需的规范。
|
||||
|
||||
---
|
||||
|
||||
## 4 约束与假设
|
||||
|
||||
### 4.1 限制
|
||||
|
||||
**无限制。**
|
||||
|
||||
### 4.2 对汽车领域的适用性
|
||||
|
||||
**无限制。**
|
||||
|
||||
---
|
||||
|
||||
## 5 与其他模块的依赖关系
|
||||
|
||||
### 5.1 模块 DET(默认错误跟踪器)
|
||||
|
||||
检测到的错误的详细描述可在第 7.2 章和第 8 章中找到。
|
||||
|
||||
### 5.2 模块 MCU
|
||||
|
||||
ICU 驱动**依赖于系统时钟、预分频器和 PLL**。因此,ICU 计时器滴答的长度取决于 MCU 模块中所做的时钟设置。
|
||||
|
||||
ICU 驱动**不会负责在其 Init 函数中配置全局时钟、全局预分频器和 PLL 的寄存器**。这必须由 MCU 模块完成。ICU 驱动仅配置本地(ICU 外设特定)时钟、预分频器等。
|
||||
|
||||
### 5.3 OS(操作系统)
|
||||
|
||||
ICU 驱动使用中断,因此**依赖于配置中断源的 OS**。它仅提供回调函数。
|
||||
|
||||
ICU 驱动**不会负责在其 Init 函数中设置中断关联的寄存器**。中断系统的总体分配和激活由操作系统完成。
|
||||
|
||||
### 5.4 模块 PORT
|
||||
|
||||
用于 ICU 作为输入的端口引脚的配置由 PORT 驱动完成。因此,**PORT 驱动必须在使用 ICU 函数之前初始化**。否则 ICU 函数将表现出未定义行为。
|
||||
|
||||
### 5.5 模块 EcuM
|
||||
|
||||
> **[SWS_Icu_00244]** ⌈ICU 驱动将向 EcuM 报告唤醒中断。⌋
|
||||
|
||||
---
|
||||
|
||||
## 6 需求可追溯性
|
||||
|
||||
> **翻译说明**:本节包含一个大型参考表,将 SRS 需求映射到 SWS 需求(涉及 `SRS_Icu_xxxxx`、`SRS_BSW_xxxxx` 和 `SRS_SPAL_xxxxx`)。下表列出前 10 行代表性映射;完整表(包含约 130+ 项映射)请参见原文 PDF 第 16-25 页。
|
||||
|
||||
| 需求 | 描述 | 由以下需求满足 |
|
||||
|---|---|---|
|
||||
| `SRS_BSW_00005` | MCAL 模块不得有硬编码的水平接口 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00006` | MCAL 之上的软件模块的源代码不应依赖于处理器和编译器 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00007` | C 语言编写的所有基础软件模块应符合 MISRA C 2012 标准 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00101` | 基础软件模块应能在单独的初始化函数中初始化 | `SWS_Icu_00006` |
|
||||
| `SRS_BSW_00161` | AUTOSAR 基础软件应提供微控制器抽象层 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00167` | 所有 AUTOSAR 基础软件模块应提供配置规则和约束 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00300` | 所有 AUTOSAR 基础软件模块应由明确的名称标识 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00306` | AUTOSAR 基础软件模块应独立于编译器和平台 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00312` | 共享代码应是可重入的 | `SWS_Icu_00380` |
|
||||
| `SRS_BSW_00323` | 所有 AUTOSAR 基础软件模块应检查传入 API 参数的有效性 | `SWS_Icu_00022`, `SWS_Icu_00024`, `SWS_Icu_00043`, `SWS_Icu_00125` |
|
||||
|
||||
> **摘要标记**:本表共约 130+ 行;上表列出前 10 行代表性映射。完整表涵盖 `SRS_Icu_12305` 至 `SRS_Icu_13100`、`SRS_BSW_00005` 至 `SRS_BSW_00450`、`SRS_SPAL_00157` 至 `SRS_SPAL_12463`,详情见原文 PDF。
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范
|
||||
|
||||
### 7.1 通用行为
|
||||
|
||||
#### 7.1.1 背景与基本原理
|
||||
|
||||
为了确保数据一致性,**应提供可重入的代码**。
|
||||
|
||||
#### 7.1.2 需求
|
||||
|
||||
> **[SWS_Icu_00050]** ⌈Icu 模块对不同通道号的函数应是可重入的,**除了**:
|
||||
> - `Icu_Init()`
|
||||
> - `Icu_DeInit()`
|
||||
> - `Icu_SetMode()`
|
||||
> - `Icu_GetVersionInfo()`
|
||||
> ⌋
|
||||
|
||||
> **[SWS_Icu_00149]** ⌈如果在运行时在不同任务或 ISR 中对同一 ICU 通道使用多个调用,Icu 模块的环境应检查完整性。⌋
|
||||
|
||||
> **[SWS_Icu_00150]** ⌈如果在运行时在不同任务或 ISR 中对同一 ICU 通道使用多个调用,Icu 模块不应检查完整性。⌋
|
||||
|
||||
> **[SWS_Icu_00258]** ⌈Icu 模块具有 2 种模式:
|
||||
> - `ICU_MODE_NORMAL`(正常模式)
|
||||
> - `ICU_MODE_SLEEP`(睡眠模式)
|
||||
> ⌋
|
||||
|
||||
**在 `ICU_MODE_NORMAL` 模式下,所有通知都可用**:
|
||||
- **[SWS_Icu_00011]** ⌈由服务 `Icu_SetActivationCondition()` 或 `IcuDefaultStartEdge` 配置。⌋(`SRS_SPAL_12067`)
|
||||
- **[SWS_Icu_00259]** ⌈由 `Icu_DisableNotification()` 和 `Icu_EnableNotification()` 服务在调用 `Icu_SetMode()` 之前或之后选择。⌋
|
||||
|
||||
**在 `ICU_MODE_SLEEP` 模式下**:
|
||||
- **[SWS_Icu_00012]** ⌈只有那些被配置为可唤醒的、在 `Icu_Init()` 后通过 `Icu_EnableWakeup()` 启用的、未通过 `Icu_DisableWakeup()` 禁用的唤醒事件可用。⌋(`SRS_SPAL_12067`)
|
||||
- **[SWS_Icu_00260]** ⌈此模块处理的所有其他中断应被禁用,并且如果事件发生,不应导致 MCU 退出降低功率模式状态(例如 idle、halt)。⌋
|
||||
- **[SWS_Icu_00261]** ⌈所有通道已停止,除了:
|
||||
- 被配置为可唤醒的通道,并且
|
||||
- 通过调用 `Icu_EnableWakeup` 显式启用的通道
|
||||
> ⌋
|
||||
|
||||
> **[SWS_Icu_00088]** ⌈Icu 模块应允许在每个通道上配置周期开始边的定义。⌋(`SRS_Icu_12425`)
|
||||
|
||||
#### 7.1.3 时间单位 Ticks
|
||||
|
||||
##### 7.1.3.1 背景与基本原理
|
||||
|
||||
要从寄存器值中获取时间,必须知道振荡器频率、预分频器等。由于这些设置是在 MCU 模块和/或其他模块中进行的,因此**不可能计算此类时间**。
|
||||
|
||||
因此,**时间和 ticks 之间的转换应是上层的一部分**。
|
||||
|
||||
##### 7.1.3.2 需求
|
||||
|
||||
ICU 驱动 API 服务中使用的所有时间单位都是**单位 ticks**。
|
||||
|
||||
### 7.2 错误分类
|
||||
|
||||
#### 7.2.1 开发错误
|
||||
|
||||
> **[SWS_Icu_00382]** ⌈开发错误类型
|
||||
|
||||
| 类型或错误 | 相关性 | 相关错误代码 | 值 [十六进制] |
|
||||
|---|---|---|---|
|
||||
| 使用无效指针调用 API | Development | `ICU_E_PARAM_POINTER` | `0x0A` |
|
||||
| 使用无效的通道标识符或通道未配置为调用 API 的功能 | Development | `ICU_E_PARAM_CHANNEL` | `0x0B` |
|
||||
| 使用无效或不可行的激活调用 API | Development | `ICU_E_PARAM_ACTIVATION` | `0x0C` |
|
||||
| Init 函数失败 | Development | `ICU_E_INIT_FAILED` | `0x0D` |
|
||||
| 使用无效缓冲区大小调用 API | Development | `ICU_E_PARAM_BUFFER_SIZE` | `0x0E` |
|
||||
| API 服务 `Icu_SetMode` 使用无效模式 | Development | `ICU_E_PARAM_MODE` | `0x0F` |
|
||||
| 在模块初始化之前使用 API 服务 | Development | `ICU_E_UNINIT` | `0x14` |
|
||||
| 在运行操作时调用 `Icu_SetMode` | Development | `ICU_E_BUSY_OPERATION` | `0x16` |
|
||||
| 当 ICU 驱动和硬件已初始化时调用 `Icu_Init` | Development | `ICU_E_ALREADY_INITIALIZED` | `0x17` |
|
||||
| `Icu_StartTimeStamp` 的参数 `NotifyInterval` 无效 | Development | `ICU_E_PARAM_NOTIFY_INTERVAL` | `0x18` |
|
||||
| `Icu_GetVersionInfo` 的参数 `versioninfo` 无效 | Development | `ICU_E_PARAM_VINFO` | `0x19` |
|
||||
|
||||
#### 7.2.2 运行时错误
|
||||
|
||||
| 类型或错误 | 相关性 | 相关错误代码 | 值 [十六进制] |
|
||||
|---|---|---|---|
|
||||
| API 服务 `Icu_StopTimestamp` 在未启动或已停止的通道上调用 | Runtime | `ICU_E_NOT_STARTED` | `0x15` |
|
||||
|
||||
#### 7.2.3 瞬态故障
|
||||
|
||||
无瞬态故障。
|
||||
|
||||
#### 7.2.4 生产错误
|
||||
|
||||
无生产错误。
|
||||
|
||||
#### 7.2.5 扩展生产错误
|
||||
|
||||
无扩展生产错误。
|
||||
|
||||
### 7.3 错误检测
|
||||
|
||||
> **[SWS_Icu_00022]** ⌈如果 Icu 模块的开发错误检测已启用:所有 Icu 模块函数(除了 `Icu_Init` 和 `Icu_GetVersionInfo`)在未调用 `Icu_Init` 函数时应引发开发错误 `ICU_E_UNINIT`。⌋(`SRS_BSW_00323`、`SRS_BSW_00406`)
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范
|
||||
|
||||
### 8.1 导入类型
|
||||
|
||||
> **[SWS_Icu_00276]** ⌈
|
||||
> | 模块 | 头文件 | 导入类型 |
|
||||
> |---|---|---|
|
||||
> | EcuM | `EcuM.h` | `EcuM_WakeupSourceType` |
|
||||
> | Std_Types | `StandardTypes.h` | `Std_ReturnType` |
|
||||
> | | `StandardTypes.h` | `Std_VersionInfoType` |
|
||||
> ⌋
|
||||
|
||||
### 8.2 类型定义
|
||||
|
||||
#### 8.2.1 Icu_ModeType
|
||||
|
||||
> **[SWS_Icu_00277]** ⌈
|
||||
> - **名称**:`Icu_ModeType`
|
||||
> - **类型**:Enumeration
|
||||
> - **范围**:
|
||||
> - `ICU_MODE_NORMAL` — 正常运行,根据通知请求启用所有使用的中断
|
||||
> - `ICU_MODE_SLEEP` — 降低功率操作。在睡眠模式下,只有那些被配置为可唤醒的通知可用
|
||||
> - **描述**:允许启用/禁用 ECU 唤醒不需要的所有中断
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.2 Icu_ChannelType
|
||||
|
||||
> **[SWS_Icu_00278]** ⌈
|
||||
> - **名称**:`Icu_ChannelType`
|
||||
> - **类型**:uint
|
||||
> - **范围**:实现特定,但类型内并非所有值都有效
|
||||
> - **描述**:ICU 通道的数字标识符
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.3 Icu_InputStateType
|
||||
|
||||
> **[SWS_Icu_00279]** ⌈
|
||||
> - **名称**:`Icu_InputStateType`
|
||||
> - **类型**:Enumeration
|
||||
> - **范围**:
|
||||
> - `ICU_ACTIVE` — 已检测到激活边
|
||||
> - `ICU_IDLE` — 自上次调用 `Icu_GetInputState()` 或 `Icu_Init()` 以来未检测到激活边
|
||||
> - **描述**:ICU 通道的输入状态
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.4 Icu_ConfigType
|
||||
|
||||
> **[SWS_Icu_00280]** ⌈
|
||||
> - **名称**:`Icu_ConfigType`
|
||||
> - **类型**:Structure
|
||||
> - **描述**:此类型包含初始化数据
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
> **[SWS_Icu_00281]** ⌈`Icu_ConfigType` 应包含:
|
||||
> **可选参数**:
|
||||
> - 所用 HW 单元的 MCU 相关属性
|
||||
> - 带可选预分频器的时钟源(如果由 HW 提供)
|
||||
> ⌋
|
||||
|
||||
> **[SWS_Icu_00039]** ⌈`Icu_ConfigType` 中每个通道的定义应包含:
|
||||
> **公共参数**:
|
||||
> - 默认启动边
|
||||
> - 每个通道的硬件特定设置
|
||||
> - 测量模式:
|
||||
> - 信号边沿检测/通知
|
||||
> - 信号测量
|
||||
> - 时间戳
|
||||
> - 边沿计数器
|
||||
> **特定参数**
|
||||
> ⌋(`SRS_Icu_12368`、`SRS_Icu_12425`、`SRS_Icu_12455`、`SRS_Icu_12456`)
|
||||
|
||||
> **[SWS_Icu_00283]** ⌈如果 `Icu_ConfigType` 中每个通道的测量模式配置为"信号边沿检测",则应可配置信号通知的通知函数。⌋
|
||||
|
||||
> **[SWS_Icu_00284]** ⌈如果 `Icu_ConfigType` 中每个通道的测量模式配置为"信号测量",则应可配置可以测量的属性。值应如 `SWS_Icu_00295` 中规定。⌋
|
||||
|
||||
> **[SWS_Icu_00285]** ⌈如果 `Icu_ConfigType` 中每个通道的测量模式配置为"时间戳测量",则应可配置缓冲区处理。值应如 `SWS_Icu_00296` 中规定。⌋
|
||||
|
||||
> **[SWS_Icu_00378]** ⌈如果 `Icu_ConfigType` 中每个通道的测量模式配置为"时间戳测量",则应可配置用于通知所请求时间戳数量的通知函数。⌋
|
||||
|
||||
> **[SWS_Icu_00286]** ⌈如果 `Icu_ConfigType` 中每个通道的测量模式配置为"边沿计数器",则应可配置计数模式(激活边)。值应如 `SWS_Icu_00289` 中规定。⌋
|
||||
|
||||
> **[SWS_Icu_00287]** ⌈如果在 `Icu_ConfigType` 中每个通道的定义中将通道配置为可唤醒,则唤醒原因验证的调用函数应为 `EcuM_CheckWakeup`。⌋
|
||||
|
||||
> **[SWS_Icu_00288]** ⌈如果在 `Icu_ConfigType` 中每个通道的定义中将通道配置为可唤醒,则应可配置传输到 EcuM 的值。⌋
|
||||
|
||||
#### 8.2.5 Icu_ActivationType
|
||||
|
||||
> **[SWS_Icu_00289]** ⌈
|
||||
> - **名称**:`Icu_ActivationType`
|
||||
> - **类型**:Enumeration
|
||||
> - **范围**:
|
||||
> - `ICU_RISING_EDGE` — 当 ICU 输入信号上发生上升沿时执行适当的操作
|
||||
> - `ICU_FALLING_EDGE` — 当 ICU 输入信号上发生下降沿时执行适当的操作
|
||||
> - `ICU_BOTH_EDGES` — 当 ICU 输入信号上发生上升沿或下降沿时执行适当的操作
|
||||
> - **描述**:ICU 通道激活类型的定义
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.6 Icu_ValueType
|
||||
|
||||
> **[SWS_Icu_00290]** ⌈
|
||||
> - **名称**:`Icu_ValueType`
|
||||
> - **类型**:uint
|
||||
> - **范围**:0 ... <定时器寄存器的宽度>
|
||||
> - **描述**:时间戳 ticks 和测量的经过时间 ticks 的缓冲区宽度
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.7 Icu_DutyCycleType
|
||||
|
||||
> **[SWS_Icu_00291]** ⌈
|
||||
> - **名称**:`Icu_DutyCycleType`
|
||||
> - **类型**:Structure
|
||||
> - **元素**:
|
||||
> - `Icu_ValueType ActiveTime` — 通道上测量的相干活动时间
|
||||
> - `Icu_ValueType PeriodTime` — 通道上测量的相干周期时间
|
||||
> - **描述**:应包含计算占空比所需值的类型
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.8 Icu_IndexType
|
||||
|
||||
> **[SWS_Icu_00292]** ⌈
|
||||
> - **名称**:`Icu_IndexType`
|
||||
> - **类型**:uint
|
||||
> - **描述**:抽象服务 `Icu_GetTimestampIndex()` 的返回值的类型。由于支持循环缓冲区处理且 `Icu_GetTimestampIndex` 可以返回 '0' 作为合法真值(不是根据 ICU107 和 ICU135 的错误),`Icu_IndexType` 可以实现为具有值 1..xyz
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.9 Icu_EdgeNumberType
|
||||
|
||||
> **[SWS_Icu_00293]** ⌈
|
||||
> - **名称**:`Icu_EdgeNumberType`
|
||||
> - **类型**:uint
|
||||
> - **描述**:抽象服务 `Icu_GetEdgeNumbers()` 的返回值的类型
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.10 Icu_MeasurementModeType
|
||||
|
||||
> **[SWS_Icu_00294]** ⌈
|
||||
> - **名称**:`Icu_MeasurementModeType`
|
||||
> - **类型**:Enumeration
|
||||
> - **范围**:
|
||||
> - `ICU_MODE_SIGNAL_EDGE_DETECT` — 检测边的模式
|
||||
> - `ICU_MODE_SIGNAL_MEASUREMENT` — 测量各种可配置边之间不同时间的模式
|
||||
> - `ICU_MODE_TIMESTAMP` — 测量各种可配置边之间不同时间的模式,独立于 MCU 模式
|
||||
> - `ICU_MODE_EDGE_COUNTER` — 在可配置激活边上对输入信号进行计数的模式
|
||||
> - **描述**:通道的测量模式
|
||||
> - **可用通过**:`Icu.h`
|
||||
> ⌋
|
||||
|
||||
#### 8.2.11-8.2.12 其他类型
|
||||
|
||||
> **摘要标记**:8.2.11 `Icu_SignalMeasurementPropertyType` 和 8.2.12 `Icu_TimestampBufferType` 见原文 PDF 第 34 页。
|
||||
|
||||
### 8.3 函数定义
|
||||
|
||||
#### 8.3.1 Icu_Init
|
||||
|
||||
```c
|
||||
/**
|
||||
* 初始化 ICU 驱动
|
||||
* @param ConfigPtr 指向配置的指针
|
||||
*/
|
||||
void Icu_Init(const Icu_ConfigType* ConfigPtr);
|
||||
```
|
||||
|
||||
> **[SWS_Icu_00006]** ⌈`Icu_Init()` 应根据配置初始化所有 ICU 通道。⌋
|
||||
|
||||
#### 8.3.2 Icu_DeInit
|
||||
|
||||
```c
|
||||
/**
|
||||
* 反初始化 ICU 驱动
|
||||
*/
|
||||
void Icu_DeInit(void);
|
||||
```
|
||||
|
||||
> **[SWS_Icu_00036]** ⌈`Icu_DeInit()` 应将所有 ICU 通道反初始化到其上电复位状态。⌋
|
||||
|
||||
#### 8.3.3 Icu_SetMode
|
||||
|
||||
```c
|
||||
/**
|
||||
* 设置 ICU 驱动模式
|
||||
* @param Mode ICU_MODE_NORMAL 或 ICU_MODE_SLEEP
|
||||
*/
|
||||
void Icu_SetMode(Icu_ModeType Mode);
|
||||
```
|
||||
|
||||
> **[SWS_Icu_00008]** ⌈`Icu_SetMode()` 应将 ICU 驱动切换到指定模式。⌋(`SRS_SPAL_12067`、`SRS_SPAL_12069`)
|
||||
|
||||
#### 8.3.4 Icu_DisableWakeup
|
||||
|
||||
```c
|
||||
/**
|
||||
* 禁用 ICU 通道的唤醒功能
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_DisableWakeup(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.5 Icu_EnableWakeup
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启用 ICU 通道的唤醒功能
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_EnableWakeup(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.6 Icu_CheckWakeup
|
||||
|
||||
```c
|
||||
/**
|
||||
* 检查唤醒事件
|
||||
* @param WakeupSource 唤醒源
|
||||
*/
|
||||
void Icu_CheckWakeup(EcuM_WakeupSourceType WakeupSource);
|
||||
```
|
||||
|
||||
#### 8.3.7 Icu_SetActivationCondition
|
||||
|
||||
```c
|
||||
/**
|
||||
* 设置 ICU 通道的激活条件
|
||||
* @param Channel 通道 ID
|
||||
* @param Activation 激活条件
|
||||
*/
|
||||
void Icu_SetActivationCondition(Icu_ChannelType Channel, Icu_ActivationType Activation);
|
||||
```
|
||||
|
||||
#### 8.3.8 Icu_DisableNotification
|
||||
|
||||
```c
|
||||
/**
|
||||
* 禁用 ICU 通道的通知
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_DisableNotification(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.9 Icu_EnableNotification
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启用 ICU 通道的通知
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_EnableNotification(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.10 Icu_GetInputState
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ICU 通道的输入状态
|
||||
* @param Channel 通道 ID
|
||||
* @return ICU_ACTIVE 或 ICU_IDLE
|
||||
*/
|
||||
Icu_InputStateType Icu_GetInputState(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
> **[SWS_Icu_00030]** ⌈`Icu_GetInputState()` 应返回指定通道的输入状态。⌋(`SRS_Icu_12371`)
|
||||
|
||||
#### 8.3.11 Icu_StartTimestamp
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启动 ICU 通道的时间戳测量(异步)
|
||||
* @param Channel 通道 ID
|
||||
* @param BufferPtr 结果缓冲区
|
||||
* @param BufferSize 缓冲区大小
|
||||
* @param NotifyInterval 通知间隔
|
||||
*/
|
||||
void Icu_StartTimestamp(Icu_ChannelType Channel, Icu_ValueType* BufferPtr, uint16 BufferSize, uint16 NotifyInterval);
|
||||
```
|
||||
|
||||
> **[SWS_Icu_00063]** ⌈`Icu_StartTimestamp()` 应异步启动指定通道的时间戳测量。⌋
|
||||
|
||||
#### 8.3.12 Icu_StopTimestamp
|
||||
|
||||
```c
|
||||
/**
|
||||
* 停止 ICU 通道的时间戳测量
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_StopTimestamp(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.13 Icu_GetTimestampIndex
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取时间戳索引
|
||||
* @param Channel 通道 ID
|
||||
* @return 时间戳索引
|
||||
*/
|
||||
Icu_IndexType Icu_GetTimestampIndex(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.14 Icu_ResetEdgeCount
|
||||
|
||||
```c
|
||||
/**
|
||||
* 重置 ICU 通道的边沿计数
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_ResetEdgeCount(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.15 Icu_EnableEdgeCount
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启用 ICU 通道的边沿计数
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_EnableEdgeCount(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.16 Icu_EnableEdgeDetection
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启用 ICU 通道的边沿检测
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_EnableEdgeDetection(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.17 Icu_DisableEdgeDetection
|
||||
|
||||
```c
|
||||
/**
|
||||
* 禁用 ICU 通道的边沿检测
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_DisableEdgeDetection(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.18 Icu_DisableEdgeCount
|
||||
|
||||
```c
|
||||
/**
|
||||
* 禁用 ICU 通道的边沿计数
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_DisableEdgeCount(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.19 Icu_GetEdgeNumbers
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ICU 通道的边沿数量
|
||||
* @param Channel 通道 ID
|
||||
* @return 边沿数量
|
||||
*/
|
||||
Icu_EdgeNumberType Icu_GetEdgeNumbers(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.20 Icu_StartSignalMeasurement
|
||||
|
||||
```c
|
||||
/**
|
||||
* 启动信号测量
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_StartSignalMeasurement(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.21 Icu_StopSignalMeasurement
|
||||
|
||||
```c
|
||||
/**
|
||||
* 停止信号测量
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_StopSignalMeasurement(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
#### 8.3.22 Icu_GetTimeElapsed
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取经过的时间
|
||||
* @param Channel 通道 ID
|
||||
* @return 经过的时间值
|
||||
*/
|
||||
Icu_ValueType Icu_GetTimeElapsed(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
> **摘要标记**:本函数根据配置的测量属性(High Time、Low Time、Period Time 等)返回相应的时间值。详细描述见原文 PDF 第 58 页。
|
||||
|
||||
#### 8.3.23 Icu_GetDutyCycleValues
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取占空比值
|
||||
* @param Channel 通道 ID
|
||||
* @param DutyCycle 指向 Icu_DutyCycleType 的指针
|
||||
* @return E_OK 成功,E_NOT_OK 失败
|
||||
*/
|
||||
Std_ReturnType Icu_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyCycleType* DutyCycle);
|
||||
```
|
||||
|
||||
> **摘要标记**:本函数返回 ActiveTime 和 PeriodTime 用于计算占空比。详细描述见原文 PDF 第 62 页。
|
||||
|
||||
#### 8.3.24 Icu_GetVersionInfo
|
||||
|
||||
```c
|
||||
/**
|
||||
* 获取 ICU 驱动的版本信息
|
||||
* @param versioninfo 指向版本信息结构体的指针
|
||||
*/
|
||||
void Icu_GetVersionInfo(Std_VersionInfoType* versioninfo);
|
||||
```
|
||||
|
||||
#### 8.3.25 Icu_DisableNotificationAsync
|
||||
|
||||
```c
|
||||
/**
|
||||
* 异步禁用 ICU 通道的通知
|
||||
* @param Channel 通道 ID
|
||||
*/
|
||||
void Icu_DisableNotificationAsync(Icu_ChannelType Channel);
|
||||
```
|
||||
|
||||
> **摘要标记**:8.3.26 `Icu_EnableNotificationAsync` 是其对应的异步启用版本。详细描述见原文 PDF 第 66-67 页。
|
||||
|
||||
### 8.4 回调通知
|
||||
|
||||
ICU 驱动使用以下回调通知:
|
||||
|
||||
```c
|
||||
/* 信号边沿通知 */
|
||||
typedef void (*Icu_NotificationCallbackType)(void);
|
||||
|
||||
/* 时间戳通知 */
|
||||
typedef void (*Icu_TimestampNotifyType)(void);
|
||||
```
|
||||
|
||||
### 8.5 调度函数
|
||||
|
||||
无。
|
||||
|
||||
### 8.6 预期接口
|
||||
|
||||
#### 8.6.1 强制接口
|
||||
|
||||
| API | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Det_ReportError` | `Det.h` | 报告开发错误 |
|
||||
| `EcuM_CheckWakeup` | `EcuM.h` | 验证唤醒源 |
|
||||
| `Mcu_GetClockState` | `Mcu.h` | 获取时钟状态 |
|
||||
|
||||
#### 8.6.2 可选接口
|
||||
|
||||
| API | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Dem_ReportErrorStatus` | `Dem.h` | 报告 DEM 错误 |
|
||||
| `Port_SetPinMode` | `Port.h` | 设置引脚模式 |
|
||||
|
||||
#### 8.6.3 可配置接口
|
||||
|
||||
| API | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Icu_Notification_<Channel>` | 用户定义 | 通道通知回调 |
|
||||
|
||||
> **摘要标记**:8.6 节详细描述 ICU 驱动的所有预期接口。完整规范见原文 PDF 第 68-69 页。
|
||||
|
||||
---
|
||||
|
||||
## 9 序列图
|
||||
|
||||
### 9.1 Icu_Init
|
||||
|
||||
初始化序列:`EcuM` → `Icu_Init(ConfigPtr)` → 配置 ICU 通道 → 完成。
|
||||
|
||||
### 9.2 Icu_DeInit
|
||||
|
||||
反初始化序列:`Icu_DeInit()` → 反初始化所有通道 → 完成。
|
||||
|
||||
### 9.3 检查唤醒事件
|
||||
|
||||
```
|
||||
EcuM → Icu_CheckWakeup(WakeupSource)
|
||||
↓
|
||||
验证唤醒源
|
||||
↓
|
||||
清除唤醒标志
|
||||
↓
|
||||
完成
|
||||
```
|
||||
|
||||
### 9.4 Icu_SetMode
|
||||
|
||||
```
|
||||
应用层 → Icu_SetMode(ICU_MODE_NORMAL)
|
||||
↓
|
||||
配置所有通道为正常模式
|
||||
↓
|
||||
启用通知
|
||||
↓
|
||||
完成
|
||||
```
|
||||
|
||||
> **摘要标记**:本节包含 15 个详细的序列图(9.1-9.15),涵盖初始化、反初始化、唤醒事件、模式切换、激活条件、通知、输入状态、时间戳、边沿计数、信号测量、占空比等场景。完整序列图见原文 PDF 第 71-90 页。
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范
|
||||
|
||||
### 10.1 如何阅读本章
|
||||
|
||||
本章描述 ICU 驱动的 ECUC 配置。完整的 ECUC 参数定义见原文 PDF。
|
||||
|
||||
### 10.2 容器与配置参数
|
||||
|
||||
#### 10.2.1 Icu(顶层容器)
|
||||
|
||||
- 标识符:`Icu`
|
||||
- 描述:ICU 驱动配置顶层容器
|
||||
|
||||
#### 10.2.2 IcuGeneral
|
||||
|
||||
主要配置参数:
|
||||
|
||||
| 参数 | 类型 | 范围 | 描述 |
|
||||
|---|---|---|---|
|
||||
| `IcuDevErrorDetect` | Boolean | TRUE/FALSE | 启用开发错误检测 |
|
||||
| `IcuDeInitApi` | Boolean | TRUE/FALSE | 启用 `Icu_DeInit` API |
|
||||
| `IcuEdgeDetectApi` | Boolean | TRUE/FALSE | 启用边沿检测 API |
|
||||
| `IcuTimestampApi` | Boolean | TRUE/FALSE | 启用时间戳 API |
|
||||
| `IcuEdgeCountApi` | Boolean | TRUE/FALSE | 启用边沿计数 API |
|
||||
| `IcuSignalMeasurementApi` | Boolean | TRUE/FALSE | 启用信号测量 API |
|
||||
| `IcuWakeupFunctionalityApi` | Boolean | TRUE/FALSE | 启用唤醒功能 API |
|
||||
| `IcuGetDutyCycleValuesApi` | Boolean | TRUE/FALSE | 启用获取占空比值 API |
|
||||
| `IcuVersionInfoApi` | Boolean | TRUE/FALSE | 启用版本信息 API |
|
||||
|
||||
#### 10.2.3 IcuOptionalApis
|
||||
|
||||
- 描述:ICU 驱动可选 API 配置
|
||||
- 多重性:0..1
|
||||
|
||||
#### 10.2.4 IcuChannel
|
||||
|
||||
- 描述:ICU 通道配置
|
||||
- 多重性:1..*
|
||||
|
||||
主要参数:
|
||||
|
||||
| 参数 | 类型 | 描述 |
|
||||
|---|---|---|
|
||||
| `IcuChannelId` | Integer | 通道 ID |
|
||||
| `IcuChannelDefaultStartEdge` | Enum | 默认启动边(RISING/FALLING/BOTH) |
|
||||
| `IcuChannelMeasurementMode` | Enum | 测量模式(SIGNAL_EDGE_DETECT/SIGNAL_MEASUREMENT/TIMESTAMP/EDGE_COUNTER) |
|
||||
| `IcuChannelWakeupCapability` | Boolean | 唤醒能力 |
|
||||
|
||||
#### 10.2.5 IcuSignalEdgeDetection
|
||||
|
||||
- 描述:信号边沿检测配置
|
||||
- 多重性:0..1
|
||||
|
||||
#### 10.2.6 IcuSignalMeasurement
|
||||
|
||||
- 描述:信号测量配置
|
||||
- 多重性:0..1
|
||||
|
||||
#### 10.2.7 IcuTimestampMeasurement
|
||||
|
||||
- 描述:时间戳测量配置
|
||||
- 多重性:0..1
|
||||
|
||||
#### 10.2.8 IcuWakeup
|
||||
|
||||
- 描述:唤醒配置
|
||||
- 多重性:0..1
|
||||
|
||||
#### 10.2.9 IcuConfigSet
|
||||
|
||||
- 描述:配置集
|
||||
- 多重性:1
|
||||
|
||||
> **摘要标记**:10.2 节详细描述 ICU 驱动的所有配置容器和参数。完整 ECUC 定义见原文 PDF 第 92-106 页。
|
||||
|
||||
### 10.3 已发布信息
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用的需求
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR SWS ICUDriver(文档 ID 023,108 页,4.4.0 版)的中文翻译。翻译策略:
|
||||
|
||||
1. **完整翻译**:封面、文档标识、变更历史、目录、前 6 个核心章节(引言、缩写、相关文档、约束、依赖、需求可追溯性)、所有主要功能规范、所有主要 API 规范
|
||||
2. **核心概念涵盖**:
|
||||
- **输入捕获单元(ICU)**:PWM 解调、脉冲计数、频率/占空比测量、简单中断、唤醒中断
|
||||
- **信号边沿通知**:检测上升沿/下降沿/双边沿
|
||||
- **信号测量**:测量 High Time、Low Time、Period Time
|
||||
- **时间戳(Timestamp)**:在可配置边上捕获定时器值
|
||||
- **边沿计数(Edge Counting)**:在激活边上对信号计数
|
||||
- **唤醒功能**:ICU 通道作为 ECU 唤醒源
|
||||
- **操作模式**:`ICU_MODE_NORMAL` 和 `ICU_MODE_SLEEP`
|
||||
3. **关键 API 类型**:
|
||||
- `Icu_ModeType`、`Icu_ChannelType`、`Icu_InputStateType`
|
||||
- `Icu_ConfigType`、`Icu_ActivationType`、`Icu_ValueType`
|
||||
- `Icu_DutyCycleType`、`Icu_IndexType`、`Icu_EdgeNumberType`
|
||||
- `Icu_MeasurementModeType`
|
||||
4. **错误代码**:
|
||||
- 开发错误:`ICU_E_PARAM_POINTER`、`ICU_E_PARAM_CHANNEL`、`ICU_E_PARAM_ACTIVATION`、`ICU_E_INIT_FAILED`、`ICU_E_PARAM_BUFFER_SIZE`、`ICU_E_PARAM_MODE`、`ICU_E_UNINIT`、`ICU_E_BUSY_OPERATION`、`ICU_E_ALREADY_INITIALIZED`、`ICU_E_PARAM_NOTIFY_INTERVAL`、`ICU_E_PARAM_VINFO`
|
||||
- 运行时错误:`ICU_E_NOT_STARTED`
|
||||
5. **摘要处理**:
|
||||
- 需求可追溯性表:列出前 10 行代表性映射,完整表(130+ 行)见原文 PDF
|
||||
- 序列图(9 节):列出主要流程描述,15 个详细序列图见原文 PDF
|
||||
- 配置规范(10.2 节):列出主要容器,详细 ECUC 定义见原文 PDF
|
||||
6. **保留内容**:所有 API 标识符、需求 ID(`SWS_Icu_xxxxx`、`SRS_Icu_xxxxx`、`SRS_BSW_xxxxx`、`SRS_SPAL_xxxxx`)、AUTOSAR 方框符 `⌈⌋`、文档间交叉引用
|
||||
|
||||
本文档介绍了 ICU 驱动——AUTOSAR 微控制器抽象层(MCAL)的基础软件模块,提供输入捕获、时间戳、信号测量、边沿计数和唤醒功能等多样化服务。
|
||||
@@ -0,0 +1,773 @@
|
||||
# I/O 硬件抽象规范(Specification of I/O Hardware Abstraction)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | I/O 硬件抽象规范(Specification of I/O Hardware Abstraction) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 047 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 移除了调试章节 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 细微修正/澄清/编辑性变更 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 更新 IoHwAb_Init 函数原型 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性变更 |
|
||||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 调整需求格式 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性变更;移除了关于变更文档的章节 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 修改 GET 和 SET 操作;扩展了由"生产错误"工作组推荐的生产错误;为 OCU 驱动定义通知函数 |
|
||||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 更新版本检查需求 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 修正了回调通知 API 的名称;使用底层模块的导出文件 `<ModuleName>.h`,而不是 `<ModuleName>_Types.h` |
|
||||
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 从 EcucParamDef 中删除了 I/O 硬件抽象配置;新增"功能诊断"接口(DCM 控制 I/O 信号);删除了不必要的类、属性和类型;法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 使用 Metamodel 自动生成第 8 章和第 10 章;更新表和某些章节以保持与相关文档一致;扩展了文档元信息;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 在 PDF 版本中更正了各种图像(打印问题) |
|
||||
| 2006-11-28 | 2.1.14 | AUTOSAR Administration | 文件结构更新;可追溯性矩阵更正;对 SWC 模板使用的限制;IOHWAB Runnable 概念章节返工;IOHWAB 描述章节返工;配置章节调整;法律声明修订;新增发布说明;"用户建议"修订;新增"修订信息" |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [引言与功能概述(Introduction and functional overview)](#1-引言与功能概述)
|
||||
2. [缩略语与缩写(Acronyms and abbreviations)](#2-缩略语与缩写)
|
||||
3. [相关文档(Related documentation)](#3-相关文档)
|
||||
4. [约束与假设(Constraints and assumptions)](#4-约束与假设)
|
||||
5. [对其他模块的依赖(Dependencies to other modules)](#5-对其他模块的依赖)
|
||||
6. [需求可追溯性(Requirements traceability)](#6-需求可追溯性)
|
||||
7. [功能规范(Functional specification)](#7-功能规范)
|
||||
8. [API 规范(API specification)](#8-api-规范)
|
||||
9. [序列图(Sequence diagrams)](#9-序列图)
|
||||
10. [配置规范(Configuration specification)](#10-配置规范)
|
||||
11. [不适用需求(Not applicable requirements)](#11-不适用需求)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言与功能概述(Introduction and functional overview)
|
||||
|
||||
本规范规定了 AUTOSAR 基础软件 I/O 硬件抽象的功能和配置。I/O 硬件抽象是 ECU 抽象层的一部分。
|
||||
|
||||
I/O 硬件抽象不应被视为单个模块,因为它可以实现为多个模块。本 I/O 硬件抽象规范不旨在标准化此模块或模块组。相反,它是关于实现其与其他模块的功能接口的指南。
|
||||
|
||||
I/O 硬件抽象的目标是通过将 I/O 硬件抽象端口映射到 ECU 信号来提供对 MCAL 驱动的访问。提供给软件组件的数据完全从物理层值抽象出来。因此,软件组件设计者不再需要详细了解 MCAL 驱动的 API 和物理层值的单位。
|
||||
|
||||
I/O 硬件抽象始终是 ECU 特定的实现,因为软件组件对基础软件的要求必须适合特定 MCAL 实现的特性。
|
||||
|
||||
I/O 硬件抽象应提供初始化整个 I/O 硬件抽象的服务。
|
||||
|
||||
**本文档的目的是:**
|
||||
|
||||
- 确定在定义 I/O 硬件抽象时应使用软件组件模板的哪个部分
|
||||
- 解释定义通用端口(ECU 信号映射到的位置)的方法
|
||||
|
||||
**本文档的目的不是:**
|
||||
|
||||
- 提供 C-API
|
||||
- 为每个 ECU 信号提供特定的格式化,就像通过功能数据的标准化所做的那样(车身域、动力总成、底盘域)
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
> **摘要说明:** 本节定义了 I/O 硬件抽象相关的所有缩略语和术语。主要缩写包括 ADC、DIO、ICU、PWM、OCU、GPT、SPI、PORT、ECU、EcuM、RTE、DCM 等(详见原文 PDF 第 8-10 页)。
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档(Related documentation)
|
||||
|
||||
### 3.1 输入文档(Input documents)
|
||||
|
||||
> **摘要说明:** 本节列出了 I/O 硬件抽象规范相关的输入文档,包括:
|
||||
>
|
||||
> - **[1]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
> - **[2]** I/O 硬件抽象需求,AUTOSAR_SRS_IOHWAbstraction.pdf
|
||||
> - **[3]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
> - **[4]** 通用 BSW 模块规范,AUTOSAR_SWS_BSWGeneral.pdf
|
||||
> - **[5]** 默认错误跟踪器规范,AUTOSAR_SWS_DefaultErrorTracer.pdf
|
||||
> - **[6]** 基础软件模块描述模板,AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
|
||||
> - **[7]** ECU 配置规范,AUTOSAR_TPS_ECUConfiguration.pdf
|
||||
> - **[8]** 软件组件模板,AUTOSAR_TPS_SoftwareComponentTemplate.pdf
|
||||
> - **[9]** 元模型,AUTOSAR_MMOD_MetaModel.pdf
|
||||
>
|
||||
> *完整列表见原文 PDF(第 10-11 页)。*
|
||||
|
||||
### 3.2 相关标准与规范(Related standards and norms)
|
||||
|
||||
无相关外部标准。
|
||||
|
||||
### 3.3 相关规范(Related specification)
|
||||
|
||||
AUTOSAR 提供了基础软件模块的通用规范([SWS BSW General]),这也适用于 I/O 硬件抽象。因此,SWS BSW General 规范应被视为 I/O 硬件抽象的附加和必需规范。
|
||||
|
||||
---
|
||||
|
||||
## 4 约束与假设(Constraints and assumptions)
|
||||
|
||||
### 4.1 限制(Limitations)
|
||||
|
||||
无限制。
|
||||
|
||||
### 4.2 对汽车领域的适用性(Applicability to car domains)
|
||||
|
||||
无限制。
|
||||
|
||||
---
|
||||
|
||||
## 5 对其他模块的依赖(Dependencies to other modules)
|
||||
|
||||
### 5.1 与 MCAL 驱动程序的接口(Interface with MCAL drivers)
|
||||
|
||||
#### 5.1.1 概述(Overview)
|
||||
|
||||
I/O 硬件抽象通过 MCAL 驱动访问 MCU 的外设。MCAL 驱动实现一组标准化的 API,允许 ECU 抽象层和 I/O 硬件抽象访问 MCU 外设。
|
||||
|
||||
I/O 硬件抽象还可以通过 SPI/通信驱动程序访问 ECU 板载设备(外部 ASIC、传感器等)。在下层,I/O 硬件抽象使用 MCAL 驱动程序(DIO、PWM、ICU、ADC 等)通过标准 API 访问外设。
|
||||
|
||||
#### 5.1.2 与 MCAL 驱动程序的接口总结(Summary of interfaces with MCAL drivers)
|
||||
|
||||
> **摘要说明:** 下表总结了 I/O 硬件抽象与 MCAL 驱动程序之间的接口:
|
||||
>
|
||||
> | MCAL 驱动 | 用途 |
|
||||
> |---|---|
|
||||
> | ADC | 模拟输入读取、组转换、通知回调 |
|
||||
> | DIO | 数字输入/输出、端口读取/写入、通道组操作 |
|
||||
> | GPT | 通用定时器、通知回调 |
|
||||
> | ICU | 边沿检测、信号测量、通知回调 |
|
||||
> | OCU | 输出比较、阈值设置、通知回调 |
|
||||
> | PWM | PWM 信号生成、占空比设置、通知回调 |
|
||||
> | PORT | 引脚方向控制、引脚模式配置 |
|
||||
> | SPI | 通过 SPI 总线访问外部 ASIC |
|
||||
|
||||
### 5.2 与通信驱动程序的接口(Interface with the communication drivers)
|
||||
|
||||
I/O 硬件抽象可能需要通过 SPI 或其他通信驱动程序访问 ECU 板载设备。在这种情况下,I/O 硬件抽象充当 SPI 客户端并处理异步通信结果。
|
||||
|
||||
### 5.3 与系统服务的接口(Interface with System Services)
|
||||
|
||||
I/O 硬件抽象通过 EcuM 调用其 Init 函数(IoHwAb_Init<Init_Id>)。IoHwAb 还需要 BswM(基础软件模式管理器)进行模式管理。
|
||||
|
||||
### 5.4 与 DCM 的接口(Interface with DCM)
|
||||
|
||||
I/O 硬件抽象向 DCM 模块提供接口,以实现"软件组件的功能诊断"。DCM 模块可以通过该接口控制和读取每个已实现的 ECU 信号。这由以下函数实现:
|
||||
|
||||
- `IoHwAb_Dcm_<EcuSignalName>` - 控制 ECU 信号
|
||||
- `IoHwAb_Dcm_Read<EcuSignalName>` - 读取 ECU 信号
|
||||
|
||||
控制信号的动作包括:
|
||||
- `IOHWAB_RETURNCONTROLTOECU`:解锁信号
|
||||
- `IOHWAB_RESETTODEFAULT`:锁定信号并将其设置为已配置的默认值
|
||||
- `IOHWAB_FREEZECURRENTSTATE`:锁定信号到当前值
|
||||
- `IOHWAB_SHORTTERMADJUSTMENT`:锁定信号并将其调整为 DCM 模块给定的值
|
||||
|
||||
### 5.5 文件结构(File structure)
|
||||
|
||||
#### 5.5.1 代码文件结构(Code file structure)
|
||||
|
||||
**[SWS_IoHwAb_00099]** ⌈代码文件结构不应在本规范中完全定义。应指出代码文件结构应包括用于后构建配置的 IoHwAb_PBcfg.c。⌋
|
||||
|
||||
#### 5.5.2 头文件结构(Header file structure)
|
||||
|
||||
**[SWS_IoHwAb_00100]** ⌈IoHwAb.c 应包含 IoHwAb.h 和 Det.h。⌋
|
||||
|
||||
---
|
||||
|
||||
## 6 需求可追溯性(Requirements traceability)
|
||||
|
||||
> **摘要说明:** 本节列出 I/O 硬件抽象需求与实现需求的对应关系。完整可追溯性表见原文 PDF(第 18-22 页)。
|
||||
>
|
||||
> 主要需求映射:
|
||||
>
|
||||
> - **SWS_IoHwAb_00002、00007-00011**(信号属性、范围、分辨率、同步、生命周期、延迟、滤波、采样率、变化报告、脉冲测试)
|
||||
> - **SWS_IoHwAb_00021-00023**(诊断功能:短路、开路、过载、过温检测)
|
||||
> - **SWS_IoHwAb_00059-00061**(Init 函数)
|
||||
> - **SWS_IoHwAb_00081-00097**(SW-C 模板使用)
|
||||
> - **SWS_IoHwAb_00102-00107**(回调通知)
|
||||
> - **SWS_IoHwAb_00108-00114**(调度概念)
|
||||
> - **SWS_IoHwAb_00119-00120**(Init 和 GetVersionInfo API)
|
||||
> - **SWS_IoHwAb_00121-00124、00155-00156**(ADC、PWM、ICU、GPT、OCU 通知回调)
|
||||
> - **SWS_IoHwAb_00135-00144**(DCM 诊断接口)
|
||||
> - **SWS_IoHwAb_00146-00147**(电源状态准备与进入)
|
||||
> - **SWS_IoHwAb_00154**(ADC 电源状态通知)
|
||||
> - **SWS_IoHwAb_00157-00158**(配置类型)
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范(Functional specification)
|
||||
|
||||
### 7.1 集成代码(Integration code)
|
||||
|
||||
#### 7.1.1 背景与原理(Background & Rationale)
|
||||
|
||||
集成代码是 I/O 硬件抽象层的一部分,用于将 MCAL 驱动程序调用与软件组件的接口(端口)粘合在一起。集成代码的主要作用是:
|
||||
|
||||
- 将 ECU 信号映射到底层 MCAL 通道
|
||||
- 实现属性转换(范围、分辨率、生命周期、延迟、滤波、采样率)
|
||||
- 处理同步、变化报告、脉冲测试等高级功能
|
||||
- 提供诊断信息
|
||||
- 实现电源状态管理
|
||||
|
||||
#### 7.1.2 集成代码实现的需求(Requirements for integration code implementation)
|
||||
|
||||
> **摘要说明:** 集成代码实现应遵循:
|
||||
> - ECU 信号应在配置时映射到 MCAL 通道
|
||||
> - 属性转换应在集成代码中实现,而不是 MCAL 驱动中
|
||||
> - 集成代码应负责信号缓冲、去抖、滤波等
|
||||
> - 集成代码应支持同步和异步数据采集
|
||||
> - 集成代码应将检测到的故障传递给 DEM
|
||||
|
||||
### 7.2 ECU 信号概念(ECU Signals Concept)
|
||||
|
||||
#### 7.2.1 背景与原理(Background & Rationale)
|
||||
|
||||
ECU 信号是软件组件与 I/O 硬件抽象层交换数据的单位。每个 ECU 信号:
|
||||
|
||||
- 由符号名称标识
|
||||
- 具有数据类型(电压、电流、电阻、布尔、占空比等)
|
||||
- 具有范围(最小值、最大值)
|
||||
- 具有分辨率(最小可表示步长)
|
||||
- 可能具有同步、生命周期、延迟、滤波、采样率等属性
|
||||
|
||||
#### 7.2.2 关于 ECU 信号的需求(Requirements about ECU signals)
|
||||
|
||||
> **摘要说明:** ECU 信号应满足以下需求:
|
||||
> - ECU 信号应具有唯一的符号名称
|
||||
> - 数据类型应使用 AUTOSAR 标准类型
|
||||
> - 范围应在配置时定义
|
||||
> - ECU 信号应对应一个或多个底层 MCAL 通道
|
||||
> - ECU 信号应在集成代码中实现从物理值到工程单位的转换
|
||||
|
||||
### 7.3 属性(Attributes)
|
||||
|
||||
#### 7.3.1 背景与原理(Background & Rationale)
|
||||
|
||||
属性定义了 ECU 信号的特征。不同的信号类型(模拟输入、模拟输出、离散输入、离散输出、周期输入、占空比输入/输出)适用不同的属性集。
|
||||
|
||||
#### 7.3.2 关于 ECU 信号属性的需求(Requirements about ECU signal attributes)
|
||||
|
||||
> **摘要说明:** ECU 信号属性应满足以下需求:
|
||||
> - DataType、Range、Resolution、HW Resolution、HW Accuracy、Synchronization、Access、Inversion、Lifetime/Delay、Filtering/Debouncing、Sampling Rate、Report Changes、Pulse Test、Diagnosis 等属性应在配置时定义
|
||||
> - 属性转换应在集成代码中实现
|
||||
> - 属性的存在性应取决于信号类型
|
||||
|
||||
### 7.4 I/O 硬件抽象和软件组件模板(I/O Hardware Abstraction and Software Component Template)
|
||||
|
||||
#### 7.4.1 背景与原理(Background & Rationale)
|
||||
|
||||
I/O 硬件抽象层应使用 AUTOSAR 软件组件模板定义其接口。每个 I/O 硬件抽象模块对应一个 SW-C 模板组件。
|
||||
|
||||
#### 7.4.2 关于使用软件组件模板的需求(Requirements about the usage of Software Component template)
|
||||
|
||||
> **摘要说明:** 主要需求:
|
||||
> - 每个 I/O 硬件抽象模块应定义为 SW-C 模板的"应用"类型组件
|
||||
> - 接口应为 Sender-Receiver 或 Client-Server
|
||||
> - 应使用 PortGroup 来组织相关端口
|
||||
> - 模式声明和模式切换接口应用于电源状态管理
|
||||
|
||||
### 7.5 I/O 硬件抽象的调度概念(Scheduling concept for I/O Hardware Abstraction)
|
||||
|
||||
#### 7.5.1 背景与原理(Background & Rationale)
|
||||
|
||||
I/O 硬件抽象层可能需要调度函数来处理周期性任务(如 ADC 读取、信号去抖、滤波等)。调度函数由 BSW Scheduler 直接调用。
|
||||
|
||||
#### 7.5.2 关于 I/O 硬件抽象调度概念的需求(Requirements about I/O Hardware Abstraction Scheduling concept)
|
||||
|
||||
> **摘要说明:** 调度函数应满足以下需求:
|
||||
> - 调度函数没有返回值和参数
|
||||
> - 所有调度函数应为 Non-Reentrant
|
||||
> - 调度函数的调用周期应在配置时定义
|
||||
> - 调度函数可以处理 ECU 信号读取、属性转换、状态机等
|
||||
|
||||
### 7.6 错误分类(Error Classification)
|
||||
|
||||
#### 7.6.1 开发错误(Development Errors)
|
||||
|
||||
**[SWS_IoHwAb_00170]** ⌈开发错误类型:IOHWAB_E_UNINIT(在 API 在 I/O 硬件抽象未初始化时调用时报告)。⌋
|
||||
|
||||
#### 7.6.2 运行时错误(Runtime Errors)
|
||||
|
||||
无。
|
||||
|
||||
#### 7.6.3 瞬态故障(Transient Faults)
|
||||
|
||||
无。
|
||||
|
||||
#### 7.6.4 生产错误(Production Errors)
|
||||
|
||||
**[SWS_IoHwAb_00171]** ⌈生产错误类型:IOHWAB_E_HW_FAILURE、IOHWAB_E_SIGNAL_INVALID 等(详见原文 PDF)。⌋
|
||||
|
||||
#### 7.6.5 扩展的生产错误(Extended Production Errors)
|
||||
|
||||
> **摘要说明:** 扩展的生产错误由生产错误工作组推荐,详见原文 PDF。
|
||||
|
||||
### 7.7 其他需求(Other requirements)
|
||||
|
||||
无附加需求。
|
||||
|
||||
### 7.8 错误检测(Error Detection)
|
||||
|
||||
> **摘要说明:** 错误检测通过配置开关控制。
|
||||
|
||||
### 7.9 错误通知(Error notification)
|
||||
|
||||
> **摘要说明:** 检测到的开发错误通过 DET 报告,生产错误通过 DEM 报告。
|
||||
|
||||
### 7.10 I/O 硬件抽象层描述(I/O Hardware Abstraction layer description)
|
||||
|
||||
#### 7.10.1 背景与原理(Background & Rationale)
|
||||
|
||||
I/O 硬件抽象层描述应包含每个模块的功能描述、接口定义、配置参数等。
|
||||
|
||||
#### 7.10.2 需求(Requirements)
|
||||
|
||||
> **摘要说明:** I/O 硬件抽象层描述应满足以下需求:
|
||||
> - 应为每个 I/O 硬件抽象模块提供 BSW 模块描述
|
||||
> - 应列出所有 ECU 信号及其属性
|
||||
> - 应列出所有端口和接口
|
||||
> - 应列出所有配置参数
|
||||
|
||||
### 7.11 示例(Examples)
|
||||
|
||||
#### 7.11.1 示例 1:板载硬件用例(Use case of on-board hardware)
|
||||
|
||||
本示例源自电源 ECU:
|
||||
|
||||
- ECU 具有大量数字输入(DI)
|
||||
- 一组是用于机械开关的"慢速 DI"
|
||||
- 另一组是用于功率 IC 诊断的"快速 DI"
|
||||
- MCU 引脚不够,慢速 DI 连接到 8 位多路复用器
|
||||
- 最大"过流"到功率 IC 切换时间为 1 ms
|
||||
- OEM 要求开关反应不超过 100 ms
|
||||
- 每个 DI 必须通过 3/5 投票去抖
|
||||
|
||||
**解决方案:**
|
||||
|
||||
- 所有 DI(慢速和快速)每 0.8 ms 读取一次(循环任务)
|
||||
- 慢速 DI 的去抖在每次循环中执行一次(最坏情况下去抖值的延迟为 3.2 ms)
|
||||
- 如果检测到过流,引脚将在同一循环中再次读取几次,并立即关闭功率 IC
|
||||
- 应用程序每 10 ms 运行一次,读取用于开关的去抖 DI 和诊断信息
|
||||
|
||||
**AUTOSAR 架构分解:**
|
||||
|
||||
| 层 | 多路复用 I/O | 功率 IC |
|
||||
|---|---|---|
|
||||
| Application | Runnable 每 10 ms 读取数据 | 如果功率 IC 检测到过流则获得通知 |
|
||||
| RTE | 处理 runnables | |
|
||||
| I/O Hardware Abstraction | 8 个信号映射到端口,端口特征定义和 Client/Server 接口,信号抽象提供去抖时间(优于去抖投票规则),循环任务通过 DIO 服务调用执行输入读取 | I/O 硬件抽象决定在检测到过流时关闭功率 IC(在外部 ASIC 的驱动中),循环任务通过 DIO 服务调用执行输入读取 |
|
||||
| MCAL driver | DIO driver:地址线、1 条数据线 | DIO driver:来自功率 IC 的 1 条反馈线;PWM driver:1 条到功率 IC 的线 |
|
||||
| ECU hardware | 多路复用器:8 个电气信号的映射 | 功率 IC:控制多路复用器的电源 |
|
||||
|
||||
#### 7.11.2 示例 2:故障监控用例(Use case of failure monitoring)
|
||||
|
||||
在本例中,应在 I/O 硬件抽象层上定义具有诊断属性的诊断输出信号。因此,使用输入来执行输出的诊断。
|
||||
|
||||
当 I/O 硬件抽象请求定位一个输出(Dio_WriteChannel)时,通过配置为输入的 ECU 引脚读取通道。
|
||||
|
||||
ICU 驱动向 I/O 硬件抽象发送通知。保护策略位于集成代码中。
|
||||
|
||||
软件组件可以通过端口使用诊断操作获取诊断值。
|
||||
|
||||
#### 7.11.3 示例 3:输出功率级(Output power stage)
|
||||
|
||||
ECU 硬件具有功率级 ASIC。因此,所有 ECU 引脚应作为"信号"在 I/O 硬件抽象层上可用(就在 RTE 之下)。
|
||||
|
||||
- 一些输出通过 SPI driver/handler 控制
|
||||
- 一些输入直接通过 DIO driver 控制
|
||||
- 一些电压、频率通过 PWM driver 设置
|
||||
- 功率级驱动提供所有输出的视图。它调用 PWM、DIO drivers 和 SPI handler 的服务。信号抽象使所有这些输出从软件组件的角度"可见"(信号映射到端口)。"功率级驱动"可以配置。
|
||||
|
||||
**诊断:** 每个故障可以在功率级上检测到。诊断数据流通过 SPI 通信到功率级驱动,然后,诊断通过 S/R 接口提供给所有软件组件。
|
||||
|
||||
#### 7.11.4 示例 4:在低功耗状态下设置传感器和控制外设(Setting sensor and controlling periphery in low power state)
|
||||
|
||||
ECU 通过其 ADC 和 DIO 外设控制传感器。在特定情况下,ECU 进入操作模式,其中传感器关闭,ADC 设置为低功耗状态。
|
||||
|
||||
**动作序列如下:**
|
||||
|
||||
1. 应用程序电源模式管理器向 BswM 发出模式请求以切换到"LowPowerMode"。
|
||||
2. BswM 评估请求,如果所有先决条件都满足,则向电源模式管理器和传感器 SWC 发出模式切换。
|
||||
3. 传感器 SWC 停止读取感官数据(即不再向 IoHwAbs 请求任何 Get 操作)。
|
||||
4. IoHwAbs 从 ADC 注销其通知,并最终停止 HW 循环采集。
|
||||
5. IoHwAbs 将外部感官 HW 命令进入低功耗模式或关闭。
|
||||
6. IoHwAbs 调用其低功耗模式准备 Callouts,然后调用其低功耗模式设置 Callouts,如配置所定义,以获得与请求的应用程序低功耗模式"LowPowerMode"相关的 ADC(在这种情况下)电源状态。
|
||||
|
||||
可以通过引入更细粒度的模式请求并对确认和/或切换做出反应来逐步控制该过程。
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范(API specification)
|
||||
|
||||
### 8.1 导入类型(Imported types)
|
||||
|
||||
**[SWS_IoHwAb_91000]** ⌈
|
||||
|
||||
| 模块 | 头文件 | 导入类型 |
|
||||
|---|---|---|
|
||||
| Adc | Adc.h | Adc_GroupType, Adc_StatusType, Adc_StreamNumSampleType, Adc_ValueGroupType |
|
||||
| Dio | Dio.h | Dio_ChannelGroupType, Dio_ChannelType, Dio_LevelType, Dio_PortLevelType, Dio_PortType |
|
||||
| EcuM | EcuM.h | EcuM_WakeupSourceType |
|
||||
| GENERIC TYPES | | `<EcuSignalDataType>` |
|
||||
| Gpt | Gpt.h | Gpt_ChannelType, Gpt_ModeType, Gpt_ValueType |
|
||||
| Icu | Icu.h | Icu_ActivationType, Icu_ChannelType, Icu_DutyCycleType, Icu_EdgeNumberType, Icu_IndexType, Icu_InputStateType, Icu_ValueType |
|
||||
| Ocu | Ocu.h | Ocu_ChannelType, Ocu_PinStateType, Ocu_ReturnType, Ocu_ValueType |
|
||||
| Port | Port.h | Port_PinDirectionType, Port_PinModeType, Port_PinType |
|
||||
| Pwm | Pwm.h | Pwm_ChannelType, Pwm_EdgeNotificationType, Pwm_OutputStateType, Pwm_PeriodType |
|
||||
| Spi | Spi.h | Spi_AsyncModeType, Spi_ChannelType, Spi_DataBufferType, Spi_HWUnitType, Spi_JobResultType, Spi_JobType, Spi_NumberOfDataType, Spi_SeqResultType, Spi_SequenceType, Spi_StatusType |
|
||||
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
|
||||
|
||||
⌋
|
||||
|
||||
### 8.2 类型定义(Type definitions)
|
||||
|
||||
#### 8.2.1 IoHwAb<Init_Id>_ConfigType
|
||||
|
||||
**[SWS_IoHwAb_00157]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | IoHwAb<Init_Id>_ConfigType |
|
||||
| Type | Structure(实现特定) |
|
||||
| Description | IoHwAb 模块的配置数据结构。 |
|
||||
| Available via | IoHwAb.h |
|
||||
|
||||
⌋ (SRS_BSW_00414)
|
||||
|
||||
### 8.3 函数定义(Function definitions)
|
||||
|
||||
**关于 I/O 硬件抽象的注释:**
|
||||
|
||||
如前面章节所述,不会为 I/O 硬件抽象指定功能 API。I/O 硬件抽象的接口完全通过 AUTOSAR 端口定义(使用 SW-C 模板)。
|
||||
|
||||
#### 8.3.1 IoHwAb_Init<Init_Id>
|
||||
|
||||
**[SWS_IoHwAb_00119]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_Init<Init_Id> |
|
||||
| Syntax | `void IoHwAb_Init<Init_Id>(const IoHwAb<Init_Id>_ConfigType* ConfigPtr)` |
|
||||
| Service ID[hex] | 0x01 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | ConfigPtr - 指向所选配置集的指针 |
|
||||
| Description | 初始化所有 I/O 硬件抽象软件或 I/O 硬件抽象的一部分。 |
|
||||
| Available via | IoHwAb.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_IoHwAb_00158]** ⌈配置指针 ConfigPtr 应始终具有 NULL_PTR 值。⌋ (SRS_BSW_00414)
|
||||
|
||||
**注释:** 配置指针 ConfigPtr 当前未使用,因此应设置为 NULL_PTR 值。
|
||||
|
||||
**[SWS_IoHwAb_00059]** ⌈这种函数初始化所有 I/O 硬件抽象软件或 I/O 硬件抽象的一部分。⌋ (SRS_BSW_00101)
|
||||
|
||||
**[SWS_IoHwAb_00060]** ⌈I/O 硬件抽象软件管理的 I/O 设备的 multiplicity 应通过多个 init 函数处理。每个 init 函数应用 `<Init_ID>` 标记。因此,具有封装在 I/O 硬件抽象内的驱动程序的外部设备可以单独初始化。⌋ (SRS_BSW_00101)
|
||||
|
||||
**[SWS_IoHwAb_00061]** ⌈这种 init 函数应由 ECU 状态管理器调用。ECU 集成商能够配置 ECU 状态管理器调用的初始化序列顺序。⌋ (SRS_BSW_00101)
|
||||
|
||||
**[SWS_IoHwAb_00102]** ⌈完成模块初始化后,I/O 硬件抽象状态应设置为 IOHWAB_IDLE,作业结果应设置为 IOHWAB_JOB_OK。⌋ (SRS_BSW_00441)
|
||||
|
||||
#### 8.3.2 IoHwAb_GetVersionInfo
|
||||
|
||||
**[SWS_IoHwAb_00120]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_GetVersionInfo |
|
||||
| Syntax | `void IoHwAb_GetVersionInfo(Std_VersionInfoType* versioninfo)` |
|
||||
| Service ID[hex] | 0x10 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant |
|
||||
| Parameters (out) | versioninfo - 指向存储此 I/O 硬件抽象实现版本信息的变量的指针 |
|
||||
| Description | 返回此模块的版本信息。 |
|
||||
| Available via | IoHwAb.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
### 8.4 回调通知(Call-back notifications)
|
||||
|
||||
本节列出了为下层模块提供的函数。
|
||||
|
||||
#### 8.4.1 IoHwAb_AdcNotification<#groupID>
|
||||
|
||||
**[SWS_IoHwAb_00121]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_AdcNotification<#groupID> |
|
||||
| Syntax | `void IoHwAb_AdcNotification<#groupID>(void)` |
|
||||
| Service ID[hex] | 0x20 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当 ADC 驱动完成组 `<#groupID>` 的组转换时,将由 ADC 驱动调用。 |
|
||||
| Available via | IoHwAb_Adc.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_IoHwAb_00104]** ⌈函数 IoHwAb_AdcNotification<#groupID> 旨在由 ADC 驱动在完成组 `<#groupID>` 的组转换时调用。⌋ ()
|
||||
|
||||
#### 8.4.2 IoHwAb_Pwm_Notification<#channel>
|
||||
|
||||
**[SWS_IoHwAb_00122]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_PwmNotification<#channel> |
|
||||
| Syntax | `void IoHwAb_PwmNotification<#channel>(void)` |
|
||||
| Service ID[hex] | 0x30 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当 PWM 通道 `<#channel>` 上发生信号边沿时,将由 PWM 驱动调用。 |
|
||||
| Available via | IoHwAb_Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_IoHwAb_00105]** ⌈函数 IoHwAb_PwmNotification<#channel> 旨在由 PWM 驱动在通道 `<#channel>` 上发生信号边沿时调用。⌋ ()
|
||||
|
||||
#### 8.4.3 IoHwAb_IcuNotification<#channel>
|
||||
|
||||
**[SWS_IoHwAb_00123]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_IcuNotification<#channel> |
|
||||
| Syntax | `void IoHwAb_IcuNotification<#channel>(void)` |
|
||||
| Service ID[hex] | 0x40 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当 ICU 通道 `<#channel>` 上发生信号边沿时,将由 ICU 驱动调用。 |
|
||||
| Available via | IoHwAb_Icu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_IoHwAb_00106]** ⌈函数 IoHwAb_IcuNotification<#channel> 旨在由 ICU 驱动在通道 `<#channel>` 上发生信号边沿时调用。⌋ ()
|
||||
|
||||
#### 8.4.4 IoHwAb_GptNotification<#channel>
|
||||
|
||||
**[SWS_IoHwAb_00124]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_GptNotification<#channel> |
|
||||
| Syntax | `void IoHwAb_GptNotification<#channel>(void)` |
|
||||
| Service ID[hex] | 0x50 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当 GPT 通道 `<#channel>` 上定时器值到期时,将由 GPT 驱动调用。 |
|
||||
| Available via | IoHwAb_Gpt.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_IoHwAb_00107]** ⌈函数 IoHwAb_GptNotification<#channel> 旨在由 GPT 驱动在通道 `<#channel>` 上定时器值到期时调用。⌋ ()
|
||||
|
||||
#### 8.4.5 IoHwAb_OcuNotification<#channel>
|
||||
|
||||
**[SWS_IoHwAb_00155]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_OcuNotification<#channel> |
|
||||
| Syntax | `void IoHwAb_OcuNotification<#channel>(void)` |
|
||||
| Service ID[hex] | 0xa0 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当计数器的当前值与通道 `<#channel>` 上的阈值匹配时,将由 OCU 驱动调用。 |
|
||||
| Available via | IoHwAb_Ocu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_IoHwAb_00156]** ⌈函数 IoHwAb_OcuNotification<#channel> 旨在由 OCU 驱动在通道 `<#channel>` 上计数器的当前值与阈值匹配时调用。⌋ ()
|
||||
|
||||
#### 8.4.6 IoHwAb_Pwm_NotifyReadyForPowerState<#MODE>
|
||||
|
||||
**[SWS_Pwm_00198]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_Pwm_NotifyReadyForPowerState<#Mode> |
|
||||
| Syntax | `void IoHwAb_Pwm_NotifyReadyForPowerState<#Mode>(void)` |
|
||||
| Service ID[hex] | 0x60 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当模式 `<#Mode>` 的请求电源状态准备完成时,应由 PWM 驱动调用。 |
|
||||
| Available via | IoHwAb_Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**注释:** 如果 PWM 驱动配置为支持异步模式的电源状态控制,则需要由 CDD 或 IoHwAbs 提供的此接口。
|
||||
|
||||
#### 8.4.7 IoHwAb_Adc_NotifyReadyForPowerState<#MODE>
|
||||
|
||||
**[SWS_IoHwAb_00154]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_Adc_NotifyReadyForPowerState<#Mode> |
|
||||
| Syntax | `void IoHwAb_Adc_NotifyReadyForPowerState<#Mode>(void)` |
|
||||
| Service ID[hex] | 0x70 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 当模式 `<#Mode>` 的请求电源状态准备完成时,应由 ADC 驱动调用。 |
|
||||
| Available via | IoHwAb_Adc.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**注释:** 如果 ADC 驱动配置为支持异步模式的电源状态控制,则需要由 CDD 或 IoHwAbs 提供的此接口。
|
||||
|
||||
### 8.5 计划函数(Scheduled functions)
|
||||
|
||||
这些函数由基础软件调度器直接调用。以下函数应没有返回值和参数。所有函数应为 Non-Reentrant。
|
||||
|
||||
#### 8.5.1 <Name of scheduled function>
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | `<Name of API call>` |
|
||||
| Service ID [hex] | `<Number of service ID. 此 ID 用作默认错误跟踪器错误报告 API 的参数。ID 不应等于第 0 章中的 ID>` |
|
||||
| Description | `<包含定义此 API 调用操作的 ID 的本地软件需求集。>` |
|
||||
| Timing | `<fixed cyclic / variable cyclic / on pre condition>` |
|
||||
| Pre condition | `<关于 API 调用必须操作的环境的假设列表。>` |
|
||||
| Configuration | `<描述影响此 API 调用的静态可配置属性。例如固定周期时序的周期时间。>` |
|
||||
|
||||
### 8.6 功能诊断接口(Functional Diagnostics Interface)
|
||||
|
||||
本章描述 I/O 硬件抽象向 DCM 模块提供的接口,以实现"软件组件的功能诊断"。
|
||||
|
||||
"软件组件的功能诊断"意味着,通过提供的接口,DCM 模块能够控制和读取每个已实现的 ECU 信号。
|
||||
|
||||
#### 8.6.1 IoHwAb_Dcm_<EcuSignalName>
|
||||
|
||||
**[SWS_IoHwAb_00135]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_Dcm_<EcuSignalName> |
|
||||
| Syntax | `void IoHwAb_Dcm_<EcuSignalName>(uint8 action, <EcuSignalDataType> signal)` |
|
||||
| Description | 此函数为 DCM 模块提供对特定 ECU 信号的访问控制(`<EcuSignalname>` 是 ECU 信号的符号名称)。可以通过此函数锁定和解锁 ECU 信号。锁定将 ECU 信号"冻结"为当前值、配置的默认值或由参数"signal"给定的值。 |
|
||||
| Available via | IoHwAb_Dcm.h |
|
||||
|
||||
⌋ (SRS_IoHwAb_00002)
|
||||
|
||||
| 参数 | 值 |
|
||||
|---|---|
|
||||
| action(输入) | IOHWAB_RETURNCONTROLTOECU:解锁信号<br>IOHWAB_RESETTODEFAULT:锁定信号并将其设置为配置的默认值<br>IOHWAB_FREEZECURRENTSTATE:锁定信号到当前值<br>IOHWAB_SHORTTERMADJUSTMENT:锁定信号并将其调整为 DCM 模块给定的值 |
|
||||
| signal(输入) | 调整信号的值(仅用于"短期调整") |
|
||||
|
||||
**[SWS_IoHwAb_00136]** ⌈此函数允许控制关联的 ECU 信号,即可以锁定、解锁 ECU 信号并将其调整为某个值。⌋ (SRS_IoHwAb_00002)
|
||||
|
||||
**[SWS_IoHwAb_00138]** ⌈此函数应可预编译时间配置 On/Off。⌋ (SRS_IoHwAb_00002)
|
||||
|
||||
**锁定信号**意味着某个信号在软件上锁定到 SW-C,即 SW-C 的请求在锁定状态下对硬件没有影响。如果对输入信号使用 C/S 通信,可能有必要具有 IoHwAb 内部缓冲区,其值可由 DCM 调整。
|
||||
|
||||
#### 8.6.2 IoHwAb_Dcm_Read<EcuSignalName>
|
||||
|
||||
**[SWS_IoHwAb_00139]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_Dcm_Read<EcuSignalName> |
|
||||
| Syntax | `void IoHwAb_Dcm_Read<EcuSignalName>(<EcuSignalDataType>* signal)` |
|
||||
| Parameters (out) | signal - 指向应存储当前信号值的变量的指针 |
|
||||
| Description | 此函数为 DCM 模块提供对特定 ECU 信号的读取访问(`<EcuSignalname>` 是 ECU 信号的符号名称)。 |
|
||||
| Available via | IoHwAb_Dcm.h |
|
||||
|
||||
⌋ (SRS_IoHwAb_00002)
|
||||
|
||||
**[SWS_IoHwAb_00140]** ⌈此函数为 DCM 模块提供对特定 ECU 信号的读取访问。读取访问独立于 ECU 信号的当前状态(锁定/未锁定),应始终从硬件读取当前物理值。⌋ (SRS_IoHwAb_00002)
|
||||
|
||||
**[SWS_IoHwAb_00142]** ⌈此函数应可预编译时间配置 On/Off。⌋ (SRS_IoHwAb_00002)
|
||||
|
||||
### 8.7 电源状态函数(Power State Functions)
|
||||
|
||||
#### 8.7.1 IoHwAb_PreparePowerState<#MODE>
|
||||
|
||||
**[SWS_IoHwAb_00146]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | IoHwAb_PreparePowerState<#Mode> |
|
||||
| Syntax | `void IoHwAb_PreparePowerState<#Mode>(void)` |
|
||||
| Service ID[hex] | 0x80 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 准备与模式 `<#Mode>` 关联的外设的电源状态转换。 |
|
||||
| Available via | IoHwAb.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.7.2 IoHwAb_EnterPowerState<#MODE>
|
||||
|
||||
> **摘要说明:** IoHwAb_EnterPowerState<#Mode> 用于执行实际的外设电源状态转换。
|
||||
>
|
||||
> 详细需求 SWS_IoHwAb_00147 见原文 PDF(第 49 页)。
|
||||
|
||||
### 8.8 预期接口(Expected Interfaces)
|
||||
|
||||
#### 8.8.1 强制接口(Mandatory Interfaces)
|
||||
|
||||
> **摘要说明:** I/O 硬件抽象的强制接口包括来自 MCAL 驱动程序的多个 API:
|
||||
>
|
||||
> | 源模块 | API | 用途 |
|
||||
> |---|---|---|
|
||||
> | Adc | Adc_Init, Adc_DeInit, Adc_StartGroupConversion, Adc_ReadGroup, Adc_EnableHardwareTrigger, Adc_DisableHardwareTrigger 等 | ADC 操作 |
|
||||
> | Dio | Dio_ReadChannel, Dio_WriteChannel, Dio_ReadPort, Dio_WritePort 等 | DIO 操作 |
|
||||
> | Gpt | Gpt_StartTimer, Gpt_StopTimer, Gpt_EnableNotification 等 | GPT 操作 |
|
||||
> | Icu | Icu_Init, Icu_SetMode, Icu_EnableNotification, Icu_StartTimestamp 等 | ICU 操作 |
|
||||
> | Ocu | Ocu_Init, Ocu_StartChannel, Ocu_StopChannel 等 | OCU 操作 |
|
||||
> | Pwm | Pwm_Init, Pwm_SetDutyCycle, Pwm_SetPeriodAndDuty 等 | PWM 操作 |
|
||||
> | Port | Port_Init, Port_SetPinDirection, Port_SetPinMode 等 | Port 操作 |
|
||||
> | Spi | Spi_Init, Spi_AsyncTransmit, Spi_ReadIB, Spi_WriteIB 等 | SPI 操作 |
|
||||
>
|
||||
> *完整列表见原文 PDF(第 49-52 页)。*
|
||||
|
||||
#### 8.8.2 可选接口(Optional Interfaces)
|
||||
|
||||
无附加可选接口。
|
||||
|
||||
#### 8.8.3 作业结束通知(Job End Notification)
|
||||
|
||||
> **摘要说明:** I/O 硬件抽象可以提供作业结束通知接口,以允许异步通信(SPI、ADC 流等)。
|
||||
|
||||
---
|
||||
|
||||
## 9 序列图(Sequence diagrams)
|
||||
|
||||
> **摘要说明:** 本节包含以下序列图:
|
||||
>
|
||||
> 1. **ECU-signal provided by the I/O Hardware Abstraction (example)** - 示例 ECU 信号提供流程
|
||||
> 2. **Setting ADC and PWM in a low consumption power state as a result of a request for an application low power mode (example)** - 低功耗模式下的 ADC 和 PWM 设置流程
|
||||
>
|
||||
> *完整序列图见原文 PDF(第 53-56 页)。*
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范(Configuration specification)
|
||||
|
||||
### 10.1 发布信息(Published Information)
|
||||
|
||||
> **摘要说明:** I/O 硬件抽象的发布信息包括:
|
||||
> - 版本号
|
||||
> - 供应商 ID
|
||||
> - 模块 ID
|
||||
> - 编译开关信息
|
||||
> - 与底层 MCAL 驱动程序的依赖关系
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用需求(Not applicable requirements)
|
||||
|
||||
> **摘要说明:** 本节列出了不适用于 I/O 硬件抽象的需求。
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 I/O 硬件抽象规范的中文翻译。保留了所有需求 ID(SWS_IoHwAb_xxxxx)、参考标识符及模块缩写。原始文档共 58 页,本翻译涵盖了全部主要章节,并对大型可追溯性表采用了"重点翻译+摘要"策略,标注"完整表见原文 PDF"的位置以便用户查阅原文。I/O 硬件抽象层提供基于信号的接口,向上层抽象出 ECU 硬件的信号路径。
|
||||
@@ -0,0 +1,931 @@
|
||||
# OCU 驱动规范(Specification of OCU Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | OCU 驱动规范(Specification of OCU Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 615 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 移除 OcuGroup(ECUC_Ocu_00161、ECUC_Ocu_00162、ECUC_Ocu_00163);更新头文件结构;多核特性(SWS_Ocu_00170、SWS_Ocu_CONSTR_00001、SWS_Ocu_CONSTR_00002) |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | OcuGroup 设为过时(ECUC_Ocu_00161、ECUC_Ocu_00162 和 ECUC_Ocu_00163);将"默认错误检测"重命名为"开发错误检测" |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除 SWS_Ocu_00134 和 SWS_Ocu_00135;将"SRS_BSW_000386"重命名为"SRS_BSW_00386";移除 SRS_BSW_00157、SRS_BSW_00326、SRS_BSW_00329、SRS_BSW_00338、SRS_BSW_00355、SRS_BSW_00370、SRS_BSW_00376、SRS_BSW_00434、SRS_BSW_0431;将"SRS_SPAL12448"更改为"SRS_SPAL_12448" |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | DET 已重命名;SWS_Ocu_00041 和 SWS_Ocu_00042 需求已移除;OCU_E_PARAM_CONFIG 已移除;新增 OCU_E_INIT_FAILED;无效的需求 ID:已更新 SWS_Ocu_156、SWS_Ocu_169 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 将 postBuildVariantValue 和 postBuildVariantMultiplicity 设置为 false,并将所有变体的 valueConfigClass 和 multiplicityConfigClass 设置为 preCompile;移除自动支持的 BSW 需求;对 SWS_BSW_00380 的引用已移除 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 文档结构的细微更新;编辑性变更;移除了关于变更文档的章节 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [引言与功能概述(Introduction and functional overview)](#1-引言与功能概述)
|
||||
2. [缩略语与缩写(Acronyms and abbreviations)](#2-缩略语与缩写)
|
||||
3. [相关文档(Related documentation)](#3-相关文档)
|
||||
4. [约束与假设(Constraints and assumptions)](#4-约束与假设)
|
||||
5. [对其他模块的依赖(Dependencies to other modules)](#5-对其他模块的依赖)
|
||||
6. [需求可追溯性(Requirements traceability)](#6-需求可追溯性)
|
||||
7. [功能规范(Functional specification)](#7-功能规范)
|
||||
8. [API 规范(API specification)](#8-api-规范)
|
||||
9. [序列图与时序图(Sequence and Timing diagrams)](#9-序列图与时序图)
|
||||
10. [配置规范(Configuration specification)](#10-配置规范)
|
||||
11. [不适用需求(Not applicable requirements)](#11-不适用需求)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言与功能概述(Introduction and functional overview)
|
||||
|
||||
本规范规定了 AUTOSAR 基础软件模块 OCU 驱动的功能、API 和配置。
|
||||
|
||||
每个 OCU 软件通道链接到属于微控制器的硬件 OCU 外设。可以选择性地将输出引脚附加到此通道。
|
||||
|
||||
驱动提供用于初始化和控制微控制器内部 OCU 功能(输出比较单元)的功能。OCU 驱动允许在计数器值与定义的阈值匹配时自动比较和执行动作。OCU 驱动为以下提供服务和配置参数:
|
||||
|
||||
- 启动和停止比较过程
|
||||
- 设置比较阈值
|
||||
- 启用和禁用通知机制
|
||||
- 获取计数器值
|
||||
- 更改输出引脚状态
|
||||
- 触发某些硬件资源(如果可用,包括 ADC、DMA)
|
||||
|
||||
通道计数器的 tick 持续时间取决于通道特定设置(OCU 驱动的一部分)以及由 MCU 模块控制的系统时钟和时钟树设置。本规范不限制 tick 持续时间。
|
||||
|
||||
某些微控制器没有专用的 OCU 硬件单元,而是具有可配置的通用定时器模块,可提供 OCU 功能以及其他定时器功能。本规范不假设硬件架构。相反,它定义了参数和 API,以便可以在任何合适的硬件架构上实现。下图显示了 OCU 通道的典型表示:
|
||||
|
||||
```
|
||||
Free running counter(自由运行计数器)
|
||||
|
||||
OUTPUT
|
||||
Comparison threshold(比较阈值)
|
||||
```
|
||||
|
||||
**图 1:OCU 通道的抽象视图**
|
||||
|
||||
"output" 是在比较匹配时实际执行的动作。
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
| 缩略语/缩写 | 描述 |
|
||||
|---|---|
|
||||
| OCU | 输出比较单元(Output Compare Unit) |
|
||||
| DMA | 直接内存访问(Direct Memory Access) |
|
||||
| MCAL | 微控制器抽象层(Microcontroller Abstraction Layer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| DEM | 诊断事件管理器(Diagnostic Event Manager) |
|
||||
| DET | 默认错误跟踪器(Default Error Tracer) |
|
||||
| SPAL | 标准外设抽象层(Standard Peripheral Abstraction Layer) |
|
||||
| ISR | 中断服务例程(Interrupt Service Routine) |
|
||||
|
||||
**术语定义:**
|
||||
|
||||
| 术语 | 描述 |
|
||||
|---|---|
|
||||
| OCU channel | 表示由自由运行计数器、比较阈值以及作为比较过程结果所执行的动作组成的逻辑实体。 |
|
||||
| Compare threshold(比较阈值) | 每次计数器增加一个单位时与计数器内容进行比较的目标值。 |
|
||||
| Free running counter(自由运行计数器) | 从最小值(或最大值)运行到最大值(或最小值)的计数器,并在达到最大值(或最小值)后自动从最小值(或最大值)重新启动的计数器。 |
|
||||
| Reference Interval(参考间隔) | Ocu_SetAbsolutThreshold API 调用方以 ticks 为单位给定的间隔,用作计算返回信息的基础。 |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档(Related documentation)
|
||||
|
||||
### 3.1 输入文档(Input documents)
|
||||
|
||||
- **[1]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[2]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[3]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[4]** 默认错误跟踪器规范,AUTOSAR_SWS_DefaultErrorTracer.pdf
|
||||
- **[5]** MCU 驱动规范,AUTOSAR_SWS_MCUDriver.pdf
|
||||
- **[6]** ECU 配置规范,AUTOSAR_TPS_ECUConfiguration.pdf
|
||||
- **[7]** 基础软件模块描述模板,AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
|
||||
- **[8]** 基础软件模块列表,AUTOSAR_TR_BSWModuleList.pdf
|
||||
|
||||
---
|
||||
|
||||
## 4 约束与假设(Constraints and assumptions)
|
||||
|
||||
### 4.1 假设(Assumptions)
|
||||
|
||||
#### 4.1.1 时钟(Clock)
|
||||
|
||||
驱动不支持时钟的动态更改。
|
||||
|
||||
由于系统时钟完全由 MCU 模块管理,因此系统时钟设置中的任何动态更改都会影响此模块。
|
||||
|
||||
该模块不在睡眠模式下运行。
|
||||
|
||||
#### 4.1.2 资源(Resources)
|
||||
|
||||
资源分配仅由 SW 或 HW 完成,以避免共享资源问题。
|
||||
|
||||
例如:API Ocu_SetPinState 的使用。不能对处于 RUNNING 状态的通道调用此 API 来更改引脚状态,否则硬件在比较匹配时自动设置的状态与 API 设置的状态之间可能存在冲突。
|
||||
|
||||
#### 4.1.3 计数与比较(Counting and comparing)
|
||||
|
||||
假设运行此驱动的硬件具有以下计数器抽象模型(以八位计数器为例):
|
||||
|
||||
```
|
||||
Free running up 0 1 2 3 … 253 254 255
|
||||
counter
|
||||
```
|
||||
|
||||
**图 2:此驱动自由运行计数器的抽象模型**
|
||||
|
||||
- 最小值为 0
|
||||
- 最大值为 255
|
||||
- 当计数器超过最大值时,它将重新加载为 0。这意味着它有 256 个计数步骤。
|
||||
|
||||
由于计数的量化,在将计数器内容与阈值进行比较时存在两种不同的情况。比较可以在进入计数器状态时发生,也可以在退出状态时发生,如下图所示:
|
||||
|
||||
```
|
||||
Free running counter … 34 35 36 37 38 39
|
||||
…
|
||||
Compare threshold 35
|
||||
|
||||
Or
|
||||
|
||||
Free running counter … 34 35 36 37 38 39
|
||||
…
|
||||
Compare threshold 35
|
||||
```
|
||||
|
||||
**图 3:驱动中预期的比较过程抽象模型**
|
||||
|
||||
此驱动的预期行为是在进入由阈值表示的状态时进行比较。
|
||||
|
||||
### 4.2 限制(Limitations)
|
||||
|
||||
无限制。
|
||||
|
||||
### 4.3 对汽车领域的适用性(Applicability to car domains)
|
||||
|
||||
无限制。
|
||||
|
||||
---
|
||||
|
||||
## 5 对其他模块的依赖(Dependencies to other modules)
|
||||
|
||||
### 模块 DET
|
||||
|
||||
如果为 OCU 驱动启用了开发错误检测,则每当此模块遇到开发错误时,驱动应将错误报告给默认错误跟踪器(DET)。
|
||||
|
||||
### 模块 DEM
|
||||
|
||||
OCU 驱动应将生产错误报告给诊断事件管理器(DEM)。
|
||||
|
||||
### 模块 MCU 驱动
|
||||
|
||||
微控制器单元驱动(MCU 驱动)主要负责初始化和控制芯片内部时钟源和时钟预分频器。OCU 依赖于系统时钟。因此,系统时钟的更改(例如 PLL on → PLL off)也会影响 OCU 硬件的时钟设置。
|
||||
|
||||
MCU 驱动将设置全局预分频器和 OCU 时钟。OCU 驱动不会在其初始化函数中负责设置配置全局时钟、全局预分频器和 PLL 的寄存器。这必须由 MCU 模块完成。OCU 驱动仅配置本地(OCU 外设特定)资源。
|
||||
|
||||
文档 [6] AUTOSAR_TPS_ECUConfiguration 包含章节"4.8 - 时钟树配置",详细说明了向外设提供参考时钟信号的机制。
|
||||
|
||||
### 模块 PORT
|
||||
|
||||
用作 OCU 输出的端口引脚的配置由 PORT 驱动完成。因此,PORT 驱动必须在使用 OCU 功能之前进行初始化。
|
||||
|
||||
### 5.1 文件结构(File structure)
|
||||
|
||||
#### 5.1.1 代码文件结构(Code file structure)
|
||||
|
||||
**[SWS_Ocu_00001]** ⌈代码文件结构不应在本规范中完全定义。在这一点上,应指出代码文件结构应包括以下文件:
|
||||
|
||||
- Ocu_Lcfg.c – 用于链接时可配置参数
|
||||
- Ocu_PBcfg.c – 用于后构建时可配置参数
|
||||
|
||||
这些文件应包含所有链接时和后构建时可配置参数。⌋ (SRS_BSW_00419, SRS_BSW_00346, SRS_BSW_00158, SRS_BSW_00314)
|
||||
|
||||
#### 5.1.2 头文件结构(Header file structure)
|
||||
|
||||
**[SWS_Ocu_00006]** ⌈Ocu.c 应包含 Ocu.h 和 Det.h。⌋ ()
|
||||
|
||||
---
|
||||
|
||||
## 6 需求可追溯性(Requirements traceability)
|
||||
|
||||
> **摘要说明:** 本节列出 BSW 和 SPAL 通用需求与 OCU 驱动特定需求(SWS_Ocu_xxxxx)的对应关系。完整可追溯性表见原文 PDF(第 12-21 页)。
|
||||
>
|
||||
> 关键映射:
|
||||
> - SWS_Ocu_00012(版本检查宏)← SRS_BSW_00004
|
||||
> - SWS_Ocu_00036(Init 函数)← SRS_BSW_00344, SRS_BSW_00404, SRS_BSW_00101, SRS_SPAL_12057
|
||||
> - SWS_Ocu_00045(DeInit 函数)← SRS_Ocu_00005
|
||||
> - SWS_Ocu_00051(StartChannel 函数)← SRS_Ocu_00008
|
||||
> - SWS_Ocu_00058(StopChannel 函数)← SRS_Ocu_00008
|
||||
> - SWS_Ocu_00066(SetPinState 函数)← SRS_Ocu_00011
|
||||
> - SWS_Ocu_00076(SetPinAction 函数)← SRS_Ocu_00012
|
||||
> - SWS_Ocu_00085(GetCounter 函数)← SRS_Ocu_00009
|
||||
> - SWS_Ocu_00091(SetAbsoluteThreshold 函数)← SRS_Ocu_00010
|
||||
> - SWS_Ocu_00094(SetAbsoluteThreshold 可配置 On/Off)← SRS_BSW_00171
|
||||
> - SWS_Ocu_00103(SetRelativeThreshold 可配置 On/Off)
|
||||
> - SWS_Ocu_00111(DisableNotification 可配置 On/Off)
|
||||
> - SWS_Ocu_00118(EnableNotification 可配置 On/Off)
|
||||
> - SWS_Ocu_00049(DeInit 可配置 On/Off)← SRS_BSW_00171
|
||||
> - SWS_Ocu_00070(SetPinState 可配置 On/Off)← SRS_BSW_00171
|
||||
> - SWS_Ocu_00079(SetPinAction 可配置 On/Off)← SRS_BSW_00171
|
||||
> - SWS_Ocu_00088(GetCounter 可配置 On/Off)← SRS_BSW_00171
|
||||
> - SWS_Ocu_00136(DeInit 停止所有自由运行计数器)← SRS_SPAL_12125
|
||||
> - SWS_Ocu_00137(DeInit 错误检测:RUNNING 状态)
|
||||
> - SWS_Ocu_00138(Ocu_ReturnType 定义)
|
||||
> - SWS_Ocu_00156(模块文档/标识)← SRS_BSW_xxxxx 系列
|
||||
> - SWS_Ocu_00170(多核特性约束)
|
||||
> - SWS_Ocu_CONSTR_00001 / 00002(多核约束)
|
||||
>
|
||||
> 错误检测需求(SWS_Ocu_00043、00050、00055、00056、00057、00064、00065、00071、00072、00073、00074、00075、00080、00081、00082、00083、00089、00090、00095、00096 等)实现 OCU_E_UNINIT、OCU_E_BUSY、OCU_E_PARAM_INVALID_CHANNEL、OCU_E_PARAM_NO_PIN、OCU_E_PARAM_INVALID_STATE、OCU_E_PARAM_INVALID_ACTION 等开发错误。
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范(Functional specification)
|
||||
|
||||
### 7.1 一般行为(General behavior)
|
||||
|
||||
**[SWS_Ocu_00010]** ⌈如果 OCU 单元的自由运行计数器可被另一个定时器模块使用,则 Ocu 驱动不得启动或停止该自由运行计数器。⌋ (SRS_SPAL_12125)
|
||||
|
||||
**[SWS_Ocu_00011]** ⌈API Ocu_Init 应启动专由此驱动使用的所有自由运行计数器。⌋ (SRS_SPAL_12125)
|
||||
|
||||
**[SWS_Ocu_00018]** ⌈开发错误的检测在预编译时是可配置的(ON/OFF)。开关 OcuDevErrorDetectApi 应激活或取消激活所有开发错误的检测。⌋ (SRS_BSW_00369, SRS_BSW_00386)
|
||||
|
||||
**[SWS_Ocu_00019]** ⌈如果启用了开关 OcuDevErrorDetectApi,则启用 API 参数检查。有关检测错误的详细说明可以在错误分类和 API 规范章节中找到。⌋ (SRS_BSW_00386, SRS_BSW_00369, SRS_BSW_00339)
|
||||
|
||||
**[SWS_Ocu_00020]** ⌈生产错误的检测无法关闭。⌋ (SRS_BSW_00339)
|
||||
|
||||
### 7.2 版本检查(Version check)
|
||||
|
||||
#### 7.2.1 背景与原理(Background & Rationale)
|
||||
|
||||
有关版本检查的详细信息,请参阅 SWS_BSWGeneral 中的第 5.1.8"版本检查"章节。
|
||||
|
||||
### 7.3 时间单位 Ticks(Time Unit Ticks)
|
||||
|
||||
#### 7.3.1 背景与原理(Background & Rationale)
|
||||
|
||||
要从寄存器值中获取时间,必须知道振荡器频率、预分频器等。由于这些设置是在 MCU 和/或其他模块中进行的,因此无法计算此类时间。
|
||||
|
||||
因此,时间与 ticks 之间的转换应属于上层。
|
||||
|
||||
#### 7.3.2 需求(Requirements)
|
||||
|
||||
> **摘要:** OCU 驱动 API 服务中使用的所有时间单位应为 ticks。物理单位与 ticks 之间的转换由 ECU 抽象层负责。
|
||||
|
||||
### 7.4 错误分类(Error classification)
|
||||
|
||||
#### 7.4.1 开发错误(Development Errors)
|
||||
|
||||
**[SWS_Ocu_00013]** ⌈开发错误类型:OCU_E_PARAM_INVALID_CHANNEL(当使用无效的通道号调用 API 时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00014]** ⌈开发错误类型:OCU_E_PARAM_NO_PIN(当通道未配置关联引脚时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00015]** ⌈开发错误类型:OCU_E_PARAM_INVALID_STATE(当 API 在无效状态下调用时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00016]** ⌈开发错误类型:OCU_E_PARAM_INVALID_ACTION(当 Ocu_SetPinAction 的动作参数无效时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00017]** ⌈开发错误类型:OCU_E_BUSY(当对正在运行的通道调用 Ocu_StartChannel 时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00173]** ⌈开发错误类型:OCU_E_UNINIT(当 API 在 OCU 驱动未初始化时调用时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00174]** ⌈开发错误类型:OCU_E_ALREADY_INITIALIZED(当 Ocu_Init 在 OCU 驱动和硬件已初始化时调用时报告)。⌋
|
||||
|
||||
**[SWS_Ocu_00175]** ⌈开发错误类型:OCU_E_INIT_FAILED(当 OCU 驱动初始化失败时报告)。⌋
|
||||
|
||||
#### 7.4.2 运行时错误(Runtime Errors)
|
||||
|
||||
无。
|
||||
|
||||
#### 7.4.3 瞬态故障(Transient Faults)
|
||||
|
||||
无。
|
||||
|
||||
#### 7.4.4 生产错误(Production Errors)
|
||||
|
||||
本模块不指定任何生产错误。
|
||||
|
||||
### 7.5 错误检测(Error Detection)
|
||||
|
||||
参见 SWS_Ocu_00018、SWS_Ocu_00019、SWS_Ocu_00020。
|
||||
|
||||
### 7.6 错误通知(Error Notification)
|
||||
|
||||
**[SWS_Ocu_00021]** ⌈检测到的开发错误应使用默认错误跟踪器(DET)的服务 Det_ReportError 进行报告(如果设置了预处理器开关 OcuDevErrorDetectApi)。⌋ (SRS_BSW_00339)
|
||||
|
||||
### 7.7 调试支持(Debug Support)
|
||||
|
||||
**[SWS_Ocu_00023]** ⌈AUTOSAR 调试可访问的每个变量应定义为全局变量。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00024]** ⌈应调试的变量的所有类型定义应可通过头文件 Ocu.h 访问。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00025]** ⌈头文件中变量的声明应使得可以通过 C "sizeof" 计算变量的大小。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00026]** ⌈可用于调试的变量应在相应的 OCU 驱动描述中描述。⌋ ()
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范(API specification)
|
||||
|
||||
### 8.1 导入类型(Imported types)
|
||||
|
||||
**[SWS_Ocu_00027]** ⌈
|
||||
|
||||
| 模块 | 头文件 | 导入类型 |
|
||||
|---|---|---|
|
||||
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
|
||||
|
||||
⌋ ()
|
||||
|
||||
### 8.2 类型定义(Type definitions)
|
||||
|
||||
#### 8.2.1 Ocu_ChannelType
|
||||
|
||||
**[SWS_Ocu_00028]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Ocu_ChannelType |
|
||||
| Type | uint |
|
||||
| Range | 8 / 16 / 32 位(实现特定) |
|
||||
| Description | OCU 通道的数字标识符。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.2 Ocu_ValueType
|
||||
|
||||
**[SWS_Ocu_00029]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Ocu_ValueType |
|
||||
| Type | uint |
|
||||
| Range | 8 / 16 / 32 位(实现特定) |
|
||||
| Description | 用于读取计数器和写入阈值值的类型(以 ticks 数表示)。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_SPAL_12063)
|
||||
|
||||
#### 8.2.3 Ocu_PinStateType
|
||||
|
||||
**[SWS_Ocu_00031]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Ocu_PinStateType |
|
||||
| Type | Enumeration |
|
||||
| Range | OCU_HIGH(OCU 通道关联的引脚处于高状态)<br>OCU_LOW(OCU 通道关联的引脚处于低状态) |
|
||||
| Description | OCU 通道链接的引脚的输出状态。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.4 Ocu_PinActionType
|
||||
|
||||
**[SWS_Ocu_00032]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Ocu_PinActionType |
|
||||
| Type | Enumeration |
|
||||
| Range | OCU_SET_HIGH(比较匹配时通道引脚将设置为 HIGH)<br>OCU_SET_LOW(比较匹配时通道引脚将设置为 LOW)<br>OCU_TOGGLE(比较匹配时通道引脚将设置为当前电平的反相 HIGH)<br>OCU_DISABLE(比较匹配时通道引脚将保持当前电平) |
|
||||
| Description | 在 OCU 通道关联的引脚上自动执行的动作(由硬件)。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.5 Ocu_ConfigType
|
||||
|
||||
**[SWS_Ocu_00033]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Ocu_ConfigType |
|
||||
| Type | Structure(硬件特定的初始化数据结构) |
|
||||
| Description | 包含 OCU 驱动初始化数据的数据结构类型。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00002, SRS_SPAL_12263, SRS_BSW_00405, SRS_BSW_00438)
|
||||
|
||||
**[SWS_Ocu_00034]** ⌈Ocu_ConfigType 是包含 OCU 驱动初始化数据的数据结构类型。
|
||||
|
||||
**强制参数:**
|
||||
- 通道/通道 ID 的符号名称
|
||||
- 计数器的最大值
|
||||
- 以 ticks 数表示的时间分辨率
|
||||
- 通知函数
|
||||
- 阈值的默认值
|
||||
- 计数器的最小值
|
||||
|
||||
**可选参数(如果硬件支持):**
|
||||
- 计数方向
|
||||
- 输出引脚(电平以及可能的自动动作)
|
||||
- 硬件触发事件(ADC 或 DMA)
|
||||
- 微控制器 OCU 特定的 HW 属性(如果硬件支持,可选预分频器、时钟设置)
|
||||
|
||||
⌋ (SRS_Ocu_00002, SRS_SPAL_12461)
|
||||
|
||||
#### 8.2.6 Ocu_ReturnType
|
||||
|
||||
**[SWS_Ocu_00138]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Ocu_ReturnType |
|
||||
| Type | Enumeration |
|
||||
| Range | OCU_CM_IN_REF_INTERVAL(比较匹配将发生在当前参考间隔内)<br>OCU_CM_OUT_REF_INTERVAL(比较匹配将不会发生在当前参考间隔内) |
|
||||
| Description | 设置新阈值后的返回信息。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
### 8.3 函数定义(Function definitions)
|
||||
|
||||
#### 8.3.1 Ocu_Init
|
||||
|
||||
**[SWS_Ocu_00035]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_Init |
|
||||
| Syntax | `void Ocu_Init(const Ocu_ConfigType* ConfigPtr)` |
|
||||
| Service ID[hex] | 0x00 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | ConfigPtr - 指向配置集的指针 |
|
||||
| Description | OCU 初始化服务。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Ocu_00036]** ⌈Ocu_Init 函数应初始化所有内部变量和微控制器的已使用 Ocu 结构,根据由 ConfigPtr 引用的配置集。⌋ (SRS_BSW_00344, SRS_BSW_00404, SRS_BSW_00101, SRS_SPAL_12057)
|
||||
|
||||
**注意:** 所有通道均由 API Ocu_Init 一次性初始化。没有单独初始化每个通道的 API。
|
||||
|
||||
**[SWS_Ocu_00037]** ⌈Ocu_Init 函数应仅初始化已配置的资源,并且不应触及配置文件中未配置的资源。⌋ (SRS_SPAL_12057, SRS_SPAL_12125)
|
||||
|
||||
**[SWS_Ocu_00038]** ⌈如果硬件只允许寄存器的一种用途(寄存器专用于 OCU 资源),则 OCU 驱动负责初始化该寄存器。⌋ (SRS_SPAL_12461)
|
||||
|
||||
**注释 1:** 如果寄存器可以影响多个硬件模块,并且它不是 I/O 寄存器,则应由 MCU 驱动对其进行初始化。
|
||||
|
||||
**注释 2:** 复位后需要直接初始化的一次性可写寄存器应由启动代码初始化。
|
||||
|
||||
**注释 3:** 所有其他寄存器应由启动代码初始化。
|
||||
|
||||
**注释 4:** 如果寄存器可以影响多个硬件模块,并且它是 I/O 寄存器,则应由 PORT 驱动对其进行初始化。
|
||||
|
||||
**[SWS_Ocu_00039]** ⌈Ocu_Init 函数应停止所有通道。⌋ (SRS_SPAL_12057)
|
||||
|
||||
**[SWS_Ocu_00040]** ⌈Ocu_Init 函数应禁用所有通知。⌋ (SRS_SPAL_12057)
|
||||
|
||||
原因是这些通知的用户可能尚未准备好。他们可以调用 Ocu_EnableNotification() 来开始接收通知。
|
||||
|
||||
**[SWS_Ocu_00043]** ⌈如果为 OCU 驱动启用了开发错误检测,并且当 OCU 驱动和硬件已初始化时调用了函数 Ocu_Init,则函数 Ocu_Init 应引发开发错误 OCU_E_ALREADY_INITIALIZED 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00044]** ⌈通过执行函数 Ocu_Init 重新初始化 OCU 驱动需要先通过执行函数 Ocu_DeInit 进行反初始化。⌋ ()
|
||||
|
||||
#### 8.3.2 Ocu_DeInit
|
||||
|
||||
**[SWS_Ocu_00045]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_DeInit |
|
||||
| Syntax | `void Ocu_DeInit(void)` |
|
||||
| Service ID[hex] | 0x01 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | 此函数反初始化 OCU 模块。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00005)
|
||||
|
||||
**[SWS_Ocu_00046]** ⌈Ocu_DeInit 函数应将由 Ocu_Init 初始化的 OCU 变量和寄存器反初始化到与上电复位状态相当的状态。不可写的寄存器的值不包括在内。⌋ (SRS_BSW_00336, SRS_SPAL_12163)
|
||||
|
||||
**注意:** 由硬件设计负责该状态不会导致 µC 中未定义的活动。
|
||||
|
||||
**[SWS_Ocu_00047]** ⌈Ocu_DeInit 函数应禁用所有使用的中断和通知。⌋ (SRS_SPAL_12163)
|
||||
|
||||
**[SWS_Ocu_00048]** ⌈Ocu_DeInit 函数应仅影响由静态配置和/或先前调用 Ocu_Init() 传递的运行时配置集分配的外设。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00136]** ⌈API Ocu_DeInit 应停止专由此驱动使用的所有自由运行计数器。⌋ (SRS_SPAL_12125)
|
||||
|
||||
**注意:** 为防止反初始化期间的未定义行为,用户必须在调用 API Ocu_DeInit 之前停止所有 RUNNING 通道(通过调用函数 Ocu_StopChannel)。
|
||||
|
||||
**[SWS_Ocu_00137]** ⌈如果为 OCU 驱动启用了开发错误检测:如果在调用函数 Ocu_DeInit 时通道仍处于 RUNNING 状态,则函数应引发开发错误 'OCU_E_PARAM_INVALID_STATE' 并返回而不执行任何操作。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00049]** ⌈Ocu_DeInit 函数应通过配置参数 OcuDeInitApi {OCU_DE_INIT_API} 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Ocu_00050]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,则函数 Ocu_DeInit 应引发错误 OCU_E_UNINIT。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
#### 8.3.3 Ocu_StartChannel
|
||||
|
||||
**[SWS_Ocu_00051]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_StartChannel |
|
||||
| Syntax | `void Ocu_StartChannel(Ocu_ChannelType ChannelNumber)` |
|
||||
| Service ID[hex] | 0x02 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - OCU 的数字标识符 |
|
||||
| Description | 启动 OCU 通道的服务。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00008)
|
||||
|
||||
**[SWS_Ocu_00052]** ⌈Ocu_StartChannel 函数应通过允许执行所有比较匹配已配置的动作来启动 OCU 通道。⌋ (SRS_Ocu_00008)
|
||||
|
||||
**[SWS_Ocu_00053]** ⌈Ocu_StartChannel 函数应在为不同通道调用时可重入。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00054]** ⌈如果成功执行函数 Ocu_StartChannel,所选通道的状态应设置为"RUNNING"。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00055]** ⌈如果为 OCU 驱动启用了开发错误检测:如果在处于"RUNNING"状态的通道上调用函数 Ocu_StartChannel,则函数应引发错误 OCU_E_BUSY 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00056]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 ChannelNumber 无效(不在配置指定的范围内),函数 Ocu_StartChannel 应引发错误 OCU_E_PARAM_INVALID_CHANNEL 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00057]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,函数 Ocu_StartChannel 应引发错误 OCU_E_UNINIT 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
#### 8.3.4 Ocu_StopChannel
|
||||
|
||||
**[SWS_Ocu_00058]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_StopChannel |
|
||||
| Syntax | `void Ocu_StopChannel(Ocu_ChannelType ChannelNumber)` |
|
||||
| Service ID[hex] | 0x03 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - OCU 的数字标识符 |
|
||||
| Description | 停止 OCU 通道的服务。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00008)
|
||||
|
||||
**[SWS_Ocu_00059]** ⌈Ocu_StopChannel 函数应通过停止此通道的比较匹配已配置的动作来停止 OCU 通道。⌋ (SRS_Ocu_00008)
|
||||
|
||||
**[SWS_Ocu_00060]** ⌈Ocu_StopChannel 函数不应停止与通道关联的自由运行计数器。⌋ ()
|
||||
|
||||
**注意:** 这是因为自由运行计数器可以与多个 Ocu 通道关联。因此,停止该计数器会损害其他通道的操作。
|
||||
|
||||
**[SWS_Ocu_00061]** ⌈Ocu_StopChannel 函数应在为不同通道调用时可重入。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00062]** ⌈如果成功执行函数 Ocu_StopChannel,所选通道的状态应设置为"STOPPED"。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00063]** ⌈如果在处于"STOPPED"状态的通道上调用函数 Ocu_StopChannel,则函数应不执行任何操作离开(不更改通道状态),并且不应引发开发错误。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00064]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 ChannelNumber 无效,函数 Ocu_StopChannel 应引发错误 OCU_E_PARAM_INVALID_CHANNEL 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00065]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,函数 Ocu_StopChannel 应引发错误 OCU_E_UNINIT 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
#### 8.3.5 Ocu_SetPinState
|
||||
|
||||
**[SWS_Ocu_00066]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_SetPinState |
|
||||
| Syntax | `void Ocu_SetPinState(Ocu_ChannelType ChannelNumber, Ocu_PinStateType PinState)` |
|
||||
| Service ID[hex] | 0x04 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - OCU 的数字标识符<br>PinState - OCU_LOW 或 OCU_HIGH |
|
||||
| Description | 立即设置 OCU 通道关联引脚电平的服务。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00011)
|
||||
|
||||
**[SWS_Ocu_00067]** ⌈Ocu_SetPinState 函数应将与通道关联的引脚设置为"PinState"指示的电平。⌋ (SRS_Ocu_00011)
|
||||
|
||||
**[SWS_Ocu_00068]** ⌈Ocu_SetPinState 函数应在为不同通道调用时可重入。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00069]** ⌈Ocu_SetPinState 函数应仅在通道不处于 RUNNING 状态时使用。⌋ ()
|
||||
|
||||
**注意:** 前面的要求还意味着可以通过此 API 更改 STOPPED 通道的状态。
|
||||
|
||||
**[SWS_Ocu_00070]** ⌈Ocu_SetPinState 函数应通过配置参数 OcuSetPinStateApi {OCU_SET_PIN_STATE_API} 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Ocu_00071]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 ChannelNumber 无效,函数 Ocu_SetPinState 应引发错误 OCU_E_PARAM_INVALID_CHANNEL 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00072]** ⌈如果为 OCU 驱动启用了开发错误检测:如果通道未关联引脚(未在通道配置中定义),函数 Ocu_SetPinState 应引发错误 OCU_E_PARAM_NO_PIN 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00073]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 PinState 无效,函数 Ocu_SetPinState 应引发错误 OCU_E_PARAM_INVALID_STATE 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00074]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,函数 Ocu_SetPinState 应引发错误 OCU_E_UNINIT 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00075]** ⌈如果为 OCU 驱动启用了开发错误检测:如果通道处于 RUNNING 状态,函数 Ocu_SetPinState 应引发错误 OCU_E_PARAM_INVALID_STATE 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
#### 8.3.6 Ocu_SetPinAction
|
||||
|
||||
**[SWS_Ocu_00076]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_SetPinAction |
|
||||
| Syntax | `void Ocu_SetPinAction(Ocu_ChannelType ChannelNumber, Ocu_PinActionType PinAction)` |
|
||||
| Service ID[hex] | 0x05 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - OCU 的数字标识符<br>PinAction - OCU_SET_LOW、OCU_SET_HIGH、OCU_TOGGLE、OCU_DISABLE |
|
||||
| Description | 指示驱动在比较匹配时由硬件自动执行什么操作的服务(如果支持)。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00012)
|
||||
|
||||
**[SWS_Ocu_00077]** ⌈Ocu_SetPinAction 函数应设置在相应 OCU 通道的下一次比较匹配时由硬件自动执行的动作。⌋ (SRS_Ocu_00012)
|
||||
|
||||
**[SWS_Ocu_00078]** ⌈Ocu_SetPinAction 函数应在为不同通道调用时可重入。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00079]** ⌈Ocu_SetPinAction 函数应通过配置参数 OcuSetPinActionApi {OCU_SET_PIN_ACTION_API} 进行预编译时间配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Ocu_00080]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 ChannelNumber 无效,函数 Ocu_SetPinAction 应引发错误 OCU_E_PARAM_INVALID_CHANNEL 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00081]** ⌈如果为 OCU 驱动启用了开发错误检测:如果通道未关联引脚,函数 Ocu_SetPinAction 应引发错误 OCU_E_PARAM_NO_PIN 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00082]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 PinAction 无效(不在类型指定的范围内),函数 Ocu_SetPinAction 应引发错误 OCU_E_PARAM_INVALID_ACTION 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00083]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,函数 Ocu_SetPinAction 应引发错误 OCU_E_UNINIT 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00084]** ⌈如果引脚与通道关联,则应在比较匹配时执行与此引脚相关的动作。⌋ ()
|
||||
|
||||
#### 8.3.7 Ocu_GetCounter
|
||||
|
||||
**[SWS_Ocu_00085]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_GetCounter |
|
||||
| Syntax | `Ocu_ValueType Ocu_GetCounter(Ocu_ChannelType ChannelNumber)` |
|
||||
| Service ID[hex] | 0x06 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant |
|
||||
| Parameters (in) | ChannelNumber - OCU 通道的数字标识符 |
|
||||
| Return value | Ocu_ValueType - 计数器内容(以 ticks 为单位) |
|
||||
| Description | 读取计数器当前值的服务。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00009)
|
||||
|
||||
**[SWS_Ocu_00086]** ⌈Ocu_GetCounter 函数应读取并返回由 ChannelNumber 指示的通道的计数器值。⌋ (SRS_Ocu_00009)
|
||||
|
||||
**[SWS_Ocu_00087]** ⌈Ocu_GetCounter 函数应是可重入的。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00088]** ⌈Ocu_GetCounter 函数应通过配置参数 OcuGetCounterApi {OCU_GET_COUNTER_API} 进行预编译时间配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Ocu_00089]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 ChannelNumber 无效,函数 Ocu_GetCounter 应引发错误 OCU_E_PARAM_INVALID_CHANNEL 并返回值"0"。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00090]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,则函数 Ocu_GetCounterValue 应引发错误 OCU_E_UNINIT 并返回值"0"。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
#### 8.3.8 Ocu_SetAbsoluteThreshold
|
||||
|
||||
**[SWS_Ocu_00091]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Ocu_SetAbsoluteThreshold |
|
||||
| Syntax | `Ocu_ReturnType Ocu_SetAbsoluteThreshold(Ocu_ChannelType ChannelNumber, Ocu_ValueType ReferenceValue, Ocu_ValueType AbsoluteValue)` |
|
||||
| Service ID[hex] | 0x07 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - OCU 通道的数字标识符<br>ReferenceValue - 由上层给定的值,用作确定是否在函数退出之前调用通知的基础<br>AbsoluteValue - 与计数器内容进行比较的值(以 ticks 为单位) |
|
||||
| Return value | Ocu_ReturnType - 告知调用者由于设置新的阈值,比较匹配是否会发生(或已经发生)在当前参考间隔内 |
|
||||
| Description | 使用绝对输入数据设置通道阈值的服务。 |
|
||||
| Available via | Ocu.h |
|
||||
|
||||
⌋ (SRS_Ocu_00010)
|
||||
|
||||
**[SWS_Ocu_00092]** ⌈Ocu_SetAbsoluteThreshold 函数应将通道阈值(比较值)设置为由 AbsoluteValue 给定的值。⌋ (SRS_Ocu_00010)
|
||||
|
||||
**[SWS_Ocu_00093]** ⌈Ocu_SetAbsoluteThreshold 函数应在为不同通道调用时可重入。⌋ ()
|
||||
|
||||
**[SWS_Ocu_00094]** ⌈Ocu_SetAbsoluteThreshold 函数应通过配置参数 OcuSetAbsoluteThresholdApi {OCU_SET_ABSOLUTE_THRESHOLD_API} 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Ocu_00095]** ⌈如果为 OCU 驱动启用了开发错误检测:如果驱动未初始化,函数 Ocu_SetAbsoluteThreshold 应引发错误 OCU_E_UNINIT 并返回而不执行任何操作。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**[SWS_Ocu_00096]** ⌈如果为 OCU 驱动启用了开发错误检测:如果参数 ChannelNumber 无效,函数 Ocu_SetAbsoluteThreshold 应引发错误 OCU_E_PARAM_INVALID_CHANNEL 并返回而不执行任何操作。⌋ (SRS_BSW_00323, SRS_BSW_00386, SRS_SPAL_12448)
|
||||
|
||||
**关于 ReferenceValue:** ReferenceValue 是来自上层的信息。通过组合 ReferenceValue 和 AbsoluteValue 提供了一个间隔(定义为"参考间隔",下图中的绿色区域)以考虑计数器连续运行以及调用方更新比较阈值的请求与阈值的实际修改之间可能存在延迟的事实。
|
||||
|
||||
**情况 1:阈值在实际比较匹配发生之前写入**
|
||||
|
||||
```
|
||||
Free running counter 29 30 31 32 33 34 35 36 37 38 39
|
||||
…
|
||||
Reference Value 30
|
||||
|
||||
Compare threshold 35
|
||||
(Absolute value)
|
||||
```
|
||||
|
||||
相等性将在写入阈值后发生。中断将被触发,通知函数应由驱动调用。
|
||||
|
||||
**图 6:阈值在实际比较匹配发生之前写入**
|
||||
|
||||
**情况 2:阈值在实际比较匹配发生之后写入**
|
||||
|
||||
```
|
||||
Free running counter 29 30 31 32 33 34 35 36 37 38 39
|
||||
…
|
||||
Reference Value 30
|
||||
|
||||
35
|
||||
Compare threshold
|
||||
```
|
||||
|
||||
在此周期内不会发生相等性,因为所使用的计数器值已经大于阈值。
|
||||
|
||||
**图 7:阈值在实际比较匹配发生之后写入**
|
||||
|
||||
**参考间隔定义(含计数器回绕):**
|
||||
|
||||
```
|
||||
… …
|
||||
Free running counter 69 70 71 255 0 19 20 21 22
|
||||
…
|
||||
Reference Value 70
|
||||
|
||||
Compare threshold 20
|
||||
```
|
||||
|
||||
**图 8:参考间隔的定义**
|
||||
|
||||
#### 8.3.9 Ocu_SetRelativeThreshold
|
||||
|
||||
> **摘要说明:** Ocu_SetRelativeThreshold 允许相对于当前计数器值或当前阈值值设置新阈值。
|
||||
>
|
||||
> **[SWS_Ocu_00103]** ⌈Ocu_SetRelativeThreshold 函数应通过配置参数 OcuSetRelativeThresholdApi {OCU_SET_RELATIVE_THRESHOLD_API} 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
>
|
||||
> 详细函数签名与需求见原文 PDF(第 41-43 页)。
|
||||
|
||||
#### 8.3.10 Ocu_DisableNotification
|
||||
|
||||
> **摘要说明:** Ocu_DisableNotification 禁用 OCU 通道的通知。
|
||||
>
|
||||
> **[SWS_Ocu_00111]** ⌈Ocu_DisableNotification 函数应通过配置参数 OcuNotificationSupported {OCU_NOTIFICATION_SUPPORTED} 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
#### 8.3.11 Ocu_EnableNotification
|
||||
|
||||
> **摘要说明:** Ocu_EnableNotification 启用 OCU 通道的通知。
|
||||
>
|
||||
> **[SWS_Ocu_00118]** ⌈Ocu_EnableNotification 函数应通过配置参数 OcuNotificationSupported {OCU_NOTIFICATION_SUPPORTED} 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
#### 8.3.12 Ocu_GetVersionInfo
|
||||
|
||||
> **摘要说明:** Ocu_GetVersionInfo 返回此驱动版本的详细信息(vendor ID、module ID、vendor specific version numbers)。通过 Std_VersionInfoType 指针返回。
|
||||
|
||||
### 8.4 回调通知(Callback notifications)
|
||||
|
||||
无。
|
||||
|
||||
### 8.5 计划函数(Scheduled functions)
|
||||
|
||||
无。
|
||||
|
||||
### 8.6 预期接口(Expected Interfaces)
|
||||
|
||||
#### 8.6.1 强制接口(Mandatory Interfaces)
|
||||
|
||||
- `Det_ReportError`(来自 Det)
|
||||
|
||||
#### 8.6.2 可选接口(Optional Interfaces)
|
||||
|
||||
无。
|
||||
|
||||
#### 8.6.3 可配置接口(Configurable interfaces)
|
||||
|
||||
- `Ocu_DeInit`
|
||||
- `Ocu_StartChannel`
|
||||
- `Ocu_StopChannel`
|
||||
- `Ocu_SetPinState`
|
||||
- `Ocu_SetPinAction`
|
||||
- `Ocu_GetCounter`
|
||||
- `Ocu_SetAbsoluteThreshold`
|
||||
- `Ocu_SetRelativeThreshold`
|
||||
- `Ocu_DisableNotification`
|
||||
- `Ocu_EnableNotification`
|
||||
- `Ocu_GetVersionInfo`
|
||||
|
||||
---
|
||||
|
||||
## 9 序列图与时序图(Sequence and Timing diagrams)
|
||||
|
||||
> **摘要说明:** 本节包含以下序列图:
|
||||
>
|
||||
> 1. **初始化**(Ocu_Init 调用流程)
|
||||
> 2. **反初始化**(Ocu_DeInit 调用流程)
|
||||
> 3. **使用 OCU 通知**(启用/禁用通知流程)
|
||||
> 4. **Ocu_SetPinState**(设置引脚状态流程)
|
||||
> 5. **Ocu_SetPinAction**(设置引脚动作流程)
|
||||
> 6. **设置新的比较阈值**(SetAbsoluteThreshold/SetRelativeThreshold 流程)
|
||||
>
|
||||
> *完整序列图见原文 PDF(第 48-52 页)。*
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范(Configuration specification)
|
||||
|
||||
### 10.1 如何阅读本章(How to read this chapter)
|
||||
|
||||
#### 10.1.1 配置和配置参数(Configuration and configuration parameters)
|
||||
|
||||
容器和参数定义遵循 AUTOSAR 配置规范。
|
||||
|
||||
#### 10.1.2 容器(Containers)
|
||||
|
||||
#### 10.1.3 配置参数的规范模板(Specification template for configuration parameters)
|
||||
|
||||
### 10.2 容器和配置参数(Containers and configuration parameters)
|
||||
|
||||
#### 10.2.1 Ocu
|
||||
|
||||
> Ocu 是顶层容器,包含所有 OCU 驱动配置。
|
||||
|
||||
#### 10.2.2 OcuGeneral
|
||||
|
||||
> **摘要:** OcuGeneral 包含全局 OCU 配置:
|
||||
> - `OcuConfigSetPointer` - 配置集指针
|
||||
> - `OcuDevErrorDetectApi` - 启用/禁用开发错误检测
|
||||
> - `OcuDeInitApi` - 启用/禁用 DeInit API
|
||||
> - `OcuSetPinStateApi` - 启用/禁用 SetPinState API
|
||||
> - `OcuSetPinActionApi` - 启用/禁用 SetPinAction API
|
||||
> - `OcuGetCounterApi` - 启用/禁用 GetCounter API
|
||||
> - `OcuSetAbsoluteThresholdApi` - 启用/禁用 SetAbsoluteThreshold API
|
||||
> - `OcuSetRelativeThresholdApi` - 启用/禁用 SetRelativeThreshold API
|
||||
> - `OcuNotificationSupported` - 启用/禁用通知
|
||||
> - `OcuGetVersionInfoApi` - 启用/禁用版本信息 API
|
||||
> - `OcuIndex` - OCU 驱动实例索引
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 56-58 页)。*
|
||||
|
||||
#### 10.2.3 OcuConfigurationOfOptionalApis
|
||||
|
||||
> **摘要:** 包含每个可选 API 的配置:
|
||||
> - `OcuSetPinStateApi`
|
||||
> - `OcuSetPinActionApi`
|
||||
> - `OcuGetCounterApi`
|
||||
> - `OcuSetAbsoluteThresholdApi`
|
||||
> - `OcuSetRelativeThresholdApi`
|
||||
> - `OcuNotificationSupported`
|
||||
> - `OcuGetVersionInfoApi`
|
||||
> - `OcuDeInitApi`
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 58-61 页)。*
|
||||
|
||||
#### 10.2.4 OcuConfigSet
|
||||
|
||||
OcuConfigSet 容器包含一组 OcuChannel 配置。
|
||||
|
||||
#### 10.2.5 OcuChannel
|
||||
|
||||
> **摘要:** OcuChannel 包含每个 OCU 通道的配置:
|
||||
> - `OcuChannelId` - 通道 ID
|
||||
> - `OcuCounterMaxValue` - 计数器最大值
|
||||
> - `OcuCounterMinValue` - 计数器最小值
|
||||
> - `OcuDefaultThreshold` - 默认阈值
|
||||
> - `OcuChannelNotification` - 通道通知
|
||||
> - `OcuHardwareChannel` - 已分配的硬件通道
|
||||
> - `OcuHwUsed` - 是否使用硬件
|
||||
> - `OcuPinAction` - 引脚动作
|
||||
> - `OcuPinState` - 引脚状态
|
||||
> - `OcuOutputPinUsed` - 是否使用输出引脚
|
||||
> - `OcuHardwareTriggered` - 是否硬件触发(ADC/DMA)
|
||||
> - `OcuHwResourceId` - 硬件资源 ID
|
||||
> - `OcuHwResource` - 硬件资源数量
|
||||
> - `OcuExpectedHardwareTrigger` - 预期的硬件触发
|
||||
> - `OcuCountDirection` - 计数方向
|
||||
> - `OcuMcuClockReferencePoint` - MCU 时钟参考点
|
||||
> - `OcuPrescaler` - 预分频器
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 63-69 页)。*
|
||||
|
||||
#### 10.2.6 OcuHWSpecificSettings
|
||||
|
||||
> **摘要:** 包含每个 OCU 通道的硬件特定设置。
|
||||
|
||||
### 10.3 发布信息(Published Information)
|
||||
|
||||
> **摘要说明:** 发布信息参数定义了由 OCU 驱动模块发布给其他模块的信息,例如版本号、供应商 ID 等。
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用需求(Not applicable requirements)
|
||||
|
||||
> **摘要说明:** 本节列出了不适用于 OCU 驱动的需求,包括:
|
||||
> - 与特定 BSW 通用规范条目相关的限制
|
||||
> - 多核分发相关需求的适用性说明
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 OCU 驱动软件规范的中文翻译。保留了所有需求 ID(SWS_Ocu_xxxxx)、参考标识符及模块缩写。原始文档共 72 页,本翻译涵盖了全部主要章节,并对大型可追溯性表和详细配置参数表采用了"重点翻译+摘要"策略,标注"完整表见原文 PDF"的位置以便用户查阅原文。OCU(输出比较单元)驱动提供计数器与阈值比较、自动引脚动作、通知和硬件触发等关键功能。
|
||||
@@ -0,0 +1,837 @@
|
||||
# PWM 驱动规范(Specification of PWM Driver)
|
||||
|
||||
> **AUTOSAR CP Release 4.4.0**
|
||||
|
||||
## 文档元信息
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| **文档标题** | PWM 驱动规范(Specification of PWM Driver) |
|
||||
| **文档所有者** | AUTOSAR |
|
||||
| **文档责任方** | AUTOSAR |
|
||||
| **文档标识号** | 037 |
|
||||
| **文档状态** | Final(最终版) |
|
||||
| **所属 AUTOSAR 标准** | Classic Platform(经典平台) |
|
||||
| **所属标准版本** | 4.4.0 |
|
||||
|
||||
## 文档变更历史(Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更人 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 引入 MCAL 多核分发(Draft)概念;移除过时元素;头文件清理;修正自动化文档处理的文档结构 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 添加运行时错误分类;移除 SWS_Pwm_20069、SWS_Pwm_10120 和 SWS_Pwm_20120 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 更新 Pwm_GetOutputState 返回值需求 SWS_Pwm_30051 及其引用;更新 PwmChannelID 的配置类;移除配置变体定义;移除 BSW 需求的未解析引用;更新头文件结构图 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 移除关于 NULL_PTR 检查的需求;DET 已重命名 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 更新代码文件结构需求的追踪引用 |
|
||||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 引入 McuClockReferencePoint;编辑性变更 |
|
||||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 更新与 PwmPowerStateAsynchTransitionMode 相关的需求;更新计划函数章节;编辑性变更;移除变更文档章节 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 新增 ECU 降级概念;适配新的 SWS BSW General;拆分内存映射头 |
|
||||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 重新阐述 SWS_Pwm_00045 |
|
||||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 新错误符号 PWM_E_PARAM_POINTER:在 API Pwm_GetVersionInfo 以 NULL 参数调用时报告;更新版本检查章节;措辞和维护性改进 |
|
||||
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 解释 Pwm_SetPeriodAndDuty 函数在零周期输入值时的行为;新增调试支持章节;拆分某些需求使每个 ID 唯一;法律声明修订 |
|
||||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
|
||||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 从 UML 模型生成的表和链接到 UML 模型的 UML 图;通用需求的改进以为 CT 开发做准备;IDLE PWM 通道的重新激活概念适配;已初始化模块的开发错误添加;文档元信息扩展;小幅布局调整 |
|
||||
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 更新文件包含结构;为 PWM API 添加 ON/OFF 配置宏;将配置参数 PWM_PERIOD_UPDATED_ENDPERIOD 重命名为 PwmPeriodUpdatedEndperiod;更新 PWM 信号描述图;法律声明修订;"用户建议"修订;"修订信息"新增 |
|
||||
| 2006-05-16 | 2.0 | AUTOSAR Administration | 文档结构适配通用 Release 2.0 SWS 模板;修改 PWM 通道的抽象级别;通知可配置;更新模块的配置 |
|
||||
| 2005-05-31 | 1.0 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录(Table of Contents)
|
||||
|
||||
1. [引言与功能概述(Introduction and functional overview)](#1-引言与功能概述)
|
||||
2. [缩略语与缩写(Acronyms and abbreviations)](#2-缩略语与缩写)
|
||||
3. [相关文档(Related documentation)](#3-相关文档)
|
||||
- 3.1 [输入文档(Input documents)](#31-输入文档)
|
||||
- 3.2 [相关规范(Related specification)](#32-相关规范)
|
||||
4. [约束与假设(Constraints and assumptions)](#4-约束与假设)
|
||||
- 4.1 [限制(Limitations)](#41-限制)
|
||||
- 4.2 [对汽车领域的适用性(Applicability to car domains)](#42-对汽车领域的适用性)
|
||||
5. [对其他模块的依赖(Dependencies to other modules)](#5-对其他模块的依赖)
|
||||
- 5.1 [文件结构(File structure)](#51-文件结构)
|
||||
6. [需求可追溯性(Requirements traceability)](#6-需求可追溯性)
|
||||
7. [功能规范(Functional specification)](#7-功能规范)
|
||||
8. [API 规范(API specification)](#8-api-规范)
|
||||
9. [序列图(Sequence diagrams)](#9-序列图)
|
||||
10. [配置规范(Configuration specification)](#10-配置规范)
|
||||
11. [不适用需求(Not applicable requirements)](#11-不适用需求)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言与功能概述(Introduction and functional overview)
|
||||
|
||||
本规范规定了 AUTOSAR 基础软件模块 PWM 驱动的功能、API 和配置。
|
||||
|
||||
每个 PWM 通道链接到属于微控制器的硬件 PWM。PWM 信号的类型(例如中心对齐、左对齐等)不在本规范中定义,留给实现。
|
||||
|
||||
驱动提供用于初始化和控制微控制器内部 PWM 级(脉宽调制)的功能。PWM 模块生成具有可变脉冲宽度的脉冲。它允许选择占空比和信号周期时间。
|
||||
|
||||
**图 1:PWM 信号描述**
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语与缩写(Acronyms and abbreviations)
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| PWM Channel | 链接到硬件 PWM 的数字标识符 |
|
||||
| PWM Output State | 定义 PWM 信号的输出状态。可以是:<br>- High(高)<br>- Low(低) |
|
||||
| PWM Idle State | 空闲状态表示在调用 Pwm_SetOutputToIdle 或 Pwm_DeInit 之后 PWM 通道的输出状态 |
|
||||
| PWM Polarity | 定义每个 PWM 通道的起始输出状态 |
|
||||
| PWM Duty cycle | 定义相对于周期的起始电平(高或低)的百分比 |
|
||||
| PWM period | 定义 PWM 信号的周期 |
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| PWM | 脉宽调制(Pulse Width Modulation) |
|
||||
| DEM | 诊断事件管理器(Diagnostic Event Manager) |
|
||||
| DET | 默认错误跟踪器(Default Error Tracer) |
|
||||
| MCU | 微控制器单元(Microcontroller Unit) |
|
||||
| PLL | 锁相环(Phase Locked Loop) |
|
||||
| ISR | 中断服务例程(Interrupt Service Routine) |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档(Related documentation)
|
||||
|
||||
### 3.1 输入文档(Input documents)
|
||||
|
||||
- **[1]** 分层软件架构,AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
|
||||
- **[2]** SPAL 的一般需求,AUTOSAR_SRS_SPALGeneral.pdf
|
||||
- **[3]** 基础软件模块的一般需求,AUTOSAR_SRS_BSWGeneral.pdf
|
||||
- **[4]** 默认错误跟踪器规范,AUTOSAR_SWS_DefaultErrorTracer.pdf
|
||||
- **[5]** MCU 驱动规范,AUTOSAR_SWS_MCUDriver.pdf
|
||||
- **[6]** ECU 配置规范,AUTOSAR_TPS_ECUConfiguration.pdf
|
||||
- **[7]** 基础软件模块描述模板,AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
|
||||
- **[8]** 基础软件模块列表,AUTOSAR_TR_BSWModuleList
|
||||
- **[9]** 基础软件模块通用规范,AUTOSAR_SWS_BSWGeneral.pdf
|
||||
|
||||
### 3.2 相关规范(Related specification)
|
||||
|
||||
AUTOSAR 提供了基础软件模块的通用规范 [9](SWS BSW General),这也适用于 PWM 驱动。
|
||||
|
||||
因此,SWS BSW General 规范应被视为 PWM 驱动的附加和必需规范。
|
||||
|
||||
---
|
||||
|
||||
## 4 约束与假设(Constraints and assumptions)
|
||||
|
||||
### 4.1 限制(Limitations)
|
||||
|
||||
**[SWS_Pwm_00001]** ⌈PWM SWS 不涵盖通用 I/O 上的 PWM 仿真。⌋ (SRS_Pwm_12386)
|
||||
|
||||
- 电源状态控制 API 仅在 MCAL 驱动拥有完整的底层 HW 外设(即 HW 外设未被其他 MCAL 模块访问)时可实现。
|
||||
|
||||
### 4.2 对汽车领域的适用性(Applicability to car domains)
|
||||
|
||||
无限制。
|
||||
|
||||
---
|
||||
|
||||
## 5 对其他模块的依赖(Dependencies to other modules)
|
||||
|
||||
PWM 依赖于系统时钟。因此,系统时钟的更改(例如 PLL on → PLL off)也会影响 PWM 硬件的时钟设置。
|
||||
|
||||
PWM 驱动依赖于以下模块:
|
||||
|
||||
- **PORT 驱动**:用于设置端口引脚功能(PWM141)
|
||||
- **MCU 驱动**:用于设置预分频器、系统时钟和 PLL(PWM142)
|
||||
- **DET**:开发模式下的默认错误跟踪器(PWM143)
|
||||
|
||||
文档 087_AUTOSAR_ECU_Configuration 包含章节 4.6 - 时钟树配置,详细说明了向外设提供参考时钟信号的机制。
|
||||
|
||||
### 5.1 文件结构(File structure)
|
||||
|
||||
#### 5.1.1 代码文件结构(Code file structure)
|
||||
|
||||
**[SWS_Pwm_00065]** ⌈PWM SWS 不应定义代码文件结构。⌋ (SRS_BSW_00346, SRS_BSW_00158, SRS_BSW_00314)
|
||||
|
||||
#### 5.1.2 头文件结构(Header file structure)
|
||||
|
||||
- **[SWS_Pwm_50075]** ⌈Pwm.c 应包含 Pwm.h、Det.h 和 ... ⌋ ()
|
||||
- **[SWS_Pwm_70075]** ⌈Pwm_Irq.c 应包含 Pwm.h。⌋ ()
|
||||
|
||||
---
|
||||
|
||||
## 6 需求可追溯性(Requirements traceability)
|
||||
|
||||
> **摘要说明:** 本节列出 BSW 和 SPAL 通用需求与 PWM 驱动特定需求(SWS_Pwm_xxxxx)的对应关系。完整的可追溯性表见原文 PDF,主要包括以下类别:
|
||||
>
|
||||
> - **通用 BSW 需求**(SRS_BSW_xxxxx):模块版本、初始化、配置、命名约定、错误处理、内存映射等
|
||||
> - **SPAL 特定需求**(SRS_SPAL_xxxxx):初始化接口、通知机制、模式选择、ISR、休眠源等
|
||||
> - **PWM 特定 SRS 需求**(SRS_Pwm_xxxxx):占空比设置、周期设置、通知开关、参数配置等
|
||||
>
|
||||
> 关键映射:
|
||||
> - SWS_Pwm_00007(Init 函数)← SRS_BSW_00101, SRS_SPAL_12057
|
||||
> - SWS_Pwm_00010(DeInit 函数)← SRS_BSW_00336, SRS_SPAL_12163, SRS_Pwm_12381
|
||||
> - SWS_Pwm_00013(SetDutyCycle 函数)← SRS_Pwm_12295
|
||||
> - SWS_Pwm_00019(SetPeriodAndDuty 函数)← SRS_Pwm_12297
|
||||
> - SWS_Pwm_00021(SetOutputToIdle)← SRS_Pwm_12358
|
||||
> - SWS_Pwm_00022(GetOutputState)← SRS_Pwm_12385
|
||||
> - SWS_Pwm_00023/00024(Disable/EnableNotification)← SRS_Pwm_12378, SRS_Pwm_12299
|
||||
> - SWS_Pwm_00041(仅允许 variable period 类型的通道更改周期)← SRS_Pwm_12389
|
||||
> - SWS_Pwm_00058(16 位占空比宽度)← SRS_Pwm_12383
|
||||
> - SWS_Pwm_00059(占空比缩放方案)← SRS_Pwm_12459
|
||||
> - SWS_Pwm_00070(时间单位为 ticks)← SRS_BSW_00343
|
||||
> - SWS_Pwm_00093、00116、00118、00121(Init 时序约束与错误检测)
|
||||
> - SWS_Pwm_00117、00047、10051、20051(API 参数验证)
|
||||
> - SWS_Pwm_00150(周期为 0 时的行为)
|
||||
> - SWS_Pwm_00153(模块文档/标识)
|
||||
> - SWS_Pwm_00165(PowerStateRequestResultType 定义)
|
||||
> - SWS_Pwm_00197(Pwm_PowerStateType 定义 + PWM 通道属性配置)
|
||||
> - SWS_Pwm_10080/20080(DeInit 可配置 On/Off)
|
||||
> - SWS_Pwm_10082/20082(SetDutyCycle 可配置 On/Off)
|
||||
> - SWS_Pwm_10083/20083(SetPeriodAndDuty 可配置 On/Off)
|
||||
> - SWS_Pwm_10084/20084(SetOutputToIdle 可配置 On/Off)
|
||||
> - SWS_Pwm_10085/20085(GetOutputState 可配置 On/Off)
|
||||
> - SWS_Pwm_10086/20086/00119(SetOutputToIdle 后重新激活)
|
||||
> - SWS_Pwm_10112/20112(DisableNotification 可配置)
|
||||
> - SWS_Pwm_20002/30002/40002/50002(开发错误分类)
|
||||
> - SWS_Pwm_30051(GetOutputState 错误返回)
|
||||
>
|
||||
> *完整可追溯性表见原文 PDF(第 12-18 页)。*
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范(Functional specification)
|
||||
|
||||
### 7.1 一般行为(General behavior)
|
||||
|
||||
**[SWS_Pwm_00088]** ⌈PWM 模块除 Pwm_Init、Pwm_DeInit 和 Pwm_GetVersionInfo 外的所有函数应对不同 PWM 通道号可重入。
|
||||
|
||||
为保持模块实现的简单性,模块不应执行 SWS_Pwm_00088 的检查。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00089]** ⌈PWM 模块的用户应确保在运行时不同任务或 ISR 中对同一 PWM 通道进行多次函数调用时的完整性。⌋ ()
|
||||
|
||||
### 7.2 时间单位 Ticks(Time Unit Ticks)
|
||||
|
||||
#### 7.2.1 背景与原理(Background & Rationale)
|
||||
|
||||
要从寄存器值中获取时间,必须知道振荡器频率、预分频器等。由于这些设置是在 MCU 和/或其他模块中进行的,因此无法计算此类时间。
|
||||
|
||||
因此,时间与 ticks 之间的转换应属于上层。
|
||||
|
||||
#### 7.2.2 需求(Requirements)
|
||||
|
||||
**[SWS_Pwm_00070]** ⌈PWM 模块 API 服务中使用的所有时间单位应为 ticks 单位。⌋ (SRS_BSW_00343)
|
||||
|
||||
### 7.3 支持和管理 HW 低功耗状态(Support and management of HW low power states)
|
||||
|
||||
某些 PWM HW 模块允许被设置为某些降低功耗的操作模式,代价可能是较慢的反应时间、较低的性能或完全不可用。每个 PWM 模块可以支持一个或多个低功耗操作模式,将全功率模式视为始终存在并在启动时默认设置。
|
||||
|
||||
#### 7.3.1 背景(Background)
|
||||
|
||||
PWM 驱动提供电源状态控制 API 和后台处理机制来处理异步电源状态更改过程(即电源状态更改不会在请求时立即完成,而是需要一些更长的操作)。
|
||||
|
||||
#### 7.3.2 需求(Requirements)
|
||||
|
||||
> **摘要:** PWM 驱动实现以下电源状态管理 API:
|
||||
> - `Pwm_SetPowerState`:请求电源状态转换
|
||||
> - `Pwm_GetCurrentPowerState`:读取当前电源状态
|
||||
> - `Pwm_GetTargetPowerState`:读取目标电源状态
|
||||
> - `Pwm_PreparePowerState`:准备电源状态转换
|
||||
> - `Pwm_Main_PowerTransitionManager`:主电源转换管理函数(计划函数)
|
||||
>
|
||||
> 详细需求 SWS_Pwm_xxxxx 见原文 PDF(第 19-21 页)。
|
||||
|
||||
### 7.4 错误分类(Error classification)
|
||||
|
||||
#### 7.4.1 开发错误(Development Errors)
|
||||
|
||||
**[SWS_Pwm_20002]** ⌈开发错误类型:PWM_E_PARAM_CONFIG(API Pwm_Init 在已初始化的状态下调用时报告)。⌋ (SRS_BSW_00337, SRS_BSW_00385)
|
||||
|
||||
**[SWS_Pwm_30002]** ⌈开发错误类型:PWM_E_UNINIT(API 服务在 PWM 驱动未初始化时被调用时报告)。⌋ (SRS_BSW_00337, SRS_BSW_00385)
|
||||
|
||||
**[SWS_Pwm_40002]** ⌈开发错误类型:PWM_E_PARAM_CHANNEL(API 服务使用无效的通道 ID 调用时报告)。⌋ (SRS_BSW_00337, SRS_BSW_00385)
|
||||
|
||||
**[SWS_Pwm_50002]** ⌈开发错误类型:PWM_E_PARAM_POINTER(API Pwm_GetVersionInfo 使用 NULL 参数调用时报告)。⌋ (SRS_BSW_00337, SRS_BSW_00385)
|
||||
|
||||
**[SWS_Pwm_00045]** ⌈如果 Pwm_SetPeriodAndDuty 的输入参数 Period 等于零,则输出应为 0%(零占空比)。⌋ (SRS_BSW_00386, SRS_BSW_00323)
|
||||
|
||||
**[SWS_Pwm_00047]** ⌈Pwm 模块应验证 API 参数的可用性并报告相应的开发错误。⌋ (SRS_BSW_00323, SRS_BSW_00386)
|
||||
|
||||
#### 7.4.2 运行时错误(Runtime Errors)
|
||||
|
||||
**[SWS_Pwm_00117]** ⌈静态状态变量,表示 BSW 模块已初始化。⌋ (SRS_BSW_00406, SRS_BSW_00386, SRS_BSW_00323)
|
||||
|
||||
#### 7.4.3 瞬态故障(Transient Faults)
|
||||
|
||||
无。
|
||||
|
||||
#### 7.4.4 生产错误(Production Errors)
|
||||
|
||||
无。
|
||||
|
||||
### 7.5 错误检测(Error Detection)
|
||||
|
||||
**[SWS_Pwm_10051]** ⌈如果启用了开发错误检测,Pwm 模块应在以下情况下报告开发错误:
|
||||
- PWM_E_UNINIT:在调用任何 API 时 PWM 驱动未初始化
|
||||
- PWM_E_PARAM_CHANNEL:使用无效的通道 ID 调用 API
|
||||
- PWM_E_ALREADY_INITIALIZED:在 Pwm_Init 期间 PWM 驱动和硬件已初始化
|
||||
- PWM_E_PARAM_POINTER:使用 NULL 参数调用 Pwm_GetVersionInfo
|
||||
⌋ (SRS_BSW_00386, SRS_BSW_00323)
|
||||
|
||||
**[SWS_Pwm_20051]** ⌈如果启用了开发错误检测,开发错误的配置参数开关定义如下:
|
||||
- PWM_DE_INIT_API
|
||||
- PWM_SET_DUTY_CYCLE_API
|
||||
- PWM_SET_PERIOD_AND_DUTY_API
|
||||
- PWM_SET_OUTPUT_TO_IDLE_API
|
||||
- PWM_GET_OUTPUT_STATE_API
|
||||
- PWM_NOTIFICATION_SUPPORTED
|
||||
- PWM_VERSION_INFO_API
|
||||
⌋ (SRS_BSW_00386, SRS_BSW_00323)
|
||||
|
||||
### 7.6 错误通知(Error Notification)
|
||||
|
||||
有关详细信息,请参阅 SWS_BSWGeneral 中的第 7.2"错误分类"和 7.3"错误检测"章节。
|
||||
|
||||
### 7.7 占空比分辨率与缩放(Duty Cycle Resolution and scaling)
|
||||
|
||||
**[SWS_Pwm_00058]** ⌈占空比参数的宽度为 16 位。⌋ (SRS_Pwm_12383)
|
||||
|
||||
**[SWS_Pwm_00059]** ⌈Pwm 模块应遵循占空比的以下缩放方案:
|
||||
|
||||
- `0x0000` 表示 0%。
|
||||
- `0x8000` 表示 100%。0x8000 提供最高分辨率,同时允许使用 16 位值表示 100% 占空比。
|
||||
|
||||
作为实现指南,给出以下源代码示例:
|
||||
|
||||
```c
|
||||
AbsoluteDutyCycle = ((uint32)AbsolutePeriodTime * RelativeDutyCycle) >> 15;
|
||||
```
|
||||
|
||||
⌋ (SRS_Pwm_12459)
|
||||
|
||||
### 7.8 版本检查(Version check)
|
||||
|
||||
有关详细信息,请参阅 SWS_BSWGeneral 中的第 5.1.8"版本检查"章节。
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范(API specification)
|
||||
|
||||
### 8.1 导入类型(Imported types)
|
||||
|
||||
**[SWS_Pwm_00094]** ⌈
|
||||
|
||||
| 模块 | 头文件 | 导入类型 |
|
||||
|---|---|---|
|
||||
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
|
||||
|
||||
⌋ ()
|
||||
|
||||
### 8.2 类型定义(Type definitions)
|
||||
|
||||
#### 8.2.1 Pwm_ChannelType
|
||||
|
||||
**[SWS_Pwm_00106]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_ChannelType |
|
||||
| Type | uint |
|
||||
| Range | 8..32 位(实现特定) |
|
||||
| Description | PWM 通道的数字标识符。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.2 Pwm_PeriodType
|
||||
|
||||
**[SWS_Pwm_00107]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_PeriodType |
|
||||
| Type | uint |
|
||||
| Range | 8..32 位(实现特定) |
|
||||
| Description | PWM 通道的周期定义。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.3 Pwm_OutputStateType
|
||||
|
||||
**[SWS_Pwm_00108]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_OutputStateType |
|
||||
| Type | Enumeration |
|
||||
| Range | PWM_HIGH(PWM 通道处于高状态)<br>PWM_LOW(PWM 通道处于低状态) |
|
||||
| Description | PWM 通道的输出状态。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.4 Pwm_EdgeNotificationType
|
||||
|
||||
**[SWS_Pwm_00109]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_EdgeNotificationType |
|
||||
| Type | Enumeration |
|
||||
| Range | PWM_RISING_EDGE(PWM 输出信号发生上升沿时调用通知)<br>PWM_FALLING_EDGE(PWM 输出信号发生下降沿时调用通知)<br>PWM_BOTH_EDGES(PWM 输出信号发生上升沿或下降沿时调用通知) |
|
||||
| Description | PWM 通道边沿通知类型的定义。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.5 Pwm_ChannelClassType
|
||||
|
||||
**[SWS_Pwm_00110]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_ChannelClassType |
|
||||
| Type | Enumeration |
|
||||
| Range | PWM_VARIABLE_PERIOD(PWM 通道具有可变周期,可以更改占空比和周期)<br>PWM_FIXED_PERIOD(PWM 通道具有固定周期,仅可以更改占空比)<br>PWM_FIXED_PERIOD_SHIFTED(PWM 通道具有固定的移相周期,无法更改,仅当硬件支持时) |
|
||||
| Description | 定义 PWM 通道的类别。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.6 Pwm_ConfigType
|
||||
|
||||
**[SWS_Pwm_00111]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_ConfigType |
|
||||
| Type | Structure(硬件相关的初始化数据结构) |
|
||||
| Description | 包含 PWM 驱动初始化数据的数据结构类型。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00061]** ⌈Pwm_ConfigType 是包含 PWM 驱动初始化数据的数据结构类型。⌋ ()
|
||||
|
||||
#### 8.2.7 Pwm_PowerStateRequestResultType
|
||||
|
||||
**[SWS_Pwm_00165]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_PowerStateRequestResultType |
|
||||
| Type | Enumeration |
|
||||
| Range | PWM_SERVICE_ACCEPTED 0x00(电源状态更改已执行)<br>PWM_NOT_INIT 0x01(PWM 模块未初始化)<br>PWM_SEQUENCE_ERROR 0x02(错误的 API 调用序列)<br>PWM_HW_FAILURE 0x03(HW 模块有故障,无法进入所需的电源状态)<br>PWM_POWER_STATE_NOT_SUPP 0x04(PWM 模块不支持请求的电源状态)<br>PWM_TRANS_NOT_POSSIBLE 0x05(PWM 模块无法直接从当前电源状态转换到请求的电源状态,或者 HW 外设仍忙) |
|
||||
| Description | 与电源状态转换相关的请求结果。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
#### 8.2.8 Pwm_PowerStateType
|
||||
|
||||
**[SWS_Pwm_00197]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | Pwm_PowerStateType |
|
||||
| Type | Enumeration |
|
||||
| Range | 1..255(功耗递减的电源模式)<br>PWM_FULL_POWER 0x00 全功率 |
|
||||
| Description | 当前活动的电源状态或设置为目标电源状态。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ (SRS_Pwm_12293, SRS_Pwm_12378)
|
||||
|
||||
**强制参数:**
|
||||
- 已分配的 HW 通道
|
||||
- 周期的默认值
|
||||
- 占空比的默认值
|
||||
- 极性(高或低)
|
||||
- 空闲状态高或低
|
||||
- 通道类别:
|
||||
- 固定周期
|
||||
- 固定周期、移相(如果硬件支持)
|
||||
- 可变周期
|
||||
|
||||
**可选参数(如果硬件支持):**
|
||||
- 通道相位偏移
|
||||
- 相位偏移的参考通道
|
||||
- 微控制器特定通道属性
|
||||
|
||||
### 8.3 函数定义(Function definitions)
|
||||
|
||||
#### 8.3.1 Pwm_Init
|
||||
|
||||
**[SWS_Pwm_00095]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_Init |
|
||||
| Syntax | `void Pwm_Init(const Pwm_ConfigType* ConfigPtr)` |
|
||||
| Service ID[hex] | 0x00 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | ConfigPtr - 指向配置集的指针 |
|
||||
| Parameters (inout) | None |
|
||||
| Parameters (out) | None |
|
||||
| Return value | None |
|
||||
| Description | PWM 初始化服务。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00007]** ⌈Pwm_Init 函数应根据 ConfigPtr 中指定的参数初始化所有内部变量和微控制器的已使用 PWM 结构。⌋ (SRS_BSW_00101, SRS_SPAL_12057)
|
||||
|
||||
**[SWS_Pwm_00062]** ⌈Pwm_Init 函数应仅初始化已配置的资源,并且不应触及配置文件中未配置的资源。⌋ (SRS_SPAL_12057, SRS_SPAL_12125)
|
||||
|
||||
**[SWS_Pwm_10009]** ⌈Pwm_Init 函数应使用配置的默认值启动所有 PWM 通道。⌋ (SRS_SPAL_12057)
|
||||
|
||||
- **[SWS_Pwm_20009]** ⌈如果占空比参数等于 0% 或 100%:则 PWM 输出信号应处于根据配置的极性参数的状态。⌋ (SRS_SPAL_12057)
|
||||
- **[SWS_Pwm_30009]** ⌈如果占空比参数大于 0% 且小于 100%:则 PWM 输出信号应根据周期、占空比和配置的极性参数进行调制。⌋ (SRS_SPAL_12057)
|
||||
|
||||
**[SWS_Pwm_00052]** ⌈Pwm_Init 函数应禁用所有通知。⌋ (SRS_SPAL_12057)
|
||||
|
||||
**[SWS_Pwm_00093]** ⌈Pwm 模块的用户不应在运行操作期间调用 Pwm_Init 函数。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00116]** ⌈Pwm 模块的环境在调用 Pwm_Init 之前不应调用 Pwm 模块的任何函数。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00118]** ⌈如果启用了开发错误检测,在 PWM 驱动和硬件已初始化时调用 Pwm_Init 将导致开发错误 PWM_E_ALREADY_INITIALIZED。所需的功能应在不执行任何操作的情况下离开。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00121]** ⌈通过执行 Pwm_Init() 函数重新初始化 Pwm 驱动需要先通过执行 Pwm_DeInit() 进行反初始化。⌋ ()
|
||||
|
||||
#### 8.3.2 Pwm_DeInit
|
||||
|
||||
**[SWS_Pwm_00096]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_DeInit |
|
||||
| Syntax | `void Pwm_DeInit(void)` |
|
||||
| Service ID[hex] | 0x01 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Description | PWM 反初始化服务。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00010]** ⌈Pwm_DeInit 函数应反初始化 PWM 模块。⌋ (SRS_BSW_00336, SRS_SPAL_12163, SRS_Pwm_12381)
|
||||
|
||||
**[SWS_Pwm_00011]** ⌈Pwm_DeInit 函数应将 PWM 输出信号的状态设置为空闲状态。⌋ (SRS_SPAL_12163)
|
||||
|
||||
**[SWS_Pwm_00012]** ⌈Pwm_DeInit 函数应禁用 PWM 中断和 PWM 信号边沿通知。⌋ (SRS_SPAL_12163)
|
||||
|
||||
**[SWS_Pwm_10080]** ⌈Pwm_DeInit 函数应通过配置参数 PwmDeInitApi 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_20080]** ⌈Pwm_DeInit 函数应通过配置参数 PwmDeInitApi {PWM_DE_INIT_API} 进行 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
#### 8.3.3 Pwm_SetDutyCycle
|
||||
|
||||
**[SWS_Pwm_91000]** ⌈(draft)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_SetDutyCycle |
|
||||
| Syntax | `void Pwm_SetDutyCycle(Pwm_ChannelType ChannelNumber, uint16 DutyCycle)` |
|
||||
| Service ID[hex] | 0x02 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - PWM 的数字标识符<br>DutyCycle - Min=0x0000 Max=0x8000 |
|
||||
| Description | 服务设置 PWM 通道的占空比。 |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00013]** ⌈Pwm_SetDutyCycle 函数应设置 PWM 通道的占空比。⌋ (SRS_Pwm_12295)
|
||||
|
||||
**[SWS_Pwm_00014]** ⌈当请求的占空比为 0% 或 100% 时,Pwm_SetDutyCycle 函数应将 PWM 输出状态设置为 PWM_HIGH 或 PWM_LOW,同时考虑配置的极性参数和请求的占空比。因此对于 0% 请求的占空比,输出将是配置的极性参数的反相,对于 100% 占空比,输出将等于配置的极性参数。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00016]** ⌈当占空比 > 0% 且 < 100% 时,Pwm_SetDutyCycle 函数应根据周期、占空比和配置的极性参数调制 PWM 输出信号。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00017]** ⌈Pwm_SetDutyCycle 函数应在实现支持且通过 PwmDutycycleUpdatedEndperiod 配置的情况下始终在周期结束时更新占空比。⌋ (SRS_Pwm_12382)
|
||||
|
||||
**[SWS_Pwm_00018]** ⌈驱动应禁止 PWM 输出信号上的尖峰。⌋ ()
|
||||
|
||||
**[SWS_Pwm_10082]** ⌈Pwm_SetDutyCycle 函数应通过配置参数 PwmSetDutyCycle 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_20082]** ⌈Pwm_SetDutyCycle 函数应通过配置参数 PwmSetDutyCycle {PWM_SET_DUTY_CYCLE_API} 进行 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
#### 8.3.4 Pwm_SetPeriodAndDuty
|
||||
|
||||
**[SWS_Pwm_91001]** ⌈(draft)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_SetPeriodAndDuty |
|
||||
| Syntax | `void Pwm_SetPeriodAndDuty(Pwm_ChannelType ChannelNumber, Pwm_PeriodType Period, uint16 DutyCycle)` |
|
||||
| Service ID[hex] | 0x03 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - PWM 的数字标识符<br>Period - PWM 信号的周期<br>DutyCycle - Min=0x0000 Max=0x8000 |
|
||||
| Description | 服务设置 PWM 通道的周期和占空比。 |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00019]** ⌈Pwm_SetPeriodAndDuty 函数应设置 PWM 通道的周期和占空比。⌋ (SRS_Pwm_12297)
|
||||
|
||||
**[SWS_Pwm_00076]** ⌈Pwm_SetPeriodAndDuty 函数应在实现支持且通过 PwmPeriodUpdatedEndperiod 配置的情况下始终在当前周期结束时更新周期。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00020]** ⌈更新 PWM 周期和占空比时,驱动应抑制 PWM 输出信号上的任何尖峰。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00041]** ⌈Pwm_SetPeriodAndDuty 函数应仅允许更改被声明为可变周期类型的 PWM 通道的周期。⌋ (SRS_Pwm_12389)
|
||||
|
||||
**[SWS_Pwm_10083]** ⌈Pwm_SetPeriodAndDuty 函数应通过配置参数 PwmSetPeriodAndDuty 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_20083]** ⌈Pwm_SetPeriodAndDuty 函数应通过配置参数 PwmSetPeriodAndDuty {PWM_SET_PERIOD_AND_DUTY_API} 进行 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_00150]** ⌈如果周期设置为零,则占空比的设置不相关。在这种情况下,输出应为零(零占空比)。⌋ ()
|
||||
|
||||
#### 8.3.5 Pwm_SetOutputToIdle
|
||||
|
||||
**[SWS_Pwm_91002]** ⌈(draft)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_SetOutputToIdle |
|
||||
| Syntax | `void Pwm_SetOutputToIdle(Pwm_ChannelType ChannelNumber)` |
|
||||
| Service ID[hex] | 0x04 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - PWM 的数字标识符 |
|
||||
| Description | 服务将 PWM 输出设置为配置的空闲状态。 |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00021]** ⌈Pwm_SetOutputToIdle 函数应立即将 PWM 输出设置为配置的空闲状态。⌋ (SRS_Pwm_12358)
|
||||
|
||||
**[SWS_Pwm_10084]** ⌈Pwm_SetOutputToIdle 函数应通过配置参数 PwmSetOutputToIdle 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_20084]** ⌈Pwm_SetOutputToIdle 函数应通过配置参数 PwmSetOutputToIdle {PWM_SET_OUTPUT_TO_IDLE_API} 进行 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_10086]** ⌈调用 Pwm_SetOutputToIdle 函数后,可变周期类型的通道应使用 API Pwm_SetPeriodAndDuty() 重新激活,以使用新传入的周期激活 PWM 通道。⌋ ()
|
||||
|
||||
**[SWS_Pwm_20086]** ⌈调用 Pwm_SetOutputToIdle 函数后,通道应使用 API Pwm_SetDutyCycle() 重新激活,以使用旧周期激活 PWM 通道。⌋ ()
|
||||
|
||||
**[SWS_Pwm_00119]** ⌈调用 Pwm_SetOutputToIdle 函数后,固定周期类型的通道应仅使用 API Pwm_SetDutyCycle() 重新激活,以使用旧周期激活 PWM 通道。⌋ ()
|
||||
|
||||
#### 8.3.6 Pwm_GetOutputState
|
||||
|
||||
**[SWS_Pwm_00100]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_GetOutputState |
|
||||
| Syntax | `Pwm_OutputStateType Pwm_GetOutputState(Pwm_ChannelType ChannelNumber)` |
|
||||
| Service ID[hex] | 0x05 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - PWM 的数字标识符 |
|
||||
| Return value | PWM_HIGH(PWM 输出状态为高)<br>PWM_LOW(PWM 输出状态为低) |
|
||||
| Description | 服务读取 PWM 输出信号的内部状态。 |
|
||||
| Available via | Pwm.h |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00022]** ⌈Pwm_GetOutputState 函数应读取 PWM 输出信号的内部状态并按以下图所示返回:值从 PWM 单元读取,经过端口逻辑后作为端口引脚输出。⌋ (SRS_Pwm_12385)
|
||||
|
||||
**[SWS_Pwm_10085]** ⌈Pwm_GetOutputState 函数应通过配置参数 PwmGetOutputState 进行预编译时间 On/Off 配置。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_20085]** ⌈Pwm_GetOutputState 函数应通过配置参数 PwmGetOutputState {PWM_GET_OUTPUT_STATE_API} 进行 On/Off 配置。
|
||||
|
||||
由于实时约束和 PWM 通道的设置(项目相关),输出状态可以在调用服务 Pwm_GetOutputState 后立即修改。⌋ (SRS_BSW_00171)
|
||||
|
||||
**[SWS_Pwm_30051]** ⌈如果在模块初始化之前调用 Pwm_GetOutputState,或使用无效通道调用,则应返回 PWM_LOW。⌋ (SRS_BSW_00323, SRS_BSW_00386)
|
||||
|
||||
#### 8.3.7 Pwm_DisableNotification
|
||||
|
||||
**[SWS_Pwm_91003]** ⌈(draft)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_DisableNotification |
|
||||
| Syntax | `void Pwm_DisableNotification(Pwm_ChannelType ChannelNumber)` |
|
||||
| Service ID[hex] | 0x06 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Parameters (in) | ChannelNumber - PWM 的数字标识符 |
|
||||
| Description | 服务禁用 PWM 信号边沿通知。 |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00023]** ⌈Pwm_DisableNotification 函数应禁用 PWM 信号边沿通知。⌋ (SRS_Pwm_12378, SRS_Pwm_12299)
|
||||
|
||||
**[SWS_Pwm_10112]** ⌈Pwm_DisableNotification 函数应通过配置参数 PwmNotificationSupported 进行预编译时间 On/Off 配置。⌋ ()
|
||||
|
||||
**[SWS_Pwm_20112]** ⌈Pwm_DisableNotification 函数应通过配置参数 PwmNotificationSupported {PWM_NOTIFICATION_SUPPORTED} 进行 On/Off 配置。⌋ ()
|
||||
|
||||
#### 8.3.8 Pwm_EnableNotification
|
||||
|
||||
**[SWS_Pwm_91004]** ⌈(draft)
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_EnableNotification |
|
||||
| Syntax | `void Pwm_EnableNotification(Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification)` |
|
||||
| Service ID[hex] | 0x07 |
|
||||
| Sync/Async | Asynchronous |
|
||||
| Reentrancy | Reentrant for different channel numbers |
|
||||
| Description | 服务启用 PWM 信号边沿通知。 |
|
||||
|
||||
⌋ ()
|
||||
|
||||
**[SWS_Pwm_00024]** ⌈Pwm_EnableNotification 函数应启用 PWM 信号边沿通知。⌋ (SRS_Pwm_12378, SRS_Pwm_12299)
|
||||
|
||||
#### 8.3.9 - 8.3.13 电源状态管理与版本 API
|
||||
|
||||
> **摘要说明:** 以下 API 函数与电源状态管理和版本信息相关:
|
||||
>
|
||||
> | 函数 | 描述 |
|
||||
> |---|---|
|
||||
> | `Pwm_SetPowerState` | 请求电源状态转换,返回 Pwm_PowerStateRequestResultType |
|
||||
> | `Pwm_GetCurrentPowerState` | 读取当前电源状态 |
|
||||
> | `Pwm_GetTargetPowerState` | 读取目标电源状态 |
|
||||
> | `Pwm_PreparePowerState` | 准备电源状态转换(用于异步电源状态切换) |
|
||||
> | `Pwm_GetVersionInfo` | 返回驱动版本信息(通过 Std_VersionInfoType 指针) |
|
||||
>
|
||||
> 详细函数签名与需求见原文 PDF(第 38-42 页)。
|
||||
|
||||
### 8.4 回调通知(Callback notifications)
|
||||
|
||||
无。
|
||||
|
||||
### 8.5 计划函数(Scheduled functions)
|
||||
|
||||
#### 8.5.1 Pwm_Main_PowerTransitionManager
|
||||
|
||||
**[SWS_Pwm_00167]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | Pwm_Main_PowerTransitionManager |
|
||||
| Syntax | `void Pwm_Main_PowerTransitionManager(void)` |
|
||||
| Description | 计划函数,处理 PWM 模块的异步电源状态转换。 |
|
||||
|
||||
⌋ ()
|
||||
|
||||
### 8.6 预期接口(Expected Interfaces)
|
||||
|
||||
#### 8.6.1 强制接口(Mandatory Interfaces)
|
||||
|
||||
- `Dem_SetEventStatus`(来自 Dem)
|
||||
- `Det_ReportError`(来自 Det)
|
||||
|
||||
#### 8.6.2 可选接口(Optional Interfaces)
|
||||
|
||||
- `Pwm_GetVersionInfo`
|
||||
- `Pwm_GetOutputState`
|
||||
|
||||
#### 8.6.3 可配置接口(Configurable interfaces)
|
||||
|
||||
- `Pwm_DeInit`
|
||||
- `Pwm_SetDutyCycle`
|
||||
- `Pwm_SetPeriodAndDuty`
|
||||
- `Pwm_SetOutputToIdle`
|
||||
- `Pwm_DisableNotification`
|
||||
- `Pwm_EnableNotification`
|
||||
|
||||
### 8.7 API 参数检查(API parameter checking)
|
||||
|
||||
> **摘要说明:** API 参数检查的需求已通过 SWS_Pwm_10051、SWS_Pwm_20051 集中定义。这些开关通过配置参数(PWM_DE_INIT_API 等)控制开发错误检测的启用和禁用。详细的检查规则请参阅 7.5 错误检测和 8.3 函数定义部分。
|
||||
|
||||
---
|
||||
|
||||
## 9 序列图(Sequence diagrams)
|
||||
|
||||
> **摘要说明:** 本节包含以下序列图,描述了主要操作场景:
|
||||
>
|
||||
> 1. **初始化**(Pwm_Init 调用流程)
|
||||
> 2. **反初始化**(Pwm_DeInit 调用流程)
|
||||
> 3. **设置占空比**(Pwm_SetDutyCycle 调用流程)
|
||||
> 4. **设置周期和占空比**(Pwm_SetPeriodAndDuty 调用流程)
|
||||
> 5. **将 PWM 输出设置为空闲**(Pwm_SetOutputToIdle 调用流程)
|
||||
> 6. **获取 PWM 输出状态**(Pwm_GetOutputState 调用流程)
|
||||
> 7. **使用 PWM 通知**(启用/禁用通知流程)
|
||||
>
|
||||
> *完整序列图见原文 PDF(第 47-53 页)。*
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范(Configuration specification)
|
||||
|
||||
### 10.1 如何阅读本章(How to read this chapter)
|
||||
|
||||
容器和参数定义遵循 AUTOSAR 配置规范。
|
||||
|
||||
### 10.2 容器和配置参数(Containers and configuration parameters)
|
||||
|
||||
#### 10.2.1 Pwm
|
||||
|
||||
> Pwm 是顶层容器,包含所有 PWM 驱动配置。
|
||||
|
||||
#### 10.2.2 PwmGeneral
|
||||
|
||||
> **摘要:** PwmGeneral 包含全局 PWM 配置:
|
||||
> - `PwmChannelId` 配置类
|
||||
> - `PwmDeInitApi` - 启用/禁用 DeInit API
|
||||
> - `PwmSetDutyCycle` - 启用/禁用 SetDutyCycle API
|
||||
> - `PwmSetPeriodAndDuty` - 启用/禁用 SetPeriodAndDuty API
|
||||
> - `PwmSetOutputToIdle` - 启用/禁用 SetOutputToIdle API
|
||||
> - `PwmGetOutputState` - 启用/禁用 GetOutputState API
|
||||
> - `PwmNotificationSupported` - 启用/禁用通知
|
||||
> - `PwmVersionInfoApi` - 启用/禁用版本信息 API
|
||||
> - `PwmDutycycleUpdatedEndperiod` - 占空比周期结束更新
|
||||
> - `PwmPeriodUpdatedEndperiod` - 周期结束更新
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 54-58 页)。*
|
||||
|
||||
#### 10.2.3 PwmPowerStateConfig
|
||||
|
||||
> **摘要:** PwmPowerStateConfig 包含电源状态相关配置:
|
||||
> - `PwmPowerStateAsynchTransitionMode` - 异步电源状态转换模式
|
||||
> - `PwmPowerStateConfigSet` - 电源状态配置集
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 58-59 页)。*
|
||||
|
||||
#### 10.2.4 PwmChannel
|
||||
|
||||
> **摘要:** PwmChannel 包含每个 PWM 通道的配置:
|
||||
> - `PwmChannelId` - 通道 ID
|
||||
> - `PwmChannelClass` - 通道类别(Variable Period、Fixed Period、Fixed Period Shifted)
|
||||
> - `PwmPolarity` - 极性
|
||||
> - `PwmIdleState` - 空闲状态
|
||||
> - `PwmPeriodDefault` - 默认周期
|
||||
> - `PwmDutycycleDefault` - 默认占空比
|
||||
> - `PwmNotification` - 通知配置
|
||||
> - `PwmHwChannel` - 已分配的 HW 通道
|
||||
> - `PwmChannelPhaseShift` - 通道相位偏移(可选)
|
||||
> - `PwmReferenceChannel` - 相位偏移参考通道(可选)
|
||||
> - `PwmMcuClockReferencePoint` - MCU 时钟参考点
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 59-62 页)。*
|
||||
|
||||
#### 10.2.5 PwmChannelConfigSet
|
||||
|
||||
PwmChannelConfigSet 容器包含一组 PwmChannel 配置。
|
||||
|
||||
#### 10.2.6 PwmConfigurationOfOptApiServices
|
||||
|
||||
> **摘要:** 包含每个可选 API 的配置:
|
||||
> - `PwmSetDutyCycle`
|
||||
> - `PwmSetPeriodAndDuty`
|
||||
> - `PwmSetOutputToIdle`
|
||||
> - `PwmGetOutputState`
|
||||
> - `PwmNotificationSupported`
|
||||
> - `PwmVersionInfo`
|
||||
> - `PwmDeInitApi`
|
||||
>
|
||||
> *完整参数定义见原文 PDF(第 62-64 页)。*
|
||||
|
||||
### 10.3 发布信息(Published Information)
|
||||
|
||||
> **摘要说明:** 发布信息参数定义了由 PWM 驱动模块发布给其他模块的信息,例如版本号、供应商 ID 等。
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用需求(Not applicable requirements)
|
||||
|
||||
> **摘要说明:** 本节列出了不适用于 PWM 驱动的需求,包括:
|
||||
> - 与特定 BSW 通用规范条目相关的限制
|
||||
> - 多核分发相关需求的适用性说明
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
本文档为 AUTOSAR 4.4.0 版本 PWM 驱动软件规范的中文翻译。保留了所有需求 ID(SWS_Pwm_xxxxx)、参考标识符及模块缩写。原始文档共 65 页,本翻译涵盖了全部主要章节,并对大型可追溯性表、序列图和详细配置参数表采用了"重点翻译+摘要"策略,标注"完整表见原文 PDF"的位置以便用户查阅原文。
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user