2358|0

117

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

精华总结:一网打尽AUTOSAR MCAL模块 [复制链接]

 

一、简介

MCAL:微控制器抽象层;位于BSW层中的最下层;

 

MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动:

 

二、MCAL的配置(EB-Tresos)

1.PORT
我理解的PORT:MCAL层中的IO驱动组中的pin脚总体配置:

Port就是芯片上的每个pin脚,可以配置成DIO ADC PWM ICU等单引脚的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他功能的单个pin脚功能;

总之,PORT就是芯片上的具体的某个引脚。

配置如下:

 

2.DIO

DIO一共分为五组,如下图所示:

EEWORLDIMGTK2
 

Dio没什么好配置的,只需要按照对应的ChannelId 更改下Name就好了。

3.ADC [芯片XX]只有一个ADC内含8个通道,最大支持12位精度(8,10,12);

EEWORLDIMGTK3
 

AdcPrescale: [公司]的[芯片XX]是填的199, BaseClock = 400MHz ,基于400MHz进行分频。

EEWORLDIMGTK4
 
EEWORLDIMGTK5
image-20240107211227399

4.CAN

4.1 CAN-General

EEWORLDIMGTK6
 
EEWORLDIMGTK7
 
EEWORLDIMGTK8
 
EEWORLDIMGTK9
 

4.2 CAN-CanHardwareObject

EEWORLDIMGTK10
 
 
EEWORLDIMGTK11
 
 

5.SPI

EEWORLDIMGTK12
 
EEWORLDIMGTK13
 
EEWORLDIMGTK14
 

6.MCU

EEWORLDIMGTK15
 
EEWORLDIMGTK16
 
EEWORLDIMGTK17
 
EEWORLDIMGTK18
 
EEWORLDIMGTK19
 

我们使用了哪些外设模块就需要在此处Enable它,否则会导致该模块工作不正常或者初始化异常。

EEWORLDIMGTK20
 

如果勾选了外设,则该外设只能由SECURE Doamin访问和使用,SAFETY Domain失去该模块的使用权限。

配置Mcu_InitRamSection的大小和写入值。(该截图里的值和[公司]的配置是一样的)。

7.Gpt
在[芯片XX] SOC 处理器中GPT模块配置的时钟是可以给其他模块使用的,例如在现有的项目开发中,Gpt有用作Os Timer, System timer ,和电源芯片定时喂狗中断等。

对于ICU模块来说只能使用GPT的配置作为时钟源。

[芯片XX]一共有8个Timer, 每个Timer有6个Channel,这6个Channel共享一个Timer时钟源和分频,换句话说,在APP中同一个Timer中最后生效的时钟源和分频是被最后一个初始化的Channel决定的。

6个Channel分别是:GPT_HW_TIMER_G0/GPT_HW_TIMER_G1/GPT_HW_LOCAL_A/GPT_HW_LOCAL_B/GPT_HW_LOCAL_C/GPT_HW_LOCAL_D, A/B/C/D共享一个中断号,G0/1共享一个中断号。支持使用同一个Timer的不能Channel,即使中断号共享[芯片XX]会自动识别到底是哪一个Chnnale触发的中断,进而去调用你所配置的Notification.

EEWORLDIMGTK21
 
EEWORLDIMGTK22
 

Gpt基础配置,选择是否Enable某些功能和函数。

EEWORLDIMGTK23
 
EEWORLDIMGTK24
 

GptClockReference: 选择GPT可以选择配置的时钟源,只能选择已经在MCU模块配置好的时钟。

8.ICU 对于ICU模块来说只能使用GPT的配置作为时钟源

EEWORLDIMGTK25
 

ICU基础配置,选择是否Enable某些功能和函数.

EEWORLDIMGTK26
 

9.PWM [芯片XX] 一共有8个PWM模块,每个pwm模块有四个子Channel,分别是A/B/C/D,四个子Channel共享同一个溢出值,所以子Channel的周期都一样的,占空比可以单独控制。更详细的可以参考官方文档。

7
 

PWM基础配置,选择是否Enable某些功能和函数

PwmIndex:暂时用不到

 
PwmHwModule: PWM_MODULE1/PWM_MODULE2/…/PWM_MODULE8
PwmPeriodDefault:设置PWM默认周期,我们通常在这里配置为0,如果配置成其他值且默认占空比也有配置,则初始化之后会立即输出PWM波
PwmMcuClockReferencePoint:Pwm的时钟源选择,只能选择在Mcu模块中已存在的配置,目前只能选择400MHz
PwmModuleFrequency:不可修改
PwmHwModulePrescaler: Pwm的分频系数

     400MHz/(PwmHwModulePrescaler+1) = 期望频率

 

PwmSubChannelId: 子ChannelID 0/1/2/3

DutycycleDefault: 默认占空比,通常配置为0x0

Polarity: Pwm的极性,根据项目需求配置

IdleState: Pwm空闲状态,通常与Polarity相反。

 

三. 项目实践

1.说明:
项目实践中,MCAL需要配置两个新增功能,pwm和icu输入捕获。

功能描述:增加LSS8_EN(E12) / DI_AC_Wake(J4)PWM通道

(1)配置一个pin脚,让其输出pwm波形

(2)配置一个pin脚,让其捕获一个pwm波形

  1. 查看PinMap表格:

0
 

如图excel-PinMap表格描述了单片机中的两个引脚功能:

第一个:CPIO_C10引脚,配置成MIUX6的功能PWM3_CH2,Output模式的引脚,要输出信号,【功能描述】里的内容可以配置引脚名称时用。

第二个:GPIO_H3引脚,输入信号,使用的功能是MUX3,即TIM7_CH1,做输入捕获的功能。

3.配置第一个功能:PWM输出

(1)配置PORT

找到GPIO_C10 ,配置名称为DO_LSS8_Driver (截图示例为新建一个port)

 
 

根据【PinMap】文档中介绍的pin脚功能:配置。

(2)配置DIO

因为这个引脚十一输出的引脚 所以需要配置DIO (相当于GPIO 输出高电平或者低电平)

image-20240107212653255

根据【PinMap】文档 ,查看MUX_0 = GPIO.IO58  ,配置IO58。

(3)配置PWM

引脚输出高电平的波形配置成PWM波形(有占空比 周期等参数的波形)

先配置模块,该芯片有8个PWM模块,每个模块有4个channel.

新增一个pwm模块(即第三个pwm模块) ,命名为PWMChannel_3 ,配置相关参数。

 
 

再配置子通道channel:

 

如上,完成【PinMap】文档中的PWM3CH2的配置。

(4)配置MCU

添加PWM3的使能

 

如上,完成对引脚GPIO_C10的配置。

4.配置第二个功能:ICU输入捕获

(1)配置PORT

如【PinMap】文档,找到GPIO_H3 ,配置如下:

 

(2)配置DIO

 

(3)配置GPT

0
 

需要用到时钟驱动(【PinMap文档中的MUX功能】) MUC3 = TIM7_CH1

 

【+】新增 ,配置如下:

 

(4)配置ICU

 
 

配置完成,生成代码即可。生成的代码是MCAL动态配置文件。

项目中,MCAL静态库和动态配置文件通常在不同路径下:

此帖出自汽车电子论坛
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表