AUTOSAR_SWS_PWMDriver

AUTOSAR_SWS_PWMDriver


简介和功能概述


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

每个 PWM 通道都链接到微控制器的硬件 PWMPWM 信号的类型(例如居中对齐、左对齐等)未在本规范中定义,而由实现决定。

驱动程序提供微控制器内部 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.hDet.h 和 。

[SWS_Pwm_70075]

[ ]
  • Pwm_Irq.c应包括Pwm.h

需求可追溯性



功能规格


一般行为

[SWS_Pwm_00088]

[ ]
  • PWM 模块中除 Pwm_InitPwm_DeInitPwm_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 组件)已经满足了来自 ECUSW 架构的所有约束,则驱动程序控制范围仅限于 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 模块请求的电源状态。
  • 为了避免出现不一致的电源状态情况,必须按给定顺序调用某些 APIPwm_SetPowerStatePwm_PreparePowerState),否则个错误将被存储(如果启用了 Det 跟踪)并中断操作。PWM 驱动程序会跟踪调用顺序。

[SWS_Pwm_00159]

[ ]
  • PWM 驱动程序应跟踪 API Pwm_SetPowerState 和 Pwm_PreparePowerState 的调用顺序。如果第个在第个之前被调用,则应存储 Det 条目并且不执行该操作。

[SWS_Pwm_00160]

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

[SWS_Pwm_00161]

[ ]
  • 初始化后,如果 PwmLowPowerStatesSupport 设置为 TRUEFALSE ?),则模块的电源状态应始终为 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) AbsolutePeriodTimeRelativeDutyCycle) >> 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]

[ ]

[SWS_Pwm_00200]

[ ]
  • 如果在个或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_HIGHPWM_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 驱动器提供的所有服务都是同步的,除非配置了异步电源转换管理。如果配置了同步电源转换管理,则不会生成任何计划的 API

Pwm_Main_PowerTransitionManager

[SWS_Pwm_00189]

[ ]

[SWS_Pwm_00190]

[ ]
  • API 执行完成 Pwm_PreparePowerState() 请求的电源状态转换所需的任何非立即操作。

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

[ ]
  • 仅当配置参数 PwmNotificationSupportedON 时,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 驱动器配置为支持具有异步转换的电源状态管理,则应调用此 APIIoHwAbs 模块发出电源转换准备阶段完成的信号。
  • 这是一个回调,这个 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 输出设置为空闲



获取 PWM 输出状态



使用 PWM 通知



配置规范


总体而言,本章定义了配置参数及其在容器中的聚类。

容器和配置参数

[SWS_Pwm_00203]

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

Pwm




PwmGeneral













[SWS_Pwm_CONSTR_00001]

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

[SWS_Pwm_CONSTR_00002]

[ ]
  • 如果 PwmEcucPartitionRef 引用一个或多个 ECUC 分区,则 PwmKernelEcucPartitionRef 应具有 1 的多重性并也引用其中一个 ECUC 分区。

PwmPowerStateConfig





PwmChannel












[SWS_Pwm_CONSTR_00003]

[ ]
  • 如果 PwmEcucPartitionRef 引用个或ECUC 分区,则 PwmChannelEcucPartitionRef 的多重性应于零,并且也引用其中个或ECUC 分区。

PwmChannelConfigSet




PwmConfigurationOfOptApiServices









评论

此博客中的热门博文

ISO 14229-1-2020

AUTOSAR_SWS_CANDriver

Linux Driver Char Device 笔记

AUTOSAR_SWS_PortDriver

AUTOSAR_SWS_ECUStateManager

EB - MCAL - MCU

AUTOSAR_SWS_ICUDriver

EB - MCAL - PWM