跳转至

Pwm

1. 简介和功能概述

本规范规定了AUTOSAR基础软件模块PWM驱动程序的功能、API和配置。

每个PWM通道都链接到属于微控制器的硬件PWM。PWM信号的类型(例如中心对齐、左对齐等)不在本规范中定义,而是留给实现决定。

该驱动程序提供初始化和控制微控制器内部PWM级(脉冲宽度调制)的函数。PWM模块生成具有可变脉冲宽度的脉冲。它允许选择占空比和信号周期时间。

Figure1

2. 缩略语和缩写

AUTOSAR术语表中未包含的局部作用域的缩略语和缩写,必须出现在局部术语表中。

缩略语:

缩略语 描述
PWM Channel 链接到硬件PWM的数字标识符。
PWM Output State 定义PWM信号的输出状态。可以是:高、低。
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. 相关文档

3.1. 输入文件

[1] Layered Software Architecture AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf

[2] General Requirements on SPAL AUTOSAR_CP_SRS_SPALGeneral.pdf

[3] General Requirements on Basic Software Modules AUTOSAR_CP_SRS_BSWGeneral.pdf

[4] Specification of Default Error Tracer AUTOSAR_CP_SWS_DefaultErrorTracer.pdf

[5] Specification of MCU Driver AUTOSAR_CP_SWS_MCUDriver.pdf

[6] Specification of ECU Configuration AUTOSAR_CP_TPS_ECUConfiguration.pdf

[7] Basic Software Module Description Template AUTOSAR_CP_TPS_BSWModuleDescriptionTemplate.pdf

[8] List of Basic Software Modules AUTOSAR_CP_TR_BSWModuleList

[9] General Specification of Basic Software Modules AUTOSAR_CP_SWS_BSWGeneral.pdf

3.2. 相关规范

AUTOSAR提供了基础软件模块通用规范[9](SWS BSW General),该规范同样适用于PWM驱动程序。

因此,SWS BSW General规范应被视为PWM驱动程序的附加必需规范。

4. 约束和假设

4.1. 限制

[SWS_Pwm_00001] Pwm SWS不涵盖在通用I/O上模拟PWM。

电源状态控制API只有在MCAL驱动程序拥有完整的底层HW外设(即该HW外设不被其他MCAL模块访问)时才能实现。

4.2. 对汽车域的适用性

无限制。

5. 对其他模块的依赖

PWM依赖于系统时钟。因此,系统时钟的更改(例如PLL开→PLL关)也会影响PWM硬件的时钟设置。

PWM驱动程序依赖于以下模块:

  • PORT驱动程序:设置端口引脚功能。
  • MCU驱动程序:设置预分频器、系统时钟和PLL。
  • DET:开发模式下的默认错误跟踪器。

文档087_AUTOSAR_ECU_Configuration包含第 4.6 章——时钟树配置,其中详细描述了向外设传递参考时钟信号的机制。

5.1. 文件结构

5.1.1. 代码文件结构

[SWS_Pwm_00065] Pwm SWS不应定义代码文件结构。

5.1.2. 头文件结构

[SWS_Pwm_50075] Pwm.c应包含Pwm.h、Det.h和。

[SWS_Pwm_70075] Pwm_Irq.c应包含Pwm.h。

6. 需求可追溯性

需求 描述 满足项
SRS_BSW_00101 基础软件模块应能够在单独的初始化函数中初始化变量和硬件 SWS_Pwm_00007
SRS_BSW_00171 ECU中不需要的基础SW组件的可选功能应在预编译时可配置 SWS_Pwm_10080, SWS_Pwm_10082, SWS_Pwm_10083, SWS_Pwm_10084, SWS_Pwm_10085, SWS_Pwm_20080, SWS_Pwm_20082, SWS_Pwm_20083, SWS_Pwm_20084, SWS_Pwm_20085
SRS_BSW_00314 所有内部驱动模块应将中断帧定义与服务例程分离 SWS_Pwm_00065
SRS_BSW_00323 所有AUTOSAR基础软件模块应检查传入的API参数的有效性 SWS_Pwm_00045, SWS_Pwm_00047, SWS_Pwm_00117, SWS_Pwm_10051, SWS_Pwm_20051, SWS_Pwm_30051
SRS_BSW_00336 基础SW模块应能够关闭 SWS_Pwm_00010
SRS_BSW_00337 开发错误分类 SWS_Pwm_20002, SWS_Pwm_30002, SWS_Pwm_40002, SWS_Pwm_50002
SRS_BSW_00343 基础SW模块的规范和配置时间单位最好采用物理时间单位 SWS_Pwm_00070
SRS_BSW_00346 所有AUTOSAR基础软件模块应至少提供一组基本模块文件 SWS_Pwm_00065
SRS_BSW_00385 列出可能的错误通知 SWS_Pwm_20002, SWS_Pwm_30002, SWS_Pwm_40002, SWS_Pwm_50002
SRS_BSW_00386 BSW应规定检测错误的配置和条件 SWS_Pwm_00045, SWS_Pwm_00047, SWS_Pwm_00117, SWS_Pwm_10051, SWS_Pwm_20002, SWS_Pwm_20051, SWS_Pwm_30002, SWS_Pwm_30051, SWS_Pwm_40002, SWS_Pwm_50002
SRS_BSW_00406 表示BSW模块是否已初始化的静态状态变量,在调用该BSW模块的任何API之前应以值 0 初始化 SWS_Pwm_00117
SRS_Pwm_12293 PWM驱动程序应允许PWM通道属性的静态配置 SWS_Pwm_00197
SRS_Pwm_12295 PWM驱动程序应提供设置所选通道占空比的服务 SWS_Pwm_00013
SRS_Pwm_12297 PWM驱动程序应提供设置所选通道周期的服务 SWS_Pwm_00019
SRS_Pwm_12299 PWM驱动程序应允许在运行时启用/禁用PWM边沿通知 SWS_Pwm_00023, SWS_Pwm_00024
SRS_Pwm_12358 PWM驱动程序应能够立即将所选通道的输出设置为给定状态 SWS_Pwm_00021
SRS_Pwm_12378 PWM驱动程序应能够为PWM信号的每个边沿分配通知 SWS_Pwm_00023, SWS_Pwm_00024, SWS_Pwm_00197
SRS_Pwm_12381 通过对PWM驱动程序去初始化,应停止所有PWM通道 SWS_Pwm_00010
SRS_Pwm_12382 PWM驱动程序应等待信号周期结束以更新PWM信号的占空比 SWS_Pwm_00017
SRS_Pwm_12383 PWM驱动程序应提供 16 位接口来设置占空比 SWS_Pwm_00058
SRS_Pwm_12385 PWM驱动程序应提供获取PWM通道输出状态的服务 SWS_Pwm_00022
SRS_Pwm_12386 PWM驱动程序不应涵盖在通用I/O上的PWM模拟 SWS_Pwm_00001
SRS_Pwm_12389 PWM驱动程序应只允许某些PWM通道频率的静态配置 SWS_Pwm_00041
SRS_Pwm_12459 PWM驱动程序应提供占空比的缩放方案 SWS_Pwm_00059
SRS_SPAL_00157 AUTOSAR基础软件的所有驱动和处理程序应实现驱动和处理程序的通知机制 SWS_Pwm_00025
SRS_SPAL_12057 所有驱动模块应实现初始化接口 SWS_Pwm_00007, SWS_Pwm_00052, SWS_Pwm_00062, SWS_Pwm_10009, SWS_Pwm_20009, SWS_Pwm_30009
SRS_SPAL_12125 所有驱动模块应仅初始化已配置的资源 SWS_Pwm_00062
SRS_SPAL_12129 ISR应负责复位中断标志并调用相应的通知函数 SWS_Pwm_00026
SRS_SPAL_12163 所有驱动模块应实现去初始化接口 SWS_Pwm_00010, SWS_Pwm_00011, SWS_Pwm_00012

7. 功能规格

7.1. 一般行为

[SWS_Pwm_00088] PWM模块的所有函数(除Pwm_Init、Pwm_DeInit和Pwm_GetVersionInfo外)对于不同的PWM通道编号应是可重入的。

为了保持简单的模块实现,模块不必执行对SWS_Pwm_00088的检查。

[SWS_Pwm_00089] 如果在运行时不同的任务或ISR中对同一PWM通道进行多次函数调用,Pwm模块的用户应确保完整性。

7.2. 时间单位 Ticks

7.2.1. 背景与原理

为了从寄存器值中获得时间,有必要知道振荡器频率、预分频器等。由于这些设置是在MCU和/或其他模块中进行的,因此无法计算此类时间。

因此,时间与ticks之间的转换应是上层的一部分。

7.2.2. 需求

[SWS_Pwm_00070] PWM模块的API服务中使用的所有时间单位都应是ticks单位。

7.3. 硬件低功耗状态的支持和管理

某些PWM HW模块允许被设置为某些可降低功耗的运行模式,代价可能是更慢的反应时间、更低的性能或完全不可用。每个PWM模块可以支持一种或多种低功耗运行模式,其中全功率模式始终存在并在启动时默认设置。

7.3.1. 背景

PWM驱动程序提供电源状态控制API和后台处理机制,以处理异步电源状态更改过程(即请求后不会立即完成、而需要一些较长操作的电源状态更改)。

假设源自ECU和SW架构的所有约束已由上层(应用程序、服务层中的模式管理、处理外设控制的IoHwAbstraction组件)满足,因此控制范围仅限于PWM HW外设。

PWM驱动程序执行对操作序列的检查,以避免在先前的请求仍在处理中时请求不同的电源状态,或在未请求相同准备的情况下激活电源状态。

PWM模块应将电源控制能力作为可选功能支持。本模块既不强制只使用启用了电源控制的MCU,也不强制配置相同的MCU。相反,它在供应商支持的情况下提出了一种处理电源状态的方法。

7.3.2. 需求

[SWS_Pwm_00154] 当相应的配置参数PwmLowPowerStatesSupport设置为TRUE时,PwmDriver应支持电源状态更改及其API。

[SWS_Pwm_00155] 如果参数PwmLowPowerStatesSupport启用,则应生成API Pwm_PreparePowerState、Pwm_SetPowerState、Pwm_GetCurrentPowerState、Pwm_GetTargetPowerState,并应使用它们来管理和获取电源状态转换的信息。

[SWS_Pwm_00156] API Pwm_GetTargetPowerState和Pwm_GetCurrentPowerState应分别用于收集请求的Pwm电源状态和目标Pwm电源状态的信息。

[SWS_Pwm_00157] API Pwm_PreparePowerState应用于启动电源状态转换。

[SWS_Pwm_00158] 在通过([SWS_Pwm_00157])完成电源状态的准备后,应使用API Pwm_SetPowerState来达到Pwm模块请求的电源状态。

为了避免不一致的电源状态条件,某些API(Pwm_SetPowerState、Pwm_PreparePowerState)必须以给定的顺序调用,否则将存储错误(如果启用了DET跟踪)并中断动作。Pwm驱动程序跟踪调用序列。

[SWS_Pwm_00159] Pwm驱动程序应跟踪API Pwm_SetPowerState和Pwm_PreparePowerState的调用顺序。如果在调用第二个API之前调用了第一个API,应存储DET条目且不执行该动作。

[SWS_Pwm_00160] 如果参数PwmLowPowerStatesSupport设置为TRUE,Pwm模块应跟踪当前和目标电源状态。

[SWS_Pwm_00161] 如果PwmLowPowerStatesSupport设置为TRUE,初始化后模块的电源状态应始终为FULL POWER。

[SWS_Pwm_00162] Pwm驱动程序应支持同步和异步电源状态转换,具体取决于配置参数PwmPowerStateAsynchTransitionMode的值。

[SWS_Pwm_00163] 如果配置参数PwmPowerStateAsynchTransitionMode设置为FALSE,准备过程和设置过程应在相应API返回时即视为完成。

[SWS_Pwm_00164] 如果配置参数PwmPowerStateAsynchTransitionMode设置为TRUE,准备过程应在相应API返回后在后台继续,并通过配置的回调通知其完成。

7.4. 占空比分辨率和缩放

[SWS_Pwm_00058] 占空比参数的宽度为 16 位。

[SWS_Pwm_00059] Pwm模块应对占空比遵循以下缩放方案:

  • 0x0000 表示 0%。
  • 0x8000 表示 100%。0x8000 在允许用 16 位值表示 100% 占空比的同时提供最高分辨率。

作为实现指南,给出以下源代码示例:

AbsoluteDutyCycle = ((uint32)AbsolutePeriodTime * RelativeDutyCycle) >> 15;

7.5. 版本检查

详情请参阅SWS_BSWGeneral中第 5.1.8 章"Version Check"。

7.6. 错误分类

7.6.1. 开发错误

[SWS_Pwm_00201]

错误类型 相关错误代码 错误值
API Pwm_Init服务以错误参数调用 PWM_E_INIT_FAILED 0x10
未经模块初始化使用API服务 PWM_E_UNINIT 0x11
使用无效的通道标识符的API服务 PWM_E_PARAM_CHANNEL 0x12
在配置为固定周期的PWM通道上使用未授权的PWM服务 PWM_E_PERIOD_UNCHANGEABLE 0x13
在PWM驱动程序已初始化时调用API Pwm_Init服务 PWM_E_ALREADY_INITIALIZED 0x14
API Pwm_GetVersionInfo以NULL参数调用。 PWM_E_PARAM_POINTER 0x15
PWM模块不支持请求的电源状态。 PWM_E_POWER_STATE_NOT_SUPPORTED 0x17
从当前电源状态无法到达请求的电源状态 PWM_E_TRANSITION_NOT_POSSIBLE 0x18
调用API Pwm_SetPowerState之前未调用API Pwm_PreparePowerState。 PWM_E_PERIPHERAL_NOT_PREPARED 0x19

[SWS_Pwm_20002] 当API服务未经模块初始化而使用时,PWM驱动程序模块应报告开发错误"PWM_E_UNINIT (0x11)"。

[SWS_Pwm_30002] 当API服务使用无效的通道标识符时,PWM驱动程序模块应报告开发错误"PWM_E_PARAM_CHANNEL (0x12)"。

[SWS_Pwm_40002] 在配置为固定周期的PWM通道上使用未授权的PWM服务时,PWM驱动程序模块应报告开发错误"PWM_E_PERIOD_UNCHANGEABLE (0x13)"。

[SWS_Pwm_50002] 当API Pwm_Init服务在PWM驱动程序已初始化时被调用,PWM驱动程序模块应报告开发错误"PWM_E_ALREADY_INITIALIZED(0x14)"。

[SWS_Pwm_00174] 如果此API以不支持的电源状态调用,或外设完全不支持低功耗状态,API应报告开发错误PWM_E_POWER_STATE_NOT_SUPPORTED。

[SWS_Pwm_00175] 如果无法从当前电源状态直接到达请求的电源状态,API应报告开发错误PWM_E_TRANSITION_NOT_POSSIBLE。

[SWS_Pwm_00176] 如果HW单元先前未通过使用API Pwm_PreparePowerState()为目标电源状态做准备,API应报告开发错误PWM_E_PERIPHERAL_NOT_PREPARED。

有关错误检测的更多详情,请参阅API参数检查一章。

7.6.2. 运行时错误

[SWS_Pwm_00202]

错误类型 相关错误代码 错误值
在PWM模块仍在使用时调用API Pwm_SetPowerState。 PWM_E_NOT_DISENGAGED 0x16

[SWS_Pwm_00200] 当调用此API时一个或多个HW通道(如适用)处于不同于IDLE(或类似非运行状态)的状态,和/或仍有为HW模块通道注册的通知,API应报告运行时错误PWM_E_NOT_DISENGAGED。

7.6.3. 瞬态故障

没有瞬态故障。

7.6.4. 生产错误

没有生产错误。

7.6.5. 扩展生产错误

没有扩展生产错误。

8. API规范

8.1. 导入的类型

本章列出了从其他模块包含的所有类型。

[SWS_Pwm_00094]

模块 头文件 导入的类型
Std Std_Types.h Std_ReturnType
Std_Types.h Std_VersionInfoType

8.2. 类型定义

8.2.1. Pwm_ChannelType

[SWS_Pwm_00106]

名称 Pwm_ChannelType
类型 Type
派生自 uint
范围 8..32 位 —— 这是实现特定的,但并非所有值在该类型内都有效。应选择此类型以在特定微控制器平台上具有最高效的实现。
描述 PWM通道的数字标识符。可通过Pwm.h获得

8.2.2. Pwm_PeriodType

[SWS_Pwm_00107]

名称 Pwm_PeriodType
类型 Type
派生自 uint
范围 8..32 位 —— 实现特定。应选择此类型以在特定微控制器平台上具有最高效的实现。
描述 PWM通道周期的定义。可通过Pwm.h获得

8.2.3. Pwm_OutputStateType

[SWS_Pwm_00108]

名称 Pwm_OutputStateType
类型 Enumeration
范围 PWM_HIGH 0x00:PWM通道处于高状态。PWM_LOW 0x01:PWM通道处于低状态。
描述 PWM通道的输出状态。可通过Pwm.h获得

8.2.4. Pwm_EdgeNotificationType

[SWS_Pwm_00109]

名称 Pwm_EdgeNotificationType
类型 Enumeration
范围 PWM_RISING_EDGE 0x00:PWM输出信号出现上升沿时将调用通知。PWM_FALLING_EDGE 0x01:PWM输出信号出现下降沿时将调用通知。PWM_BOTH_EDGES 0x02:PWM输出信号出现上升沿或下降沿时将调用通知。
描述 PWM通道边沿通知类型的定义。可通过Pwm.h获得

8.2.5. Pwm_ChannelClassType

[SWS_Pwm_00110]

名称 Pwm_ChannelClassType
类型 Enumeration
范围 PWM_VARIABLE_PERIOD 0x00:PWM通道具有可变周期。占空比和周期都可以更改。PWM_FIXED_PERIOD 0x01:PWM通道具有固定周期。只能更改占空比。PWM_FIXED_PERIOD_SHIFTED 0x02:PWM通道具有固定的移位周期。无法更改(仅当硬件支持时)。
描述 定义PWM通道的类。可通过Pwm.h获得

8.2.6. Pwm_ConfigType

[SWS_Pwm_00111]

名称 Pwm_ConfigType
类型 Structure
元素 硬件相关结构。
类型 --
注释 初始化数据结构的内容是硬件特定的。
描述 这是包含PWM驱动程序初始化数据的数据结构类型。可通过Pwm.h获得

8.2.7. Pwm_PowerStateRequestResultType

[SWS_Pwm_00165]

名称 Pwm_PowerStateRequestResultType
类型 Enumeration
范围 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外设仍忙。
描述 与电源状态转换相关的请求的结果。可通过Pwm.h获得

8.2.8. Pwm_PowerStateType

[SWS_Pwm_00197]

名称 Pwm_PowerStateType
类型 Enumeration
范围 1..255 —— 功耗递减的电源模式。PWM_FULL_POWER 0x00:全功率。
描述 当前激活或设置为目标电源状态的电源状态。可通过Pwm.h获得

强制参数:

  • 分配的HW通道
  • 周期的默认值
  • 占空比的默认值
  • 极性(高或低)
  • 空闲状态高或低
  • 通道类:
  • 固定周期
  • 固定周期、移位(如果硬件支持)
  • 可变周期

可选参数(如果硬件支持):

  • 通道相移
  • 相移的参考通道
  • 微控制器特定的通道属性

8.3. 函数定义

8.3.1. Pwm_Init

[SWS_Pwm_00095]

服务名称 Pwm_Init
语法 void Pwm_Init (const Pwm_ConfigType* ConfigPtr)
服务 ID [十六进制] 0x00
同步/异步 同步
可重入性 不可重入
参数(in) ConfigPtr:指向配置集的指针
参数(inout) 无
参数(out) 无
返回值 无
描述 PWM初始化服务。可通过Pwm.h获得
void Pwm_Init ( const Pwm_ConfigType* ConfigPtr )

[SWS_Pwm_00007] 函数Pwm_Init应根据ConfigPtr中指定的参数初始化所有内部变量和所使用的微控制器PWM结构。

[SWS_Pwm_00062] 函数Pwm_Init应只初始化已配置的资源,不应触及配置文件中未配置的资源。

[SWS_Pwm_10009] 函数Pwm_Init应以配置的默认值启动所有PWM通道。

如果占空比参数等于:

  • [SWS_Pwm_20009] 0% 或 100%:则PWM输出信号应处于与配置的极性参数相对应的状态。
  • [SWS_Pwm_30009] >0% 且 <100%:则PWM输出信号应根据参数周期、占空比和配置的极性进行调制。

[SWS_Pwm_00052] 函数Pwm_Init应禁用所有通知。

原因是这些通知的用户可能尚未准备好。他们可以调用Pwm_EnableNotification来启动通知。

[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()进行去初始化。

关于错误检测,需求SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_Init。

8.3.2. Pwm_DeInit

[SWS_Pwm_00096]

服务名称 Pwm_DeInit
语法 void Pwm_DeInit (void)
服务 ID [十六进制] 0x01
同步/异步 同步
可重入性 不可重入
参数(in) 无
参数(inout) 无
参数(out) 无
返回值 无
描述 PWM去初始化服务。可通过Pwm.h获得
void Pwm_DeInit ( void )

[SWS_Pwm_00010] 函数Pwm_DeInit应去初始化PWM模块。

[SWS_Pwm_00011] 函数Pwm_DeInit应将PWM输出信号的状态设置为空闲状态。

[SWS_Pwm_00012] 函数Pwm_DeInit应禁用PWM中断和PWM信号边沿通知。

[SWS_Pwm_10080] 函数Pwm_DeInit应可通过配置参数PwmDeInitApi在预编译时配置开/关。

[SWS_Pwm_20080] 函数Pwm_DeInit应可通过配置参数PwmDeInitApi {PWM_DE_INIT_API}配置开/关。

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_DeInit。

8.3.3. Pwm_SetDutyCycle

[SWS_Pwm_91000]

服务名称 Pwm_SetDutyCycle
语法 void Pwm_SetDutyCycle (Pwm_ChannelType ChannelNumber, uint16 DutyCycle)
服务 ID [十六进制] 0x02
同步/异步 异步
可重入性 对不同通道编号可重入
参数(in) ChannelNumber:PWM的数字标识符;DutyCycle:最小值=0x0000,最大值=0x8000
参数(inout) 无
参数(out) 无
返回值 无
描述 设置PWM通道占空比的服务。可通过Pwm.h获得
void Pwm_SetDutyCycle ( Pwm_ChannelType ChannelNumber, uint16 DutyCycle )

[SWS_Pwm_00013] 函数Pwm_SetDutyCycle应设置PWM通道的占空比。

[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] 如果实现支持并使用PwmDutycycleUpdatedEndperiod配置,函数Pwm_SetDutyCycle应始终在周期结束时更新占空比。

关于占空比参数的格式定义,需求SWS_Pwm_00058适用于函数Pwm_SetDutyCycle。

关于占空比参数的缩放定义,需求SWS_Pwm_00059适用于函数Pwm_SetDutyCycle。

[SWS_Pwm_00018] 驱动程序应禁止PWM输出信号上的尖峰。

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_00047、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_SetDutyCycle。

[SWS_Pwm_10082] 函数Pwm_SetDutyCycle应可通过配置参数PwmSetDutyCycle在预编译时配置开/关。

[SWS_Pwm_20082] 函数Pwm_SetDutyCycle应可通过配置参数PwmSetDutyCycle {PWM_SET_DUTY_CYCLE_API}配置开/关。

8.3.4. Pwm_SetPeriodAndDuty

[SWS_Pwm_91001]

服务名称 Pwm_SetPeriodAndDuty
语法 void Pwm_SetPeriodAndDuty (Pwm_ChannelType ChannelNumber, Pwm_PeriodType Period, uint16 DutyCycle)
服务 ID [十六进制] 0x03
同步/异步 异步
可重入性 对不同通道编号可重入
参数(in) ChannelNumber:PWM的数字标识符;Period:PWM信号的周期;DutyCycle:最小值=0x0000,最大值=0x8000
参数(inout) 无
参数(out) 无
返回值 无
描述 设置PWM通道周期和占空比的服务。可通过Pwm.h获得
void Pwm_SetPeriodAndDuty ( Pwm_ChannelType ChannelNumber, Pwm_PeriodType Period, uint16 DutyCycle )

[SWS_Pwm_00019] 函数Pwm_SetPeriodAndDuty应设置PWM通道的周期和占空比。

[SWS_Pwm_00076] 如果实现支持并使用PwmPeriodUpdatedEndperiod配置,函数Pwm_SetPeriodAndDuty应始终在当前周期结束时更新周期。

[SWS_Pwm_00020] 更新PWM周期和占空比时,驱动程序应抑制PWM输出信号上的任何尖峰。

PWM占空比参数是保持频率和占空比之间一致性所必需的。有关占空比参数的缩放和格式定义,请参阅SWS_Pwm_00058和SWS_Pwm_00059。

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_00045、SWS_Pwm_00047、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_SetPeriodAndDuty。

[SWS_Pwm_00041] 函数Pwm_SetPeriodAndDuty应只允许为声明为可变周期类型的PWM通道更改周期。

[SWS_Pwm_10083] 函数Pwm_SetPeriodAndDuty应可通过配置参数PwmSetPeriodAndDuty在预编译时配置开/关。

[SWS_Pwm_20083] 函数Pwm_SetPeriodAndDuty应可通过配置参数PwmSetPeriodAndDuty {PWM_SET_PERIOD_AND_DUTY_API}配置开/关。

[SWS_Pwm_00150] 如果周期设置为零,则占空比的设置无关紧要。在这种情况下,输出应为零(零百分比占空比)。

8.3.5. Pwm_SetOutputToIdle

[SWS_Pwm_91002]

服务名称 Pwm_SetOutputToIdle
语法 void Pwm_SetOutputToIdle (Pwm_ChannelType ChannelNumber)
服务 ID [十六进制] 0x04
同步/异步 异步
可重入性 对不同通道编号可重入
参数(in) ChannelNumber:PWM的数字标识符
参数(inout) 无
参数(out) 无
返回值 无
描述 将PWM输出设置为配置的空闲状态的服务。可通过Pwm.h获得
void Pwm_SetOutputToIdle ( Pwm_ChannelType ChannelNumber )

[SWS_Pwm_00021] 函数Pwm_SetOutputToIdle应立即将PWM输出设置为配置的空闲状态。

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_00047、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_SetOutputToIdle。

[SWS_Pwm_10084] 函数Pwm_SetOutputToIdle应可通过配置参数PwmSetOutputToIdle在预编译时配置开/关。

[SWS_Pwm_20084] 函数Pwm_SetOutputToIdle应可通过配置参数PwmSetOutputToIdle {PWM_SET_OUTPUT_TO_IDLE_API}配置开/关。

[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]

服务名称 Pwm_GetOutputState
语法 Pwm_OutputStateType Pwm_GetOutputState (Pwm_ChannelType ChannelNumber)
服务 ID [十六进制] 0x05
同步/异步 同步
可重入性 对不同通道编号可重入
参数(in) ChannelNumber:PWM的数字标识符
参数(inout) 无
参数(out) 无
返回值 Pwm_OutputStateType:PWM_HIGH 表示PWM输出状态为高;PWM_LOW 表示PWM输出状态为低
描述 读取PWM输出信号内部状态的服务。可通过Pwm.h获得
Pwm_OutputStateType Pwm_GetOutputState ( Pwm_ChannelType ChannelNumber )

[SWS_Pwm_00022] 函数Pwm_GetOutputState应读取PWM输出信号的内部状态并按下图定义返回。

(该图展示了从微控制器PWM单元经端口逻辑到端口引脚的读取路径)

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_00047、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_GetOutputState。

[SWS_Pwm_10085] 函数Pwm_GetOutputState应可通过配置参数PwmGetOutputState在预编译时配置开/关。

[SWS_Pwm_20085] 函数Pwm_GetOutputState应可通过配置参数PwmGetOutputState {PWM_GET_OUTPUT_STATE_API}配置开/关。

由于实时约束和PWM通道的设置(项目相关),输出状态可能在调用服务Pwm_GetOutputState之后立即被修改。

[SWS_Pwm_30051] 如果在模块初始化之前或以无效通道调用Pwm_GetOutputState,它应返回PWM_LOW。

8.3.7. Pwm_DisableNotification

[SWS_Pwm_91003]

服务名称 Pwm_DisableNotification
语法 void Pwm_DisableNotification (Pwm_ChannelType ChannelNumber)
服务 ID [十六进制] 0x06
同步/异步 异步
可重入性 对不同通道编号可重入
参数(in) ChannelNumber:PWM的数字标识符
参数(inout) 无
参数(out) 无
返回值 无
描述 禁用PWM信号边沿通知的服务。可通过Pwm.h获得
void Pwm_DisableNotification ( Pwm_ChannelType ChannelNumber )

[SWS_Pwm_00023] 函数Pwm_DisableNotification应禁用PWM信号边沿通知。

[SWS_Pwm_10112] 函数Pwm_DisableNotification应可通过配置参数PwmNotificationSupported在预编译时配置开/关。

[SWS_Pwm_20112] 函数Pwm_DisableNotification应可通过配置参数PwmNotificationSupported {PWM_NOTIFICATION_SUPPORTED}配置开/关。

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_00047、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_DisableNotification。

8.3.8. Pwm_EnableNotification

[SWS_Pwm_91004]

服务名称 Pwm_EnableNotification
语法 void Pwm_EnableNotification (Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification)
服务 ID [十六进制] 0x07
同步/异步 异步
可重入性 对不同通道编号可重入
参数(in) ChannelNumber:PWM的数字标识符;Notification:通知类型PWM_RISING_EDGE或PWM_FALLING_EDGE或PWM_BOTH_EDGES
参数(inout) 无
参数(out) 无
返回值 无
描述 根据通知参数启用PWM信号边沿通知的服务。可通过Pwm.h获得
void Pwm_EnableNotification ( Pwm_ChannelType ChannelNumber, Pwm_EdgeNotificationType Notification )

[SWS_Pwm_00024] 函数Pwm_EnableNotification应根据通知参数启用PWM信号边沿通知。

[SWS_Pwm_00081] 函数Pwm_EnableNotification应取消挂起的中断。

[SWS_Pwm_10113] 函数Pwm_EnableNotification应可通过配置参数PwmNotificationSupported在预编译时配置开/关。

[SWS_Pwm_20113] 函数Pwm_EnableNotification应可通过配置参数PwmNotificationSupported {PWM_NOTIFICATION_SUPPORTED}配置开/关。

关于错误检测,需求SWS_Pwm_00117、SWS_Pwm_00047、SWS_Pwm_10051和SWS_Pwm_20051适用于函数Pwm_EnableNotification。

8.3.9. Pwm_SetPowerState

[SWS_Pwm_00166]

服务名称 Pwm_SetPowerState
语法 Std_ReturnType Pwm_SetPowerState (Pwm_PowerStateRequestResultType* Result)
服务 ID [十六进制] 0x09
同步/异步 同步
可重入性 不可重入
参数(in) 无
参数(inout) 无
参数(out) Result:如果API返回E_OK:PWM_SERVICE_ACCEPTED:电源状态更改已执行。如果API返回E_NOT_OK:PWM_NOT_INIT:PWM模块未初始化。PWM_SEQUENCE_ERROR:API调用顺序错误。PWM_HW_FAILURE:HW模块有故障,使其无法进入所需的电源状态。
返回值 Std_ReturnType:E_OK:电源模式已更改;E_NOT_OK:请求被拒绝
描述 此API配置Pwm模块,使其进入已准备的电源状态(从预定义的一组已配置电源状态中选择)。可通过Pwm.h获得
Std_ReturnType Pwm_SetPowerState ( Pwm_PowerStateRequestResultType* Result )

[SWS_Pwm_00167] 此API配置HW以进入给定的电源状态。启用此转换的所有预备动作(例如将所有通道设置为IDLE状态、注销所有通知等)必须已由负责的SWC(例如IoHwAbs)采取。

此API不应执行预备性的隐式电源状态更改(即如果无法从当前电源状态到达请求的电源状态,则不应执行中间电源状态更改,请求应被拒绝)。

[SWS_Pwm_00168] 如果目标电源状态与当前电源状态相同,则不执行任何动作,API立即以E_OK结果返回。

[SWS_Pwm_00169] 如果请求正常电源状态,API应引用Pwm_Init使用的相同容器中包含的必要参数。

不应对正常(即全功率)电源模式使用单独的容器或硬编码数据,以避免初始化阶段使用的初始化参数与电源状态更改期间使用的参数之间出现错位。

[SWS_Pwm_00170] 对于其他电源状态,只应在此API的上下文中执行电源状态转换特定的重新配置(即此API不能用于向Pwm模块应用全新的配置)。不应进行与电源状态转换无严格关系的任何其他重新配置。

[SWS_Pwm_00171] API应引用与所需电源状态相关的配置容器,以导出该状态的某些特定特征(例如电源状态的支持)。

如果激活了开发错误报告:

[SWS_Pwm_00172] 如果此API在初始化HW单元之前被调用,API应报告开发错误PWM_E_UNINIT。

[SWS_Pwm_00173] 当调用此API时一个或多个HW通道(如适用)处于不同于IDLE(或类似非运行状态)的状态,和/或仍有为HW模块通道注册的通知,API应报告运行时错误PWM_E_NOT_DISENGAGED。

[SWS_Pwm_00194] 如果此API以不支持的电源状态调用,或外设完全不支持低功耗状态,API应报告开发错误PWM_E_POWER_STATE_NOT_SUPPORTED。

[SWS_Pwm_00195] 如果无法从当前电源状态直接到达请求的电源状态,API应报告开发错误PWM_E_TRANSITION_NOT_POSSIBLE。

[SWS_Pwm_00196] 如果HW单元先前未通过使用API Pwm_PreparePowerState()为目标电源状态做准备,API应报告开发错误PWM_E_PERIPHERAL_NOT_PREPARED。

8.3.10. Pwm_GetCurrentPowerState

[SWS_Pwm_00177]

服务名称 Pwm_GetCurrentPowerState
语法 Std_ReturnType Pwm_GetCurrentPowerState (Pwm_PowerStateType* CurrentPowerState, Pwm_PowerStateRequestResultType* Result)
服务 ID [十六进制] 0x0a
同步/异步 同步
可重入性 不可重入
参数(in) 无
参数(inout) 无
参数(out) CurrentPowerState:在此参数中返回PWM HW单元的当前电源模式。Result:如果API返回E_OK:PWM_SERVICE_ACCEPTED:返回了当前电源模式。如果API返回E_NOT_OK:PWM_NOT_INIT:PWM模块未初始化。
返回值 Std_ReturnType:E_OK:模式可读取;E_NOT_OK:服务被拒绝
描述 此API返回PWM HW单元的当前电源状态。可通过Pwm.h获得
Std_ReturnType Pwm_GetCurrentPowerState ( Pwm_PowerStateType* CurrentPowerState, Pwm_PowerStateRequestResultType* Result )

[SWS_Pwm_00178] 此API返回HW单元的电源状态。

如果激活了开发错误报告:

[SWS_Pwm_00179] 如果此API在初始化HW单元之前被调用,API应报告开发错误PWM_E_UNINIT。

8.3.11. Pwm_GetTargetPowerState

[SWS_Pwm_00180]

服务名称 Pwm_GetTargetPowerState
语法 Std_ReturnType Pwm_GetTargetPowerState (Pwm_PowerStateType* TargetPowerState, Pwm_PowerStateRequestResultType* Result)
服务 ID [十六进制] 0x0b
同步/异步 同步
可重入性 不可重入
参数(in) 无
参数(inout) 无
参数(out) TargetPowerState:在此参数中返回PWM HW单元的目标电源模式。Result:如果API返回E_OK:PWM_SERVICE_ACCEPTED:返回了目标电源模式。如果API返回E_NOT_OK:PWM_NOT_INIT:PWM模块未初始化。
返回值 Std_ReturnType:E_OK:模式可读取;E_NOT_OK:服务被拒绝
描述 此API返回PWM HW单元的目标电源状态。可通过Pwm.h获得
Std_ReturnType Pwm_GetTargetPowerState ( Pwm_PowerStateType* TargetPowerState, Pwm_PowerStateRequestResultType* Result )

[SWS_Pwm_00181] 此API返回HW单元请求的电源状态。如果没有正在进行的转换,它应与当前电源状态一致。

除HW故障外,此API被认为始终成功。

如果激活了开发错误报告:

[SWS_Pwm_00182] 如果此API在初始化HW单元之前被调用,API应报告开发错误PWM_E_UNINIT。

8.3.12. Pwm_PreparePowerState

[SWS_Pwm_00183]

服务名称 Pwm_PreparePowerState
语法 Std_ReturnType Pwm_PreparePowerState (Pwm_PowerStateType PowerState, Pwm_PowerStateRequestResultType* Result)
服务 ID [十六进制] 0x0c
同步/异步 同步
可重入性 不可重入
参数(in) PowerState:打算达到的目标电源状态
参数(inout) 无
参数(out) Result:如果API返回E_OK:PWM_SERVICE_ACCEPTED:PWM模块电源状态准备已启动。如果API返回E_NOT_OK:PWM_NOT_INIT:PWM模块未初始化。PWM_SEQUENCE_ERROR:API调用顺序错误(当前电源状态 = 目标电源状态)。PWM_POWER_STATE_NOT_SUPP:PWM模块不支持请求的电源状态。PWM_TRANS_NOT_POSSIBLE:PWM模块无法从当前电源状态直接转换到请求的电源状态,或HW外设仍忙。
返回值 Std_ReturnType:E_OK:准备过程已启动;E_NOT_OK:服务被拒绝
描述 此API启动允许PWM HW模块进入请求的电源状态所需的过程。可通过Pwm.h获得
Std_ReturnType Pwm_PreparePowerState ( Pwm_PowerStateType PowerState, Pwm_PowerStateRequestResultType* Result )

[SWS_Pwm_00184] 此API启动使HW模块能够进入目标电源状态所需的所有动作。

外设的可操作性取决于电源状态和HW特性。集成人员应知道这些属性,是否使用外设的决定由其负责。

[SWS_Pwm_00185] 如果目标电源状态与当前电源状态相同,则不执行任何动作,API立即以E_OK结果返回。

前提条件的责任留给环境。

如果激活了开发错误报告:

[SWS_Pwm_00186] 如果此API在初始化HW单元之前被调用,API应报告开发错误PWM_E_UNINIT。

[SWS_Pwm_00187] 如果此API以不支持的电源状态调用,或外设完全不支持低功耗状态,API应报告开发错误PWM_E_POWER_STATE_NOT_SUPPORTED。

[SWS_Pwm_00188] 如果无法从当前电源状态直接到达请求的电源状态,API应报告开发错误PWM_E_TRANSITION_NOT_POSSIBLE。

达到目标电源状态所需的所有异步操作都可以在Pwm_Main_PowerTransitionManager的上下文中在后台执行。

8.3.13. Pwm_GetVersionInfo

[SWS_Pwm_00103]

服务名称 Pwm_GetVersionInfo
语法 void Pwm_GetVersionInfo (Std_VersionInfoType* versioninfo)
服务 ID [十六进制] 0x08
同步/异步 同步
可重入性 可重入
参数(in) 无
参数(inout) 无
参数(out) versioninfo:指向存储本模块版本信息位置的指针
返回值 无
描述 返回本模块版本信息的服务。可通过Pwm.h获得
void Pwm_GetVersionInfo ( Std_VersionInfoType* versioninfo )

8.4. 回调通知

由于PWM驱动程序是架构最底层的模块,它不为下层模块提供任何回调函数。

8.5. 调度函数

PWM驱动程序提供的所有服务都是同步性质的,异步电源转换管理除外(如果如此配置)。

如果配置了同步电源转换管理,则不生成调度API。

8.5.1. Pwm_Main_PowerTransitionManager

[SWS_Pwm_00189]

服务名称 Pwm_Main_PowerTransitionManager
语法 void Pwm_Main_PowerTransitionManager (void)
服务 ID [十六进制] 0x0d
描述 此API被周期性调用,监督电源状态转换,检查模块的就绪状态并发出回调IoHwAb_Pwm_NotifyReadyForPowerState\<Mode>(参见PwmPowerStateReadyCbkRef配置参数)。可通过SchM_Pwm.h获得
void Pwm_Main_PowerTransitionManager ( void )

[SWS_Pwm_00190] 此API执行完成Pwm_PreparePowerState()请求的电源状态转换所需的任何非即时动作。

[SWS_Pwm_00191] 调度速率应由Pwm MainSchedulePeriod定义并且是可变的,因为仅在请求了转换时才需要调用该函数。

[SWS_Pwm_00192] 此API还应仅在选择了异步模式时,向最终注册的用户(IoHwAbs)发出回调通知(如已配置)。

[SWS_Pwm_00193] 如果PWM模块未初始化,此函数应直接返回,不进行任何进一步处理。这是为了避免处理未初始化的变量。不应输入开发错误,因为此条件可以在启动阶段轻松验证(初始化完成前启动的任务)。

理由:在启动阶段,可能会出现OS已调度调用主函数的任务,而某些模块尚未初始化。这不是真正的错误条件,尽管需要处理,即不执行而返回。

尽管转换状态监视功能是强制的,但此API的实现是可选的,这意味着如果HW允许通过其他方式传递通知并监视转换状态,则可以跳过此函数的实现。

8.6. 期望接口

本章列出了需要从其他模块获得的所有接口。

8.6.1. 强制接口

本章定义了为实现模块核心功能而需要的所有接口。

由于本模块是MCAL层的一部分,它直接访问微控制器寄存器,因此不需要任何下层接口。

8.6.2. 可选接口

本章定义了为实现模块可选功能而需要的所有接口。

[SWS_Pwm_00104]

API 函数 头文件 描述
Det_ReportError Det.h 报告开发错误的服务

8.6.3. 可配置接口

本章列出了目标函数可被配置的所有接口。目标函数通常是回调函数。这类接口的名称不固定,因为它们是可配置的。

[SWS_Pwm_00105]

服务名称 Pwm_Notification_\<#Channel>
语法 void Pwm_Notification_\<#Channel> (void)
同步/异步 同步
可重入性 取决于PWM用户的实现
参数(in) 无
参数(inout) 无
参数(out) 无
返回值 无
描述 Pwm模块应根据对通道\<#Channel>最后一次Pwm_EnableNotification的调用调用函数Pwm_Notification_\<#Channel>。可通过Pwm_Externals.h获得

[SWS_Pwm_00025] Pwm模块应根据对通道\<#Channel>最后一次Pwm_EnableNotification和Pwm_DisableNotification的调用调用函数Pwm_Notification_\<#Channel>。

[SWS_Pwm_00026] Pwm模块应复位与通知Pwm_Notification_\<#Channel>关联的中断标志。

[SWS_Pwm_10115] 只有当配置参数PwmNotificationSupported为ON时,Pwm模块才应提供Pwm_EnableNotification的功能。

[SWS_Pwm_20115] 只有当配置参数PwmNotificationSupported为ON时,Pwm模块才应提供Pwm_DisableNotification的功能。

[SWS_Pwm_30115] 只有当配置参数PwmNotificationSupported为ON时,Pwm模块才应复位与通知关联的中断标志。

[SWS_Pwm_91005]

服务名称 IoHwAb_Pwm_NotifyReadyForPowerState\<#Mode>
语法 void IoHwAb_Pwm_NotifyReadyForPowerState\<#Mode> (void)
同步/异步 同步
可重入性 不可重入
参数(in) 无
参数(inout) 无
参数(out) 无
返回值 无
描述 当模式\<#Mode>的请求电源状态准备完成时,PWM驱动程序应调用此API。可通过IoHwAb_Pwm.h获得

[SWS_Pwm_00199] 如果PWM驱动程序配置为支持具有异步转换的电源状态管理,应调用此API以向IoHwAbs模块发出电源转换准备阶段完成的信号。

这是一个回调,此API应在IoHwAbs组件中实现。

8.7. API 参数检查

[SWS_Pwm_10051] 如果为Pwm模块启用了开发错误检测并发生了开发错误,则相应的PWM函数应向默认错误跟踪器报告错误。

[SWS_Pwm_20051] 如果为Pwm模块启用了开发错误检测并发生了开发错误,则相应的PWM函数应跳过所需功能,以避免数据或硬件寄存器的损坏,不执行任何动作而离开函数。

[SWS_Pwm_00117] 如果为Pwm模块启用了开发错误检测:如果在调用Pwm_Init之前调用任何函数(Pwm_Init除外),被调用的函数应引发开发错误PWM_E_UNINIT。

[SWS_Pwm_00045] 如果为Pwm模块启用了开发错误检测:API Pwm_SetPeriodAndDuty()应检查给定的PWM通道是否为通道类类型PWM_VARIABLE_PERIOD。如果不是,应引发开发错误PWM_E_PERIOD_UNCHANGEABLE。

[SWS_Pwm_00047] 如果为Pwm模块启用了开发错误检测:PWM函数应检查参数ChannelNumber,如果参数ChannelNumber无效,应引发开发错误PWM_E_PARAM_CHANNEL。

9. 时序图

9.1. 初始化

Figure2

9.2. 去初始化

Figure3

9.3. 设置占空比

Figure4

9.4. 设置周期和占空比

Figure5

9.5. 将 PWM 输出设置为空闲

Figure6

9.6. 获取 PWM 输出状态

Figure7

9.7. 使用 PWM 通知

Figure8

10. 配置规范

总体而言,本章定义配置参数以及它们到容器的聚集。为了支持规范,第 10.1 章描述基础知识。它还规定了一个你应使用的参数规范模板(表格)。我们打算将第 10.1 章保留在规范中以保证理解。

第 10.2 章规定模块PWM驱动程序的结构(容器)和参数。

第 10.3 章规定模块PWM驱动程序的发布信息。

10.1. 如何阅读本章

详情请参阅SWS_BSWGeneral中第 10.1 章"Introduction to configuration specification"。

10.2. 容器和配置参数

以下章节总结了所有配置参数。参数的详细含义见功能规格和API规范章节。

[SWS_Pwm_00203] PWM模块应拒绝实现不支持的包含分区映射的配置。

10.2.1. Pwm

SWS 条目 [ECUC_Pwm_00148]

模块名称 Pwm
描述 Pwm(脉冲宽度调制)模块的配置。
Post-Build 变体支持 true
支持的配置变体 VARIANT-POST-BUILD, VARIANT-PRE-COMPILE

包含的容器

容器名称 多重性 范围/依赖
PwmChannelConfigSet 1 此容器包含AUTOSAR Pwm模块的配置参数和子容器。
PwmConfigurationOfOptApiServices 1 --
PwmGeneral 1 --

10.2.2. PwmGeneral

SWS 条目 [ECUC_Pwm_00004]

容器名称 PwmGeneral
父容器 Pwm
描述 --

配置参数

SWS 条目 [ECUC_Pwm_00131]

参数名称 PwmDevErrorDetect
父容器 PwmGeneral
描述 打开或关闭开发错误检测和通知。• true:启用检测和通知。• false:禁用检测和通知。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00132]

参数名称 PwmDutycycleUpdatedEndperiod
父容器 PwmGeneral
描述 用于启用在当前周期结束时更新占空比参数的开关。TRUE:占空比的更新在当前生成波形周期结束时完成(当前波形完成)。FALSE:占空比的更新立即完成(服务调用后立即,当前波形被截断)。
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00139]

参数名称 PwmIndex
父容器 PwmGeneral
描述 指定此模块实例的InstanceId。如果只存在一个实例,其ID应为 0。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00142]

参数名称 PwmLowPowerStatesSupport
父容器 PwmGeneral
描述 添加/移除所有电源状态管理相关的API(PWM_SetPowerState、PWM_GetCurrentPowerState、PWM_GetTargetPowerState、PWM_PreparePowerState、PWM_Main_PowerTransitionManager),指示HW是否提供低功耗状态管理。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00133]

参数名称 PwmNotificationSupported
父容器 PwmGeneral
描述 指示支持通知的开关。
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00134]

参数名称 PwmPeriodUpdatedEndperiod
父容器 PwmGeneral
描述 用于启用在当前周期结束时更新周期参数的开关。TRUE:周期/占空比的更新在当前生成波形周期结束时完成(当前波形完成)。FALSE:周期/占空比的更新立即完成(服务调用后立即,当前波形被截断)。
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00143]

参数名称 PwmPowerStateAsynchTransitionMode
父容器 PwmGeneral
描述 启用/禁用PWM驱动程序对异步电源状态转换的支持。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local;依赖:仅当参数PwmLowPowerStatesSupport设置为true时才应配置此参数。

SWS 条目 [ECUC_Pwm_00149]

参数名称 PwmEcucPartitionRef
父容器 PwmGeneral
描述 将PWM驱动程序映射到零个或多个ECUC分区,以使驱动程序API在相应分区中可用。
多重性 0..*
类型 对 EcucPartition 的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: ECU

SWS 条目 [ECUC_Pwm_00150]

参数名称 PwmKernelEcucPartitionRef
父容器 PwmGeneral
描述 将PWM内核映射到零个或一个ECUC分区,以将驱动程序内核分配给某个核心。引用的ECUC分区是PWM驱动程序所映射到的ECUC分区的子集。
多重性 0..1
类型 对 EcucPartition 的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 预编译时间 X(所有变体)
值配置类 链接时间 --;Post-build 时间 --
范围/依赖 scope: ECU

包含的容器

容器名称 多重性 范围/依赖
PwmPowerStateConfig 0..* 此参数的每个实例定义一个电源状态以及到达该电源状态时要调用的回调。

[SWS_Pwm_CONSTR_00001] PwmKernelEcucPartitionRef引用的ECUC分区应是PwmEcucPartitionRef引用的ECUC分区的子集。

[SWS_Pwm_CONSTR_00002] 如果PwmEcucPartitionRef引用一个或多个ECUC分区,PwmKernelEcucPartitionRef应具有为 1 的多重性,并同样引用这些ECUC分区中的一个。

10.2.3. PwmPowerStateConfig

SWS 条目 [ECUC_Pwm_00144]

容器名称 PwmPowerStateConfig
父容器 PwmGeneral
描述 此参数的每个实例定义一个电源状态以及到达该电源状态时要调用的回调。

配置参数

SWS 条目 [ECUC_Pwm_00146]

参数名称 PwmPowerState
父容器 PwmPowerStateConfig
描述 此参数的每个实例描述PWM HW支持的不同电源状态。它应由HW供应商定义并由PWMDriver用于引用将PWM HW模块设置为所引用电源状态的特定HW配置。至少应始终配置对应于全功率状态的电源模式。
多重性 1
类型 EcucIntegerParamDef(为此参数生成符号名称)
范围 0 .. 18446744073709551615
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local;依赖:仅当参数PwmLowPowerStatesSupport设置为true时才应配置此参数。

SWS 条目 [ECUC_Pwm_00145]

参数名称 PwmPowerStateReadyCbkRef
父容器 PwmPowerStateConfig
描述 此参数的每个实例包含对CDD或IoHwAbs组件中定义的电源模式回调的引用。
多重性 1
类型 EcucFunctionNameDef
默认值 --
正则表达式 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local;依赖:仅当参数PwmLowPowerStatesSupport设置为true时才应配置此参数。

无包含的容器。

10.2.4. PwmChannel

SWS 条目 [ECUC_Pwm_00027]

容器名称 PwmChannel
父容器 PwmChannelConfigSet
描述 单个PWM通道的配置。

配置参数

SWS 条目 [ECUC_Pwm_00136]

参数名称 PwmChannelClass
父容器 PwmChannel
描述 PWM通道的类。实现类型:Pwm_ChannelClassType
多重性 0..1
类型 EcucEnumerationParamDef
范围 PWM_FIXED_PERIOD:只能更改占空比。PWM_FIXED_PERIOD_SHIFTED:只能更改占空比。周期是移位的(仅当硬件支持时)。PWM_VARIABLE_PERIOD:占空比和周期都可以更改。
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00137]

参数名称 PwmChannelId
父容器 PwmChannel
描述 PWM通道的通道ID。此值将分配给从PwmChannel容器短名称派生的符号名称。
多重性 1
类型 EcucIntegerParamDef(为此参数生成符号名称)
范围 0 .. 4294967295
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00138]

参数名称 PwmDutycycleDefault
父容器 PwmChannel
描述 用于初始化的占空比值。0 表示 0%,0x8000 表示 100%。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 32768
默认值 --
Post-Build 变体值 true
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00122]

参数名称 PwmIdleState
父容器 PwmChannel
描述 参数PWM_IDLE_STATE表示信号停止后PWM的输出状态(例如调用Pwm_SetOutputToIdle)。
多重性 1
类型 EcucEnumerationParamDef
范围 PWM_HIGH:PWM通道输出在空闲状态将设置为高(3 或 5 V)。PWM_LOW:PWM通道输出在空闲状态将设置为低(0 V)。
Post-Build 变体值 true
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00123]

参数名称 PwmNotification
父容器 PwmChannel
描述 回调函数的定义。
多重性 0..1
类型 EcucFunctionNameDef
默认值 "NULL"
正则表达式 --
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00124]

参数名称 PwmPeriodDefault
父容器 PwmChannel
描述 用于初始化的周期值(以秒为单位)。
多重性 1
类型 EcucFloatParamDef
范围 [0 .. INF]
默认值 --
Post-Build 变体值 true
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00125]

参数名称 PwmPolarity
父容器 PwmChannel
描述 定义每个PWM通道的起始极性。
多重性 1
类型 EcucEnumerationParamDef
范围 PWM_HIGH:PWM通道输出在周期开始时为高,达到占空比计数时变低。PWM_LOW:PWM通道输出在周期开始时为低,达到占空比计数时变高。
Post-Build 变体值 true
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00151]

参数名称 PwmChannelEcucPartitionRef
父容器 PwmChannel
描述 将PWM通道映射到零个或多个ECUC分区,以限制对此通道的访问。引用的ECUC分区是PWM驱动程序所映射到的ECUC分区的子集。
多重性 0..*
类型 对 EcucPartition 的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: ECU

SWS 条目 [ECUC_Pwm_00147]

参数名称 PwmMcuClockReferencePoint
父容器 PwmChannel
描述 此参数包含对McuClockReferencePoint的引用。
多重性 1
类型 对 McuClockReferencePoint 的引用
Post-Build 变体值 true
值配置类 预编译时间 X(VARIANT-PRE-COMPILE);链接时间 --;Post-build 时间 X(VARIANT-POST-BUILD)
范围/依赖 scope: ECU

无包含的容器。

[SWS_Pwm_CONSTR_00003] 如果PwmEcucPartitionRef引用一个或多个ECUC分区,PwmChannelEcucPartitionRef应具有大于零的多重性,并同样引用这些ECUC分区中的一个或多个。

10.2.5. PwmChannelConfigSet

SWS 条目 [ECUC_Pwm_00140]

容器名称 PwmChannelConfigSet
父容器 Pwm
描述 此容器包含AUTOSAR Pwm模块的配置参数和子容器。

配置参数

包含的容器

容器名称 多重性 范围/依赖
PwmChannel 1..* 单个PWM通道的配置。

10.2.6. PwmConfigurationOfOptApiServices

SWS 条目 [ECUC_Pwm_00126]

容器名称 PwmConfigurationOfOptApiServices
父容器 Pwm
描述 --

配置参数

SWS 条目 [ECUC_Pwm_00141]

参数名称 PwmDeInitApi
父容器 PwmConfigurationOfOptApiServices
描述 从代码中添加/移除服务Pwm_DeInit()。
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00127]

参数名称 PwmGetOutputState
父容器 PwmConfigurationOfOptApiServices
描述 --
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00128]

参数名称 PwmSetDutyCycle
父容器 PwmConfigurationOfOptApiServices
描述 --
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00129]

参数名称 PwmSetOutputToIdle
父容器 PwmConfigurationOfOptApiServices
描述 --
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00130]

参数名称 PwmSetPeriodAndDuty
父容器 PwmConfigurationOfOptApiServices
描述 --
多重性 1
类型 EcucBooleanParamDef
默认值 --
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

SWS 条目 [ECUC_Pwm_00135]

参数名称 PwmVersionInfoApi
父容器 PwmConfigurationOfOptApiServices
描述 指示支持Pwm_GetVersionInfo的开关。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 预编译时间 X(所有变体);链接时间 --;Post-build 时间 --
范围/依赖 scope: local

无包含的容器。

10.3. 发布信息

详情请参阅SWS_BSWGeneral中第 10.3 章"Published Information"。

11. 不适用的需求

[SWS_Pwm_NA_00153] 这些需求不适用于本规范。(涉及SRS_BSW_00159、SRS_BSW_00167、SRS_BSW_00170、SRS_BSW_00419、SRS_BSW_00383、SRS_BSW_00375、SRS_BSW_00416、SRS_BSW_00168、SRS_BSW_00423、SRS_BSW_00424、SRS_BSW_00425、SRS_BSW_00426、SRS_BSW_00427、SRS_BSW_00428、SRS_BSW_00429、SRS_BSW_00432、SRS_BSW_00433、SRS_BSW_00417、SRS_BSW_00161、SRS_BSW_00162、SRS_BSW_00005、SRS_BSW_00415、SRS_BSW_00164、SRS_BSW_00325、SRS_BSW_00342、SRS_BSW_00160、SRS_BSW_00007、SRS_BSW_00300、SRS_BSW_00413、SRS_BSW_00347、SRS_BSW_00305、SRS_BSW_00307、SRS_BSW_00310、SRS_BSW_00373、SRS_BSW_00327、SRS_BSW_00335、SRS_BSW_00350、SRS_BSW_00408、SRS_BSW_00410、SRS_BSW_00348、SRS_BSW_00353、SRS_BSW_00301、SRS_BSW_00302、SRS_BSW_00328、SRS_BSW_00312、SRS_BSW_00006、SRS_BSW_00357、SRS_BSW_00377、SRS_BSW_00304、SRS_BSW_00378、SRS_BSW_00306、SRS_BSW_00308、SRS_BSW_00309、SRS_BSW_00358、SRS_BSW_00414、SRS_BSW_00359、SRS_BSW_00360、SRS_BSW_00330、SRS_BSW_00331、SRS_BSW_00009、SRS_BSW_00401、SRS_BSW_00172、SRS_BSW_00010、SRS_BSW_00333、SRS_BSW_00003、SRS_BSW_00341、SRS_BSW_00334、SRS_SPAL_12267、SRS_SPAL_12461、SRS_SPAL_12462、SRS_SPAL_12463、SRS_SPAL_12068、SRS_SPAL_12069、SRS_SPAL_12169、SRS_SPAL_12075、SRS_SPAL_12064、SRS_SPAL_12067、SRS_SPAL_12077、SRS_SPAL_12078、SRS_SPAL_12092、SRS_SPAL_12265、SRS_Pwm_12379)