【Autosar】MCAL - PORT(NXP - S32K14x)

2023-11-11 06:41
文章标签 autosar port nxp mcal s32k14x

本文主要是介绍【Autosar】MCAL - PORT(NXP - S32K14x),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • MCAL - PORT(NXP - S32K14x)
    • 1. 概述
    • 2. API
    • 3. 配置介绍
      • 3.1 配置项
      • 3.2 General
        • 3.2.1 NotUsedPortPin
        • 3.2.2 PortGeneral
      • 3.3 引脚配置
        • 3.3.1 PortContainer
        • 3.3.2 PortPin

MCAL - PORT(NXP - S32K14x)

MCAL - 汇总

配置工具:EB Tresos Studio
芯片类型:S32K146

1. 概述

Port模块主要功能在于芯片引脚的配置。

2. API

函数描述
Port_InitPort模块初始化
Port_SetPinDirection设置引脚方向
Port_RefreshPortDirection刷新引脚方向配置
Port_GetVersionInfo获取Port模块版本号
Port_SetPinMode设置引脚模式

3. 配置介绍

3.1 配置项

PortPin Mode:引脚模式

PortPin Direction:引脚输入/输出方向

PortPin Level Value:引脚输出电平

PortPin DSE:引脚驱动能力

在这里插入图片描述

PortPin PE:上拉/下拉使能

在这里插入图片描述

PortPin PS:上拉/下拉

在这里插入图片描述

PortPin Pcr:引脚对应寄存器序号

针对不同的芯片,参考手册已经给出了每个端口可用的引脚数。这里要注意的是每个端口都是有32个PCR寄存器,各芯片启用都是不一致的,例如s32k146PORT A只是启用了32个中的25个。各个芯片具体的配置可以在S32K-RM参考手册的附件中找到

在这里插入图片描述

计算方式:pcr index = 32 * (PORT Index) + Pin

示例:PTE3 = 32 * 4 + 3 = 131

如下图所示,在【S32K-RM.pdf】附件中可以找到对应芯片的引脚功能。

在这里插入图片描述

3.2 General

3.2.1 NotUsedPortPin

该部分是为了统一配置未使用的端口。为了降低MCU功耗,可以设置成以下配置:

在这里插入图片描述

3.2.2 PortGeneral

该部分是使能Api,根据需求开启或关闭

在这里插入图片描述

Port SetPinMode Does Not Touch GPIO Levels:设置引脚模式时不将引脚电平设置为初始值

在这里插入图片描述

Port_Ipw_SetPinMode函数中可以看到下面这段代码,当引脚配置为输出模式的时候,若Port SetPinMode Does Not Touch GPIO Levels为false,则会将输出电平配置为PortPin Level Value设置的状态。

#if (STD_OFF == PORT_SETPINMODE_DOES_NOT_TOUCH_GPIO_LEVEL)
if((PORT_PIN_IN != ePadDirection) && (PORT_PIN_HIGH_Z != ePadDirection))
{Port_Port_Ci_SetGpioPadOutput(PinIndex, pConfigPtr);
}
#endif /* (STD_OFF == PORT_SETPINMODE_DOES_NOT_TOUCH_GPIO_LEVEL) */    

3.3 引脚配置

3.3.1 PortContainer

PortContainer只是一个容器,为了让可以理解为一个目录,为了方便快速找到配置的引脚,对引脚做分类管理。例如我这里建了一个GPIO容器,该容器里面专门配置GPIO模式的引脚,然后建了一个JTAG的容器,该容器里面专门配置JTAG引脚。

在这里插入图片描述

配置完引脚后,记得刷新容器中的引脚个数

在这里插入图片描述

3.3.2 PortPin

该部分用于引脚配置,在PortPin中可以创建引脚配置,双击序号进入详细配置。

在这里插入图片描述

在详细配置界面中配置引脚的PCR序号引脚模式上拉/下拉引脚方向引脚输出电平

示例:PTE3 输出高电平:

在这里插入图片描述

PortPin Direction Changeable:是否能修改引脚方向(前提是勾选Port Development Error Detect

Port_Port_Ci_SetPinDirection函数中可以看到如下代码,bDC就是该配置项配置的值,在设置引脚方向之前会先判断这个值。

#if (STD_ON == PORT_DEV_ERROR_DETECT)/* Check the Direction changeability option *//* @violates @ref Port_Port_Ci_C_REF_7 Violates MISRA 2004 Required Rule 17.4 */if (((boolean)TRUE == pConfigPtr->pUsedPadConfig[PinIndex].bDC) || ((uint16)0 != (u16PinChangeDirFlagWord & (uint16)(1UL<<u8PinDescBitOffset)))){
#endif /* (STD_ON == PORT_DEV_ERROR_DETECT) *//* Enter critical region */SchM_Enter_Port_PORT_EXCLUSIVE_AREA_03();/* Configures Port Pin as Output */if (PORT_PIN_OUT == eDirection){/* @violates @ref Port_Port_Ci_C_REF_5 Violates MISRA 2004 Required Rule 11.1, cast from unsigned long to pointer. *//* @violates @ref Port_Port_Ci_C_REF_10 A cast should not be performed between a pointer type and an integral type. */REG_BIT_SET32(GPIO_PDDR_ADDR32(GPIO_PORT_U32(Pin)), (uint32)(1UL << GPIO_CHANNEL_U32(Pin)));}/* Configures Port Pin as Input or High-Z*/else if ((PORT_PIN_IN == eDirection) || (PORT_PIN_HIGH_Z == eDirection)){/* @violates @ref Port_Port_Ci_C_REF_5 Violates MISRA 2004 Required Rule 11.1, cast from unsigned long to pointer. *//* @violates @ref Port_Port_Ci_C_REF_10 A cast should not be performed between a pointer type and an integral type. */REG_BIT_CLEAR32(GPIO_PDDR_ADDR32(GPIO_PORT_U32(Pin)), (uint32)(1UL << GPIO_CHANNEL_U32(Pin)));/* Check if the pin is HIGH-Z. In this case the driver needs to disable port input in PIDR register of GPIO IP*/if(PORT_PIN_HIGH_Z == eDirection){/* @violates @ref Port_Port_Ci_C_REF_5 Violates MISRA 2004 Required Rule 11.1, cast from unsigned long to pointer. *//* @violates @ref Port_Port_Ci_C_REF_10 A cast should not be performed between a pointer type and an integral type. */REG_BIT_SET32(GPIO_PIDR_ADDR32(GPIO_PORT_U32(Pin)), (uint32)(1UL << GPIO_CHANNEL_U32(Pin)));}}else{/* Do nothing */}/* Exit critical region */SchM_Exit_Port_PORT_EXCLUSIVE_AREA_03();
#if (STD_ON == PORT_DEV_ERROR_DETECT)}/* Direction changeability is NOT supported */else{PinDirError = (Std_ReturnType)E_NOT_OK;}
#endif /* (STD_ON == PORT_DEV_ERROR_DETECT) */

PortPin Mode Changeable:是否能修改引脚模式(前提是勾选Port Development Error Detect

Port_SetPinMode函数中可以看到如下代码,bMC就是该配置项配置的值,在设置引脚模式之前会先判断这个值。`

/* Check if port is initialized */
if (NULL_PTR == Port_pConfig)
{(void)Det_ReportError((uint16)PORT_MODULE_ID, (uint8)PORT_INSTANCE_ID, (uint8)PORT_SETPINMODE_ID, (uint8)PORT_E_UNINIT);
}
/* Check port pin validity */
else if (Pin >= (Port_PinType)Port_pConfig->u16NumPins)
{(void)Det_ReportError((uint16)PORT_MODULE_ID, (uint8)PORT_INSTANCE_ID, (uint8)PORT_SETPINMODE_ID, (uint8)PORT_E_PARAM_PIN);
}
/* Check port pin mode Unchangeable */
/** @violates @ref PORT_C_REF_5 Array indexing shall be the only allowed form of pointer arithmetic */
else if((boolean)FALSE == (boolean) Port_pConfig->pUsedPadConfig[Pin].bMC)
{(void)Det_ReportError((uint16)PORT_MODULE_ID, (uint8)PORT_INSTANCE_ID, (uint8)PORT_SETPINMODE_ID, (uint8)PORT_E_MODE_UNCHANGEABLE);
}
else#endif /* (STD_ON == PORT_DEV_ERROR_DETECT) */
{/* Sets the port pin direction */#if (STD_ON == PORT_DEV_ERROR_DETECT)u8PinModeError = (uint8)Port_Ipw_SetPinMode(Pin, Mode, Port_pConfig);#else(void)Port_Ipw_SetPinMode(Pin, Mode, Port_pConfig);#endif#if (STD_ON == PORT_DEV_ERROR_DETECT)if (PORT_E_PARAM_INVALID_MODE == u8PinModeError){(void)Det_ReportError((uint16)PORT_MODULE_ID, (uint8)PORT_INSTANCE_ID, (uint8)PORT_SETPINMODE_ID, (uint8)PORT_E_PARAM_INVALID_MODE);}#endif /* (STD_ON == PORT_DEV_ERROR_DETECT) */
}

参考资料:

S32K-RM.pdf - NXP

AUTOSAR_MCAL_PORT_UM[1].pdf - NXP

这篇关于【Autosar】MCAL - PORT(NXP - S32K14x)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388232

相关文章

基于Hypervisor智能驾舱的AUTOSAR解决方案

MENTOR嵌入式管理程序 目前,通常使用两种类型的管理程序(图6): Type 1本机管理程序:一种在硬件上本机运行的管理程序,因为它充当核心中的操作系统。Type 2托管虚拟机监控程序:此类型的虚拟机监控程序必须由另一个操作系统托管,并且仅负责使用主机操作系统可用的资源来虚拟化客户操作系统。 图6:虚拟机管理程序 虚拟化的工作原理是从硬件上运行的应用程序中抽象出物理硬件和设备。虚拟化流程管理

C++常见异常汇总(三): fatal error: google/protobuf/port_def.inc

文章目录 1、fatal error : sw/redis++/redis.h2、fatal error: dwarf.h: No such file or directory3、fatal error: elfutils/libdw.h: No such file or directory4、fatal error: libunwind.h: No such file or directo

Autosar(Davinci) --- 创建一个S/R类型的port(下)

前言:         前面章节我们讲解了S/R类型的Port如何创建,这一章节,我们着重讲一下生成的代码,以及我们如何添加代码让这些门与灯之间的关系产生连接。 一、CtSaDoor.c 在【Rte.c】的【IO_TASK】中我们可以看到,反复的判断Rte_Ev_Cyclic_IO_Task_0_200ms这个条件是否成立,当200ms到达时,调用RCtSaDoorReadDoor函数,去读

NXP,S32K1XX汽车通用微控制器开发笔记

文章目录 1. 概述2. 开发环境配置2.1 S32 Design Studio2.2 安装SDK2.3 新建demo工程2.4 字体配置2.5 按需求修改demo2.5.1 修改pin脚定义2.5.2 增加串口打印功能 2.6 编译代码2.7 debuger 配置 参考 1. 概述 S32K1系列32位微控制器(MCU)提供基于Arm® Cortex®-M的MCU,以及基

NXP S32DS IDE设置背景护眼色

NXP的S32DS是基于eclipse开发的,因此可以搜eclipse的一些配置,基本上可以设置。

AUTOSAR Adaptive与智能汽车E/E架构发展趋势

AUTOSAR Adaptive是一个面向现代汽车应用需求的标准,特别适用于那些需要高计算能力和灵活性的应用。以下是AUTOSAR Adaptive的典型特性: 高计算能力:AUTOSAR Adaptive支持使用MPU(微处理器),这些处理器的性能与PC或智能手机中的处理器相当。这样的高计算能力是实现半自动驾驶和其他复杂功能所必需的。动态更新和管理:AUTOSAR Adaptive的架构允

LIN协议栈 AUTOSAR架构下 状态管理

一、LIN State Manager 概述 功能 :负责控制 LIN 总线的通信状态,包括切换调度表(仅 LIN 主节点)、处理睡眠和唤醒操作、通知上层新状态等。约束 :每个 ECU 中最多有一个实例;所有关于调度表的操作仅适用于 LIN 主节点;适用于所有使用 LIN 的汽车领域。依赖关系 :依赖于 Communication Manager(ComM)和 LIN Interface(Lin

Autosar OS基础知识导图

Autosar OS基础 概述 Autosar简介 定义 Autosar(汽车开放系统架构)是由汽车制造商,软件供应商及其他相关厂商专为汽车软件合作指定的规范、标准、架构。 目标 建立一个独立于硬件的分层软件架构‌:‌实现高内聚、‌低耦合,‌提高软件的可重用性、‌可扩展性和互操作性。为应用实施提供一套方法论‌:‌包括制定无缝的软件架构堆叠流程,‌并将应用软件无缝整合至ECU中。制定统一的车

rl: (7) Failed to connect to get.rvm.io port 443: Operation timed out

问题:curl -L https://get.rvm.io | bash -s stable 命令失败 报错内容: rl: (7) Failed to connect to get.rvm.io port 443: Operation timed out 或 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection t

AUTOSAR开源OS——Trampoline的编译与使用(一)

环境准备 本人环境 CentOS7 代码下载 GitHub上去clone对应的代码到本地 git clone https://github.com/TrampolineRTOS/trampoline.git 编译goil 进入到如下目录/trampoline/goil/makefile-unix cd /trampoline/goil/makefile-unix 使用如下命令