P2 batch translation: 49 PDFs (Memory + Safety + Crypto + ModeManagement + IO)

This commit is contained in:
opencode-translator
2026-06-13 10:04:28 +08:00
parent 6f293acbf7
commit 784f11ab73
50 changed files with 36262 additions and 57 deletions
+837
View File
@@ -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 模块生成具有可变脉冲宽度的脉冲。它允许选择占空比和信号周期时间。
**图 1PWM 信号描述**
---
## 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_00007Init 函数)← SRS_BSW_00101, SRS_SPAL_12057
> - SWS_Pwm_00010DeInit 函数)← SRS_BSW_00336, SRS_SPAL_12163, SRS_Pwm_12381
> - SWS_Pwm_00013SetDutyCycle 函数)← SRS_Pwm_12295
> - SWS_Pwm_00019SetPeriodAndDuty 函数)← SRS_Pwm_12297
> - SWS_Pwm_00021SetOutputToIdle)← SRS_Pwm_12358
> - SWS_Pwm_00022GetOutputState)← SRS_Pwm_12385
> - SWS_Pwm_00023/00024Disable/EnableNotification)← SRS_Pwm_12378, SRS_Pwm_12299
> - SWS_Pwm_00041(仅允许 variable period 类型的通道更改周期)← SRS_Pwm_12389
> - SWS_Pwm_0005816 位占空比宽度)← SRS_Pwm_12383
> - SWS_Pwm_00059(占空比缩放方案)← SRS_Pwm_12459
> - SWS_Pwm_00070(时间单位为 ticks)← SRS_BSW_00343
> - SWS_Pwm_00093、00116、00118、00121Init 时序约束与错误检测)
> - SWS_Pwm_00117、00047、10051、20051API 参数验证)
> - SWS_Pwm_00150(周期为 0 时的行为)
> - SWS_Pwm_00153(模块文档/标识)
> - SWS_Pwm_00165PowerStateRequestResultType 定义)
> - SWS_Pwm_00197Pwm_PowerStateType 定义 + PWM 通道属性配置)
> - SWS_Pwm_10080/20080DeInit 可配置 On/Off
> - SWS_Pwm_10082/20082SetDutyCycle 可配置 On/Off
> - SWS_Pwm_10083/20083SetPeriodAndDuty 可配置 On/Off
> - SWS_Pwm_10084/20084SetOutputToIdle 可配置 On/Off
> - SWS_Pwm_10085/20085GetOutputState 可配置 On/Off
> - SWS_Pwm_10086/20086/00119SetOutputToIdle 后重新激活)
> - SWS_Pwm_10112/20112DisableNotification 可配置)
> - SWS_Pwm_20002/30002/40002/50002(开发错误分类)
> - SWS_Pwm_30051GetOutputState 错误返回)
>
> *完整可追溯性表见原文 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 时间单位 TicksTime 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_CONFIGAPI 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_CHANNELAPI 服务使用无效的通道 ID 调用时报告)。⌋ (SRS_BSW_00337, SRS_BSW_00385)
**[SWS_Pwm_50002]** ⌈开发错误类型:PWM_E_PARAM_POINTERAPI 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_HIGHPWM 通道处于高状态)<br>PWM_LOWPWM 通道处于低状态) |
| Description | PWM 通道的输出状态。 |
| Available via | Pwm.h |
⌋ ()
#### 8.2.4 Pwm_EdgeNotificationType
**[SWS_Pwm_00109]** ⌈
| 字段 | 内容 |
|---|---|
| Name | Pwm_EdgeNotificationType |
| Type | Enumeration |
| Range | PWM_RISING_EDGEPWM 输出信号发生上升沿时调用通知)<br>PWM_FALLING_EDGEPWM 输出信号发生下降沿时调用通知)<br>PWM_BOTH_EDGESPWM 输出信号发生上升沿或下降沿时调用通知) |
| Description | PWM 通道边沿通知类型的定义。 |
| Available via | Pwm.h |
⌋ ()
#### 8.2.5 Pwm_ChannelClassType
**[SWS_Pwm_00110]** ⌈
| 字段 | 内容 |
|---|---|
| Name | Pwm_ChannelClassType |
| Type | Enumeration |
| Range | PWM_VARIABLE_PERIODPWM 通道具有可变周期,可以更改占空比和周期)<br>PWM_FIXED_PERIODPWM 通道具有固定周期,仅可以更改占空比)<br>PWM_FIXED_PERIOD_SHIFTEDPWM 通道具有固定的移相周期,无法更改,仅当硬件支持时) |
| 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 0x01PWM 模块未初始化)<br>PWM_SEQUENCE_ERROR 0x02(错误的 API 调用序列)<br>PWM_HW_FAILURE 0x03HW 模块有故障,无法进入所需的电源状态)<br>PWM_POWER_STATE_NOT_SUPP 0x04PWM 模块不支持请求的电源状态)<br>PWM_TRANS_NOT_POSSIBLE 0x05PWM 模块无法直接从当前电源状态转换到请求的电源状态,或者 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_HIGHPWM 输出状态为高)<br>PWM_LOWPWM 输出状态为低) |
| 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"的位置以便用户查阅原文。