前言
本文介绍CP AUTOSAR 架构下的Port组件,基于S32K144芯片、NXP提供的MCAL包,使用EB Tresos工具进行配置的经验,不具体介绍芯片端口外设的功能。
Port组件实现MCU的端口的设置,可以设置端口的方向、初始化电平、端口属性、可以设置端口模式为普通IO、ADC、SPI、SCI、PWM等。
Port组件为上层组件IoHwAb提供接口。
Port组件位于I/O Drivers层里。
一、原理解析
端口组件实现PIN脚的初始化,初始化时可以设置PIN脚的方向、初始电平、是否允许在运行中改变PIN脚方向、是否允许在运行中改变PIN脚模式等。
在端口组件执行初始化后就可以调用Dio组件的函数来对普通GPIO进行读写操作。
二、代码架构
Port组件里有Port_Ipw.c、Port.c、Port_Port_Ci.c源文件,其中Port_Port_Ci.c实现底层寄存器的操作,Port.c实现最后的封装供外部组件使用。
三、主要变量和类型描述
实现端口初始化的就是Port_PBcfg.c里的Port_aPinConfigDefault,Port_aPinConfigDefault的类型就是Port_Port_Ci_PinConfigType:
结构体成员Pin为本芯片引脚的实际ID号,可以从芯片原理图看出,从PTA0开始ID号为0,一直到PTE16ID号为144。
结构体成员u32PCR为实际PCR寄存器的值,PCR寄存器可以设置PIN脚的上下拉、复用功能、IO中断等。
结构体成员u8PDO为本PIN脚设为输出时的初始电平,值为PORT_PIN_LEVEL_LOW_U8便是低电平,值为PORT_PIN_LEVEL_HIGH_U8便是高电平,值为PORT_PIN_LEVEL_NOTCHANGED_U8便是不动作,设置的前提是bGPIO值为TRUE。
结构体成员ePDDir为本PIN脚的方向,值为PORT_PIN_DISABLED不设置,值为PORT_PIN_IN设置输入,值为PORT_PIN_OUT设置输出,值为PORT_PIN_HIGH_Z设置高阻状态,设置的前提是bGPIO值为TRUE。
结构体成员bGPIO为本PIN脚是否进行初始化,值为TRUE,那么初始化本PIN脚的方向、初始电平。
四、主要代码描述
Port_Init()设置引脚的初始化,一般在程序开始便调用进行引脚初始化了。
Port_SetPinMode()设置引脚的模式,入参Pin、Mode的宏定义选择可以在Port_Cfg.h里选择。
五、EBTresos配置
主要配置如下:
在EB里的配置,选择添加引脚,添加后PortPin Id处填索引号,PortPin Pcr处填芯片引脚的ID号,其他填是否上下拉、引脚方向、初始电平。
六、使用范例
无。
七、参考资料
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SRS_PortDriver.pdf
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SWS_PortDriver.pdf
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf
总结
EB里没看到有关于IO中断的配置,但是可以通过手动修改Port_PBcfg.c里的Port_aPinConfigDefault的u32PCR的值来实现IO中断的设置,u32PCR的值就是最终给PORTx_PCRn寄存器赋予的值。