前言
本文介绍CP AUTOSAR 架构下的Pwm组件,基于S32K144芯片、NXP提供的MCAL包,使用EB Tresos工具进行配置的经验,不具体介绍芯片Pwm外设的功能。
Pwm组件实现Pwm的驱动,具有设置占空比、周期等功能,为上层组件IoHwAb提供接口。
Pwm组件位于I/O Drivers层里。
一、原理解析
Pwm组件有以下几个概念:
(一)、PWM Channel
软件逻辑上的通道,每个软件通道只能跟一个硬件PWM通道关联。
(二)、PWM Idle State
PWM输出停止后,PWM引脚电平的状态。
(三)、PWM Polarity
PWM输出开始时,PWM引脚电平的状态。
(四)、PWM Power Mode
PWM电源模式支持两种模式,FULL POWER、LOW POWER,PWM初始化时是FULL POWER模式,LOW POWER模式下PWM硬件停止工作。
总的来说Pwm组件还没有很复杂的机制和概念。
二、代码架构
Pwm.c实现AUTOSAR中PWM的接口,Pwm_Ftm.c实现芯片上FTM用作PWM输出的功能、寄存器配置,最终通过Pwm_Ipw.c封装给Pwm.c,要注意Gpt或其他组件也有用到FTM外设,同一个FTM单元不能用到相同的组件里。
三、主要变量和类型描述
(一)、Pwm_PowerStateRequestResultType
此类型在PowerState切换时起作用,有以下几个成员:
PWM_SERVICE_ACCEPTED
服务执行成功,比如在调用Pwm_SetPowerState()、Pwm_PreparePowerState()或其他操作Power时如果操作成功就输出PWM_SERVICE_ACCEPTED。
PWM_NOT_INIT
Pwm组件没有执行Pwm_Init()时如果其他单元执行就输出PWM_NOT_INIT。
PWM_SEQUENCE_ERROR
如果没有调用Pwm_PreparePowerState()就执行Pwm_SetPowerState()或执行Pwm_PreparePowerState()时输入电源模式和当前电源模式一样就输出PWM_SEQUENCE_ERROR。
PWM_HW_FAILURE
PWM硬件通道有异常时输出PWM_HW_FAILURE。
PWM_POWER_STATE_NOT_SUPP
要设置的电源模式超出范围时输出PWM_POWER_STATE_NOT_SUPP。
PWM_TRANS_NOT_POSSIBLE
电源模式不能从当前模式切换到目标模式时输出PWM_TRANS_NOT_POSSIBLE。
四、主要代码描述
(一)、Pwm_SetDutyCycle()
设置PWM通道的占空比,输入参数u16DutyCycle取值范围为0x00–0x8000表示占空比0%到100%。
(二)、Pwm_SetPeriodAndDuty()
设置PWM通道的周期和占空比,输入参数Period为频率,如果这个通道的时钟为80000000HZ,想设置的频率为125KHZ,那么Period就要写为80000000/125000。
(三)、Pwm_PreparePowerState()
设置Pwm组件的目标电源模式,设置完后当前电源模式不会立即生效,要调用Pwm_SetPowerState才生效,输入参数ePowerState为设置的电源模式,输出参数pResult为Pwm_PowerStateRequestResultType类型的结果。
(四)、Pwm_GetTargetPowerState()
获取Pwm组件的目标电源模式,输出参数pTargetPowerState为目标电源模式,输出参数pResult为Pwm_PowerStateRequestResultType类型的结果。
(五)、Pwm_GetCurrentPowerState()
获取Pwm组件的当前电源模式,输出参数pCurrentPowerState为当前电源模式,输出参数pResult为Pwm_PowerStateRequestResultType类型的结果。
(六)、Pwm_SetPowerState()
将当前电源模式更新为目标电源模式,输出参数pResult为Pwm_PowerStateRequestResultType类型的结果。
五、EBTresos配置
主要配置如下:
配置PWM的极性、空闲状态、默认周期、默认占空比、时钟频率、底层外设通道等。
六、使用范例
无。
七、参考资料
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_SRS_PWMDriver.pdf
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_SWS_PWMDriver.pdf
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf
总结
要注意使用的底层外设不能和其他组件有冲突。