前言
本文介绍CP AUTOSAR 架构下的Dio组件,基于S32K144芯片、NXP提供的MCAL包,使用EB Tresos工具进行配置的经验,不具体介绍芯片GPIO外设的功能。
Dio组件实现MCU的普通IO的读写、翻转,为上层组件IoHwAb提供接口。
Dio组件位于I/O Drivers层里。
一、原理解析
Dio组件不设置芯片引脚的功能,只提供普通IO读写、翻转功能。
Dio组件所有读写函数是可重入的,可以被上层模块并发访问。
Dio组件支持三种读写:DIO Channles、DIO Ports、DIO Channle Groups,Channle就是某个端口的单个PIN,Port就是整个端口,Channle Group就是某个端口的多个PIN,平常我们使用最多的是DIO Channles。
二、代码架构
Dio组件源文件有Dio.c、Dio_Gpio.c,头文件有Dio.h、Dio_EnvCfg.h、Dio_Gpio.h、Dio_Ipw.h、Reg_eSys_Gpio.h,配置文件有Dio_Cfg.c、Dio_Cfg.h。
其中Dio_Gpio.c实现芯片寄存器的操作,Dio.c封装一层供外部组件使用,Dio_Cfg.h里提供每个Channle、Port ID、Channle Groups的编号。
三、主要变量和类型描述
无。
四、主要代码描述
供外部使用的接口为:
(一)、Dio_ReadChannel、Dio_WriteChannel实现对单个PIN进行读写,入参ChannelId编号在Dio_Cfg.h里,Level为单个PIN的高或低。
(二)、Dio_FlipChannel实现对单个PIN的翻转操作,Channel的ID编号在Dio_Cfg.h里。
(三)、Dio_ReadPort、Dio_WritePort实现对整个Port端口的读写,PortId编号在Dio_Cfg.h里,Level为一组端口的值。
(四)、Dio_ReadChannelGroup、Dio_WriteChannelGroup实现对一组端口里的多个PIN进行读写,ChannelGroupIdPtr在Dio_Cfg.h里,Level为一组端口的值,Dio_ChannelGroupType的port为某个端口的ID号,u8offset为偏移量,mask为Port的掩码。
Dio_WriteChannelGroup和Dio_WritePort最大的区别就是Dio_WritePort对整个端口进行赋值,Dio_WriteChannelGroup则对端口里的多个PIN进行赋值。
.
五、EBTresos配置
主要配置如下:
主要配置每个端口使用什么PIN脚,Name处填写PIN的名字,Dio Channel Id处填写PIN实际的ID。
PIN的实际ID:
最后点击生成,Dio_Cfg.h里便有PIN的ID号
六、使用范例
无。
七、参考资料
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SWS_DIODriver.pdf
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SRS_DIODriver.pdf
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf
总结
使用Dio组件之前,必须先使用Port组件对引脚进行初始化。