AUTOSAR_SWS_PWMDriver
AUTOSAR_SWS_PWMDriver
简介和功能概述
该规范指定了 AUTOSAR 基础软件模块 PWM 驱动程序的功能、API 和配置。
每个 PWM 通道都链接到微控制器的硬件 PWM。PWM 信号的类型(例如居中对齐、左对齐等)未在本规范中定义,而由实现决定。
驱动程序提供微控制器内部 PWM 层(脉冲宽度调制)的初始化和控制功能。PWM 模块生成具有可变脉冲宽度的脉冲。它允许选择占空比和信号周期时间。
首字母缩略词和缩写
具有本地范围的首字母缩略词和缩写词不包含在 AUTOSAR 词汇表中。这些必须出现在本地词汇表中。
限制
[SWS_Pwm_00001]
[SRS_Pwm_12386]
- PWM SWS 不涵盖通用 I/O 上的 PWM 仿真。
仅当 MCAL 驱动程序拥有完整的底层硬件外设(即,其他 MCAL 模块无法访问硬件外设)时,才可实现电源状态控制 API。
对其他模块的依赖
PWM 依赖于系统时钟。因此,系统时钟的变化(例如 PLL 开启 -> PLL 关闭)也会影响 PWM 硬件的时钟设置。
PWM 驱动器依赖于以下模块:
- Port 驱动程序:
- 设置端口引脚功能。(PWM141)
- MCU 驱动程序:
- 设置预分频器、系统时钟和 PLL。(PWM142)
- DET:
- 开发模式下的默认错误跟踪器。(PWM 143)
文档 087_AUTOSAR_ECU_Configuration 包含第4.6章时钟树配置,其中详细介绍了向外围设备传送参考时钟信号的机制。
代码文件结构
[SWS_Pwm_00065]
[SRS_BSW_00346]
[SRS_BSW_00314]
- PWM SWS 不应定义代码文件结构。
头文件结构
[SWS_Pwm_50075]
[ ]
- Pwm.c 应包括 Pwm.h、Det.h 和 。
[SWS_Pwm_70075]
[ ]
- Pwm_Irq.c应包括Pwm.h。
需求可追溯性
[ ]
- PWM 模块中除 Pwm_Init、Pwm_DeInit 和 Pwm_GetVersionInfo 之外的所有函数对于不同的 PWM 通道号而言均可重入。
- 为了保持模块实现的简单,模块无需执行任何 [SWS_Pwm_00088] 检查。
[SWS_Pwm_00089]
[ ]- 如果在运行时,在不同任务或 ISR 中对同一 PWM 通道进行多个函数调用,则 PWM 模块的用户应确保操作的完整性。
时间单位滴答
背景与理由
要从寄存器值中获取时间,必须知道振荡器频率、预分频器等。由于这些设置是在 MCU 和/或其他模块中进行的,因此无法计算此类时间。因此,时间和刻度之间的转换应属于上层服务的一部分。
需求
[SWS_Pwm_00070]
[SRS_BSW_00343]
- PWM 模块的 API 服务中使用的所有时间单位都应为单位时钟滴答。
对硬件低功耗状态的支持和管理
背景
某些 PWM HW 模块允许设置某些操作模式,以降低功耗,但最终会以反应时间变慢、性能降低或最终完全不可用为代价。每个 PWM 模块可以支持一种或多种低功耗操作模式,将全功率模式视为始终存在并在启动时默认的设置。
PWM 驱动程序提供电源状态控制 API 和后台细化机制来处理异步电源状态更改过程(即电源状态更改不会在请求时立即完成,而是需要一些较长的操作)。
假设上层(应用程序、服务层中的模式管理、处理外围设备控制的 IoHwAbstraction 组件)已经满足了来自 ECU 和 SW 架构的所有约束,则驱动程序控制范围仅限于 PWM HW 外围设备。
PWM 驱动程序会检查操作顺序,以避免在上一个请求正在被处理之前请求不同的电源状态,或者在相同的请求所需的准备未被请求时激活电源状态。
PWM 模块应支持电源控制功能作为可选功能。该模块既不强制仅使用启用电源控制的 MCU,也不强制配置 MCU。相反,它提出了一种处理电源状态的方法(如果供应商支持)。
需求
[SWS_Pwm_00154]
[ ]
- 当相应的配置参数 PwmLowPowerStatesSupport 设置为 TRUE 时,PWM 驱动程序应支持电源状态改变及其 API。
[SWS_Pwm_00155]
[ ]
- 如果启用了参数 PwmLowPowerStatesSupport,则应生成 API:
- Pwm_PreparePowerState
- Pwm_SetPowerState
- Pwm_GetCurrentPowerState
- Pwm_GetTargetPowerState
- 并将其用于管理和获取有关电源状态转换的信息。
[SWS_Pwm_00156]
[ ]
- API Pwm_GetTargetPowerState 和 Pwm_GetCurrentPowerState 应分别用于收集有关请求和目标 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 的调用顺序。如果第一个在第二个之前被调用,则应存储 Det 条目并且不执行该操作。
[SWS_Pwm_00160]
[ ]
- 如果参数 PwmLowPowerStatesSupport 设置为 TRUE,则 PWM 模块应跟踪当前和目标电源状态。
[SWS_Pwm_00161]
[ ]
- 初始化后,如果 PwmLowPowerStatesSupport 设置为 TRUE(FALSE ?),则模块的电源状态应始终为 FULL POWER。
[SWS_Pwm_00162]
[ ]
- PWM 驱动程序应支持同步和异步电源状态转换,具体取决于配置参数 PwmPowerStateAsynchTransitionMode 的值。
[SWS_Pwm_00163]
[ ]
- 当配置参数 PwmPowerStateAsynchTransitionMode 设置为 FALSE 时,准备过程和设置过程应在相应 API 返回后立即视为结束。
[SWS_Pwm_00164]
[ ]
- 如果配置参数 PwmPowerStateAsynchTransitionMode 设置为 TRUE,则在相关 API 返回后,准备过程应在后台继续,并通过配置的回调通知其完成。
占空比分辨率和缩放
[SWS_Pwm_00058]
[SRS_Pwm_12383]
- 占空比参数的宽度为 16 Bits。
[SWS_Pwm_00059]
[SRS_Pwm_12459]
- PWM 模块应遵循以下占空比缩放方案:
- 0x0000 表示 0%。
- 0x8000 表示 100%(0x8000 提供最高分辨率,同时允许用 16 Bits 值表示 100% 占空比)。
- 作为实施指南,给出了以下源代码示例:
- AbsoluteDutyCycle = ((uint32) AbsolutePeriodTime * RelativeDutyCycle) >> 15;
错误分类
开发错误
[SWS_Pwm_00201]
[ ]
[SWS_Pwm_20002]
[SRS_BSW_00337]
[SRS_BSW_00385]
[SRS_BSW_00386]
- 当使用 API 服务而没有模块初始化时,PWM 驱动模块将报告开发错误 PWM_E_UNINIT (0x11)。
[SWS_Pwm_30002]
[SRS_BSW_00337]
[SRS_BSW_00385]
[SRS_BSW_00386]
- 当 API 服务与无效的通道标识符一起使用时,PWM 驱动模块将报告开发错误PWM_E_PARAM_CHANNEL (0x12)。
[SWS_Pwm_40002]
[SRS_BSW_00337]
[SRS_BSW_00385]
[SRS_BSW_00386]
- 在配置了固定周期的 PWM 通道上使用未经授权的 PWM 服务时,PWM 驱动模块将报告开发错误 PWM_E_PERIOD_UNCHANGEABLE (0x13)。
[SWS_Pwm_50002]
[SRS_BSW_00337]
[SRS_BSW_00385]
[SRS_BSW_00386]
- 当 PWM 驱动程序已经初始化时,调用 API Pwm_Init 服务时,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]
[ ]
- 如果硬件单元尚未通过使用 API Pwm_PreparePowerState 预先为目标电源状态做好准备,则 API 将报告开发错误 PWM_E_PERIPHERAL_NOT_PREPARED。
运行时错误
[SWS_Pwm_00202]
[ ]
[ ]
- 如果在一个或多个 HW 通道(如适用)处于不同于 IDLE 的状态(或类似的非操作状态)时调用 API,并且/或仍有为 HW 模块通道注册的通知,则 API 应报告运行时错误 PWM_E_NOT_DISENGAGED。
API 规范
导入的类型
本章列出了从其他模块包含的所有类型。
[SWS_Pwm_00094]
[ ]
类型定义
Pwm_ChannelType
[SWS_Pwm_00106]
[ ]
Pwm_PeriodType
[SWS_Pwm_00107]
[ ]
Pwm_OutputStateType
[SWS_Pwm_00108]
[ ]
Pwm_EdgeNotificationType
[SWS_Pwm_00109]
[ ]
Pwm_ChannelClassType
[SWS_Pwm_00110]
[ ]
Pwm_ConfigType
[SWS_Pwm_00111]
[ ]
Pwm_PowerStateRequestResultType
[SWS_Pwm_00165]
[ ]
Pwm_PowerStateType
[SWS_Pwm_00197]
[SRS_Pwm_12293]
[SRS_Pwm_12378]
- 分配的 HW 通道
- 周期默认值
- 占空比默认值
- 极性(高或低)
- 空闲状态(高或低)
- 通道类别:
- 固定周期
- 固定周期,相移(如果硬件支持)
- 可变周期
- 通道相移
- 相移的参考通道
- 微控制器特定的通道属性
函数定义
Pwm_Init
[SWS_Pwm_00095]
[ ]
[SWS_Pwm_00007]
[SRS_BSW_00101]
[SRS_SPAL_12057]
- 函数 Pwm_Init 应根据 ConfigPtr 中指定的参数初始化微控制器的所有内部变量和使用的 PWM 结构。
[SWS_Pwm_00062]
[SRS_SPAL_12057]
[SRS_SPAL_12125]
- 函数 Pwm_Init 只会初始化已配置的资源,而不会触及配置文件中未配置的资源。
[SWS_Pwm_10009]
[SRS_SPAL_12057]
- 函数 Pwm_Init 将使用配置的默认值启动所有 PWM 通道。
如果占空比参数等于:
[SWS_Pwm_20009]
[SRS_SPAL_12057]
- 0% 或 100%:则 PWM 输出信号应处于按照配置的极性参数的状态。
[SWS_Pwm_30009]
[SRS_SPAL_12057]
- > 0% 且 < 100%:则 PWM 输出信号应根据参数周期、占空比和配置的极性进行配置。
[SWS_Pwm_00052]
[SRS_SPAL_12057]
- 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。
Pwm_DeInit
[SWS_Pwm_00096]
[ ]
[SWS_Pwm_00010]
[SRS_BSW_00336]
[SRS_SPAL_12163]
[SRS_Pwm_12381]
- 函数 Pwm_DeInit 将取消初始化 PWM 模块。
[SWS_Pwm_00011]
[SRS_SPAL_12163]
- 函数 Pwm_DeInit 将把 PWM 输出信号的状态设置为空闲状态。
[SWS_Pwm_00012]
[SRS_SPAL_12163]
- 函数 Pwm_DeInit 将禁用 PWM 中断和 PWM 信号边沿通知。
[SWS_Pwm_10080]
[SRS_BSW_00171]
- 函数 Pwm_DeInit 应在编译前通过配置参数 PwmDeInitApi 配置为开启/关闭。
[SWS_Pwm_20080]
[SRS_BSW_00171]
- Pwm_DeInit 函数应可通过配置参数 PwmDeInitApi {PWM_DE_INIT_API} 配置为开启/关闭。
- 关于错误检测,要求 [SWS_Pwm_00117]、[SWS_Pwm_10051] 和 [SWS_Pwm_20051] 适用于 Pwm_DeInit 函数。
Pwm_SetDutyCycle
[SWS_Pwm_91000]
[ ]
[SWS_Pwm_00013]
[SRS_Pwm_12295]
- 函数 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]
[SRS_Pwm_12382]
- 如果实施支持并使用 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]
[SRS_BSW_00171]
- 函数 Pwm_SetDutyCycle 应在编译前通过配置参数 PwmSetDutyCycle 配置开/关。
[SWS_Pwm_20082]
[SRS_BSW_00171]
- 函数 Pwm_SetDutyCycle 可通过配置参数配置为开启/关闭:PwmSetDutyCycle {PWM_SET_DUTY_CYCLE_API}。
Pwm_SetPeriodAndDuty
[SWS_Pwm_91001]
[ ]
[SWS_Pwm_00019]
[SRS_Pwm_12297]
- 函数 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]
[SRS_Pwm_12389]
- 函数 Pwm_SetPeriodAndDuty 仅允许更改声明为可变周期类型的 PWM 通道的周期。
[SWS_Pwm_10083]
[SRS_BSW_00171]
- 函数 Pwm_SetPeriodAndDuty 应在编译前通过配置参数 PwmSetPeriodAndDuty 配置开/关。
[SWS_Pwm_20083]
[SRS_BSW_00171]
- 函数 Pwm_SetPeriodAndDuty 可通过配置参数配置为开启/关闭:PwmSetPeriodAndDuty {PWM_SET_PERIOD_AND_DUTY_API}。
[SWS_Pwm_00150]
[ ]
- 如果周期设置为零,则占空比的设置无关紧要。在这种情况下,输出应为零(占空比 0%)。
Pwm_SetOutputToIdle
[SWS_Pwm_91002]
[ ]
[SWS_Pwm_00021]
[SRS_Pwm_12358]
- 函数 Pwm_SetOutputToIdle 应立即将 PWM 输出设置为配置的空闲状态。
关于错误检测,要求 [SWS_Pwm_00117]、[SWS_Pwm_00047]、[SWS_Pwm_10051] 和 [SWS_Pwm_20051] 适用于函数 Pwm_SetOutputToIdle。
[SWS_Pwm_10084]
[SRS_BSW_00171]
- 函数 Pwm_SetOutputToIdle 应在编译前通过配置参数 PwmSetOutputToIdle 配置开/关。
[SWS_Pwm_20084]
[SRS_BSW_00171
- 函数 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 通道。
Pwm_GetOutputState
[SWS_Pwm_00100]
[ ]
[SWS_Pwm_00022]
[SRS_Pwm_12385]
- Pwm_GetOutputState 函数应读取 PWM 输出信号的内部状态并按照下图定义返回
- 关于错误检测,要求 [SWS_Pwm_00117]、[SWS_Pwm_00047]、[SWS_Pwm_10051] 和 [SWS_Pwm_20051] 适用于函数 Pwm_GetOutputState。
[SWS_Pwm_10085]
[SRS_BSW_00171]
- 函数 Pwm_GetOutputState 应在编译时前使用配置参数 PwmGetOutputState 配置为开/关。
[SWS_Pwm_20085]
[SRS_BSW_00171]
- 函数 Pwm_GetOutputState 可通过配置参数配置为开启/关闭:PwmGetOutputState {PWM_GET_OUTPUT_STATE_API}。
- 由于实时约束和 PWM 通道的设置(取决于项目),调用服务 Pwm_GetOutputState 后输出状态可能被立即修改。
[SWS_Pwm_30051]
[SRS_BSW_00323]
[SRS_BSW_00386]
- 如果在模块初始化之前调用 Pwm_GetOutputState,或者使用无效通道,它将返回 PWM_LOW。
Pwm_DisableNotification
[SWS_Pwm_91003]
[ ]
[SWS_Pwm_00023]
[SRS_Pwm_12378]
[SRS_Pwm_12299]
- 函数 Pwm_DisableNotification 将禁用 PWM 信号边沿通知。
[SWS_Pwm_10112]
[ ]
- 函数 Pwm_DisableNotification 应在编译前使用配置参数 PwmNotificationSupported 配置开/关。
[SWS_Pwm_20112]
[ ]
- 功能 Pwm_DisableNotification 可通过配置参数配置为开启/关闭:PwmNotificationSupported {PWM_NOTIFICATION_SUPPORTED}。
- 关于错误检测,要求 [SRS_Pwm_00117]、[SRS_Pwm_00047]、[SRS_Pwm_10051] 和 [SRS_Pwm_20051] 适用于函数 Pwm_DisableNotification。
Pwm_EnableNotification
[SWS_Pwm_91004]
[ ]
[SWS_Pwm_00024]
[SRS_Pwm_12378]
[SRS_Pwm_12299]
- 函数 Pwm_EnableNotification 根据通知参数启用 PWM 信号边沿通知。
[SWS_Pwm_00081]
[ ]
- 函数 Pwm_EnableNotification 将取消待处理的中断。
[SWS_Pwm_10113]
[ ]
- 函数 Pwm_EnableNotification 应在编译前使用配置参数 PwmNotificationSupported 配置开/关。
[SWS_Pwm_20113]
[ ]
- 功能 Pwm_EnableNotification 可通过配置参数配置为开启/关闭:PwmNotificationSupported {PWM_NOTIFICATION_SUPPORTED}。
Pwm_SetPowerState
[SWS_Pwm_00166]
[ ]
[SWS_Pwm_00167]
[ ]
- API 配置 HW 以进入给定的电源状态。负责的 SWC(例如 IoHwAbs)必须已采取所有初步措施以实现此转换(例如将所有通道设置为 IDLE 状态、取消注册所有通知等)。
- 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,则该 API 将报告开发错误 PWM_E_UNINIT。
[SWS_Pwm_00173]
[ ]
- 当一个或多个 HW 通道(如适用)处于不同于 IDLE 的状态(或类似的非操作状态)和/或仍有为 HW 模块通道注册的通知时,调用此 API 时,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]
[ ]
- 如果硬件单元尚未通过使用 API Pwm_PreparePowerState() 预先为目标电源状态做好准备,则 API 将报告开发错误 PWM_E_PERIPHERAL_NOT_PREPARED。
Pwm_GetCurrentPowerState
[SWS_Pwm_00177]
[ ]
[SWS_Pwm_00178]
[ ]
- API 返回硬件单元的电源状态。如果激活了开发错误报告:
[SWS_Pwm_00179]
[ ]
- 如果在初始化硬件单元之前调用此 API,则该 API 将报告开发错误 PWM_E_UNINIT。
Pwm_GetTargetPowerState
[SWS_Pwm_00180]
[ ]
[SWS_Pwm_00181]
[ ]
- API 返回硬件单元的请求电源状态。如果没有正在进行的转换,则该状态应与当前电源状态一致。
- 除硬件故障外,该 API 被认为始终成功。
- 如果激活了开发错误报告:
[SWS_Pwm_00182]
[ ]
- 如果在初始化硬件单元之前调用此 API,则该 API 将报告开发错误 PWM_E_UNINIT。
Pwm_PreparePowerState
[SWS_Pwm_00183]
[ ]
[SWS_Pwm_00184]
[ ]
- 该 API 启动使硬件模块进入目标电源状态所需的所有操作。
- 外围设备是否可操作取决于电源状态和硬件特性。集成商应该了解这些特性,是否使用外围设备由集成商负责决定。
[SWS_Pwm_00185]
[ ]
- 如果目标电源状态与当前电源状态相同,则不执行任何操作并且 API 立即返回 E_OK 结果。
- 先决条件的责任留给环境。
- 以防开发错误报告被激活。
[SWS_Pwm_00186]
[ ]
- 如果在初始化硬件单元之前调用此 API,则该 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 的上下文中在后台执行。
Pwm_GetVersionInfo
[SWS_Pwm_00103]
[ ]
Pwm_Main_PowerTransitionManager
[SWS_Pwm_00189]
[ ]
[SWS_Pwm_00191]
[ ]
- 计划的速率应由 Pwm_MainSchedulePeriod 定义且应为变量,因为仅在请求转换时才需调用该函数。
[SWS_Pwm_00192]
[ ]
- 仅当选择异步模式时,此 API 才会按照配置向最终注册的用户(IoHwAbs)发出回调通知。
[SWS_Pwm_00193]
[ ]
- 如果 PWM 模块未初始化,则此函数应直接返回,无需进一步说明。这是为了避免说明未初始化的变量。不应输入开发错误,因为可以在启动阶段(初始化完成之前启动的任务)轻松验证此条件。
- 原因:在启动阶段,可能会发生的情况是 OS 已经开始调度主要的任务,而与此同时某些模块尚未初始化。这不是真正的错误情况,但需要处理,即返回而不执行。
- 虽然过渡状态监控功能是强制性的,但此 API 的实现是可选的,这意味着如果硬件允许其他方式传递通知和观察过渡状态,则可以跳过此功能的实现。
预期接口
本章列出了其他模块所需的所有接口。
可选接口
本章定义了实现模块可选功能所需的所有接口。
[SWS_Pwm_00104]
[ ]
可配置接口
本章列出了所有可以配置的接口。函数通常是一个回调函数。这类接口的名称并不固定,因为它们是可配置的。
Pwm_Notification_<#Channel>
[SWS_Pwm_00105]
[ ]
[SWS_Pwm_00025]
[SRS_SPAL_00157[
- PWM 模块应根据上次对通道 <#Channel> 的 Pwm_EnableNotification 和 Pwm_DisableNotification 的调用,调用函数 Pwm_Notification_<#Channel>。
[SWS_Pwm_00026]
[SRS_SPAL_12129]
- 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 模块才应重置与通知相关的中断标志。
IoHwAb_Pwm_NotifyReadyForPowerState<#Mode>
[SWS_Pwm_91005]
[ ]
[SWS_Pwm_00199]
[ ]
- 如果 PWM 驱动器配置为支持具有异步转换的电源状态管理,则应调用此 API 向 IoHwAbs 模块发出电源转换准备阶段完成的信号。
- 这是一个回调,这个 API 将在 IoHwAbs 组件中实现。
API 参数检查
[SWS_Pwm_10051]
[SRS_BSW_00323]
[SRS_BSW_00386]
- 如果启用了 PWM 模块的开发错误检测,并且发生开发错误,则相应的 PWM 功能应将错误报告给默认错误跟踪器。
[SWS_Pwm_20051]
[SRS_BSW_00323]
[SRS_BSW_00386]
- 如果启用了 PWM 模块的开发错误检测,并且发生开发错误,则相应的 PWM 功能应跳过所需的功能,以避免任何数据或硬件寄存器的损坏,从而使该功能不采取任何措施。
[SWS_Pwm_00117]
[SRS_BSW_00406]
[SRS_BSW_00323]
[SRS_BSW_00386]
- 如果启用了 PWM 模块的开发错误检测:如果在调用 Pwm_Init 之前调用任何函数(Pwm_Init 除外),则被调用的函数将引发开发错误 PWM_E_UNINIT。
[SWS_Pwm_00045]
[SRS_BSW_00323]
[SRS_BSW_00386]
- 如果启用了 PWM 模块的开发错误检测:API Pwm_SetPeriodAndDuty() 应检查给定的 PWM 通道是否属于通道类类型 PWM_VARIABLE_PERIOD。如果不是,则应调用开发错误 PWM_E_PERIOD_UNCHANGEABLE。
[SWS_Pwm_00047]
[SRS_BSW_00323]
[SRS_BSW_00386]
- 如果启用了 PWM 模块的开发错误检测:PWM 功能应检查参数 ChannelNumber,如果参数 ChannelNumber 无效,则引发开发错误 PWM_E_PARAM_CHANNEL。
序列图
初始化
设置占空比
设定周期和占空比
将 PWM 输出设置为空闲
总体而言,本章定义了配置参数及其在容器中的聚类。
容器和配置参数
[SWS_Pwm_00203]
[ ]
- PWM 模块应拒绝实现不支持的分区映射配置。
Pwm
[SWS_Pwm_CONSTR_00001]
[ ]- PwmKernelEcucPartitionRef 引用的 ECUC 分区应是 PwmEcucPartitionRef 引用的 ECUC 分区的子集。
[SWS_Pwm_CONSTR_00002]
[ ]- 如果 PwmEcucPartitionRef 引用一个或多个 ECUC 分区,则 PwmKernelEcucPartitionRef 应具有 1 的多重性并也引用其中一个 ECUC 分区。
PwmPowerStateConfig
- 如果 PwmEcucPartitionRef 引用一个或多个 ECUC 分区,则 PwmChannelEcucPartitionRef 的多重性应大于零,并且也引用其中一个或多个 ECUC 分区。
评论
发表评论