【英飞凌IFX TC3XX Mcal】AutoSAR Mcal DIO模块配置详解(2)

【英飞凌IFX TC3XX Mcal】DIO模块配置详解(2)

1.概述

DIO(Digital Input Output), 数字输入输出。

DIO驱动程序使用端口外设。端口外设的使用责任由AUTOSAR分为两个模块。PORT驱动程序配置和设置端口引脚的属性。DIO驱动程序读取或写入端口引脚。DIO驱动程序提供基于端口、通道和通道组的内部通用输入/输出接口的读写访问。在DIO驱动程序中,所有读写服务都不是缓冲的。通道指单个通用输入/输出引脚,端口指硬件分组的DIO通道,而通道组则表示由逻辑组合形成的多个相邻dio通道所代表的逻辑组别。请注意,一个DIO通道组应该属于一个DIO端口。

下图标识了DIO驱动程序的功能以及MCAL软件层中PORTDriver和DIO驱动程序的结构。

在这里插入图片描述

上图来自于AutoSAR官方文档:AUTOSAR_SWS_DIODriver.pdf

这张图,我建议大家从上往下进行观看:

  1. 最上面是IO硬件抽象层IO HW Abstraction Software,在这一层,所有的Mcal IO相关的接口API,会在这一层抽象给上层RTE,将底层进行封装。
  2. 下一层是MCAL层Mcal Software,在这一层,通常是我们用EB配置完Mcal后,所调用的函数接口,Mcal会在这一层,把所有硬件相关的寄存器和功能进行抽象和封装,在该层进行相应的功能实现。
  3. 在其下面一层是是寄存器层On-Chip Registers,在这一层,通过写相应的寄存器来,来控制芯片。
  4. 最底层是芯片的硬件On-Chip Hardware,从相应的Port_Pin中输出高低电平,是硬件的最直接表现。
2. Mcal 配置详解
2.1 Dio General

在这里插入图片描述

  1. DioDevErrorDetect:将默认错误跟踪器(Det)的检测和通知开关打开或关闭,在开发阶段检测是否出现驱动或配置的问题。建议在配置的过程开启
  2. DioMaskedWritePortApi:在代码中添加/删除服务Dio_MaskedWritePort()。不常用
  3. DioSafetyEnable:启用/禁用安全检查和所有相关通知。
  4. DioFlipChannelApi:在代码中添加/移除服务Dio_FlipChannel()。调用该函数的作用,是反转该DIO Channel的电平。
  5. DioVersionInfoApi:中添加/移除了服务Dio_ GetVersionInfo()。打印版本信息,一般不需要。
2.2 Dio Port

在这里插入图片描述

通过添加Dio_port,并且根据自己需要配的Port端口,更改成相应的DioPortId的值,即可开启相应port端口的DIO功能。

2.3 DioChannel

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dActnSM9-1693202849098)(2023-08-28-13-33-49.png)]

添加相应的Channel,即对于的Port_pin的通道,之后在更改DioChannelId的值,则开启对于Port_Pin的GPIO功能,即可调用Dio模块Read\Write Channel的函数。

以上即为Dio 模块的Mcal配置,比较简单,应该算是Mcal中最简单的模块了。

3. 测试

Mcal配置完成后,Dio模块生成两个文件,

  1. Dio_Cfg.h
  2. Dio_Lcfg.c

其中Dio_Cfg.h 里面对相应的Port_Pin进行了定义, 根据在Mcal中配置的名字, 对相应的Port_Pin进行操作.

3.1 Dio_WriteChannel()函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBxXVeNQ-1693202849098)(2023-08-28-13-53-34.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZudraUKv-1693202849098)(2023-08-28-14-02-05.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w2kqfXQQ-1693202849099)(2023-08-28-14-02-53.png)]

// 设置该Port_Pin为低电平
Dio_WriteChannel(DioConf_DioChannel_1, 0);

// 设置该Port_Pin为高电平
Dio_WriteChannel(DioConf_DioChannel_1, 1);
3.2 Dio_ReadChannel()函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBbs0ij2-1693202849099)(2023-08-28-14-04-33.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2zZREyW-1693202849099)(2023-08-28-14-04-09.png)]

// 读出该Port_Pin的电平
Dio_ReadChannel(DioConf_DioChannel_2, 0);

// 读出该Port_Pin的电平
Dio_ReadChannel(DioConf_DioChannel_2, 0);

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾格北峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值