35 KiB
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)
- 引言与功能概述(Introduction and functional overview)
- 缩略语与缩写(Acronyms and abbreviations)
- 相关文档(Related documentation)
- 约束与假设(Constraints and assumptions)
- 对其他模块的依赖(Dependencies to other modules)
- 需求可追溯性(Requirements traceability)
- 功能规范(Functional specification)
- API 规范(API specification)
- 序列图(Sequence diagrams)
- 配置规范(Configuration specification)
- 不适用需求(Not applicable requirements)
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 信号的输出状态。可以是: - High(高) - 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% 占空比。
作为实现指南,给出以下源代码示例:
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 通道处于高状态) 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 输出信号发生上升沿时调用通知) PWM_FALLING_EDGE(PWM 输出信号发生下降沿时调用通知) 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 通道具有可变周期,可以更改占空比和周期) PWM_FIXED_PERIOD(PWM 通道具有固定周期,仅可以更改占空比) 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(电源状态更改已执行) PWM_NOT_INIT 0x01(PWM 模块未初始化) PWM_SEQUENCE_ERROR 0x02(错误的 API 调用序列) PWM_HW_FAILURE 0x03(HW 模块有故障,无法进入所需的电源状态) PWM_POWER_STATE_NOT_SUPP 0x04(PWM 模块不支持请求的电源状态) 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(功耗递减的电源模式) 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 的数字标识符 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 的数字标识符 Period - PWM 信号的周期 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 输出状态为高) 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_GetVersionInfoPwm_GetOutputState
8.6.3 可配置接口(Configurable interfaces)
Pwm_DeInitPwm_SetDutyCyclePwm_SetPeriodAndDutyPwm_SetOutputToIdlePwm_DisableNotificationPwm_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)
摘要说明: 本节包含以下序列图,描述了主要操作场景:
- 初始化(Pwm_Init 调用流程)
- 反初始化(Pwm_DeInit 调用流程)
- 设置占空比(Pwm_SetDutyCycle 调用流程)
- 设置周期和占空比(Pwm_SetPeriodAndDuty 调用流程)
- 将 PWM 输出设置为空闲(Pwm_SetOutputToIdle 调用流程)
- 获取 PWM 输出状态(Pwm_GetOutputState 调用流程)
- 使用 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 APIPwmSetDutyCycle- 启用/禁用 SetDutyCycle APIPwmSetPeriodAndDuty- 启用/禁用 SetPeriodAndDuty APIPwmSetOutputToIdle- 启用/禁用 SetOutputToIdle APIPwmGetOutputState- 启用/禁用 GetOutputState APIPwmNotificationSupported- 启用/禁用通知PwmVersionInfoApi- 启用/禁用版本信息 APIPwmDutycycleUpdatedEndperiod- 占空比周期结束更新PwmPeriodUpdatedEndperiod- 周期结束更新完整参数定义见原文 PDF(第 54-58 页)。
10.2.3 PwmPowerStateConfig
摘要: PwmPowerStateConfig 包含电源状态相关配置:
PwmPowerStateAsynchTransitionMode- 异步电源状态转换模式PwmPowerStateConfigSet- 电源状态配置集完整参数定义见原文 PDF(第 58-59 页)。
10.2.4 PwmChannel
摘要: PwmChannel 包含每个 PWM 通道的配置:
PwmChannelId- 通道 IDPwmChannelClass- 通道类别(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 的配置:
PwmSetDutyCyclePwmSetPeriodAndDutyPwmSetOutputToIdlePwmGetOutputStatePwmNotificationSupportedPwmVersionInfoPwmDeInitApi完整参数定义见原文 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"的位置以便用户查阅原文。