【英飞凌IFX TC3XX Mcal】AutoSAR Mcal PWM模块配置详解(3)
首先我们要理解 AUTOSAR (AUTomotive Open System ARchitecture)是一个基于汽车的开源架构,而MCAL是其硬件抽象层,用于与底层硬件进行交互。
以下是一种基本的途径来配置MCAL PWM模块:
1. 了解PWM模块接口和架构
-
接口:
- Pwm_Init: 用于初始化PWM驱动。
- Pwm_DeInit: 用于去初始化PWM驱动。
- Pwm_SetDutyCycle: 用于设置PWM通道的占空比。
- Pwm_SetPeriodAndDuty: 用于设置PWM通道的周期和占空比。
- Pwm_SetOutputToIdle: 用于设置PWM输出到空闲状态。
-
架构:
- Layered Architecture:
- Application Layer: 包含AUTOSAR的SWC(软件组件)和RTE(运行时环境)。
- Runtime Environment (RTE): 作为SWC与Bsw之间的接口。
- Basic Software (Bsw): 包含MCAL和ECUAL。
- Layered Architecture:
2. 配置PWM模块
配置PWM模块涉及配置MCAL模块以与目标硬件正确交互。这样的配置通常涉及以下步骤:
2.0 PORT模块配置(配置PWM之前需要先对PORT进行端口复用为ATOM/TOM)
2.0.1 配置PORT模块
2.0.1 查DataSheet找到PWM对应的片选
2.1 PWM general通用配置
- PwmDevErrorDetect:将默认错误跟踪器(Det)的检测和通知开关打开或关闭。一版在开发阶段打开,在PWM发生错误的时候,定位到错误信息。
- PwmDutycycleUpdatedEndperiod:启用开关,以便在当前周期结束时更新占空比参数。PWM_VARIABLE_PERIOD通道类不会受到此参数设置的影响。
- PwmIndex:指定此模块实例的InstanceId。如果只有一个实例存在,则其Id应为0。
- PwmNotificationSupported:切换开关以表示支持通知。
- PwmChannelCoherentSelection:启用开关,以在当前周期结束时逐通道更新周期/占空比参数。打开此参数将使PwmDutycycleUpdatedEndperiod和PwmPeriodUpdatedEndperiod过时。
- PwmDutyShiftInTicks:PWM占空比类型开关:禁用 - 占空比和移位值以百分比表示。启用 - 占空比和移位值以计时器滴答数表示。用户必须根据此选择输入正确的PwmDutycycleDefault和PwmShiftValue值。
- PwmPowerStateAsynchTransitionMode:启用/禁用PWM驱动程序对异步电源状态转换的支持。
- PwmInitCheckApi:将服务Pwm_17_GtmCcu6_InitCheck()从代码中添加/删除。
- PwmMultiCoreErrorDetect:将多核错误检测和通知的开关打开或关闭。
- PwmPeriodUpdatedEndperiod:启用开关,以便在当前周期结束时更新周期参数。PWM_FIXED_PERIOD、PWM_FIXED_PERIOD_SHIFTED和PWM_FIXED_PERIOD_CENTER_ALIGNED通道类不会受到此参数设置的影响。
- PwmHandleShiftByOffset:启用特殊处理移位通道的开关。
- PwmEnable0Or100DutyNotification:开关用于启用变量和固定周期通道的0%和100%占空比的通知。
- PwmSafetyEnable:启用/禁用安全检查和所有相关通知。
2.2 配置PWM Channel(重点)
2.2.1 配置PWM Channel
2.2.2 配置具体参数
2.2.3 PwmChannelClass配置PWM输出模式
2.2.4 设置回调函数Notification
2.2.5 配置GTM通道
这里面为什么选择Atom4_6,是由于之前Port模块P20_0端口复用为Tout59,这里我们查3xx_Ts手册,23.25.6.1 GTM Outputs to Port Connections该章节,找到对应的P20_0,选择自己想要的GTM输出的通道,本例选择的是Atom4_6。具有高精度的PWM输出
2.3 配置MCU的GTM模块
2.3.1 MCU模块中,这两部分涉及到GTM相关的配置
2.3.2 配置相关的GTM分频系数
这里最终算出的分频系数CmuConf1 是 2.5MHz,Tick精度为1/2.5Mhz = 40ns,在乘以之前在PWM模块配置的精度125,正好是50us,即20KHz
2.3.3 选择Atom4的配置项
2.3.3 将Atom4_6映射到对应的Port_pin引脚上
2.3.4 配置硬件相关的GTM -> McuHardwareResourceAllocationConf
2.3.5 将ATOM4_6选为PWM功能
3. 编写测试代码
以下是一个简化的AUTOSAR标准下PWM的测试代码示例。注意,这只是一个高级概述,实际代码将依赖于您的硬件和软件配置:
#include "Pwm.h"
void main(void)
{
// 初始化PWM
Pwm_Init(&Pwm_Config);
// 设置PWM通道0的周期和占空比
Pwm_SetPeriodAndDuty(0, 2000U, 1000U);
while(1)
{
// 循环体,您可以根据需要添加其他代码
}
}
在上面的代码中:
- 我们首先包含
Pwm.h
头文件,它包含PWM驱动的API定义。 - 在
main
函数中,我们首先调用Pwm_Init
函数来初始化PWM驱动,传递一个指向PWM配置结构的指针。 - 然后我们调用
Pwm_SetPeriodAndDuty
函数来设置PWM通道0的周期和占空比。 - 最后,我们进入一个无限循环,在这里你可以添加更多的代码来执行其他任务。
请注意,你需要配置PWM配置结构Pwm_Config
,这将包含你在EB tresos Studio中配置的所有PWM配置。
SetPeriodAndDuty`函数来设置PWM通道0的周期和占空比。
- 最后,我们进入一个无限循环,在这里你可以添加更多的代码来执行其他任务。
请注意,你需要配置PWM配置结构Pwm_Config
,这将包含你在EB tresos Studio中配置的所有PWM配置。
我希望这对你有所帮助!如果你有任何更具体的问题,或者需要更多的细节,请告诉我!