【Autosar】MCAL - DIO(NXP - S32K14x)

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

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

文章目录

  • MCAL - DIO(NXP - S32K14x)
    • 1. 概述
    • 2. API
    • 3. 配置介绍
      • 3.1 General
      • 3.2 DioPort
      • 3.3 DioChannel
      • 3.4 DioChannelGroup

MCAL - DIO(NXP - S32K14x)

MCAL - 汇总

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

1. 概述

DIO模块提供接口读/写引脚的电平状态。

2. API

函数描述
Dio_ReadChannel读取通道电平状态
Dio_WriteChannel设置通道电平状态
Dio_ReadPort读取端口电平状态
Dio_WritePort设置端口电平状态
Dio_ReadChannelGroup读取通道组电平状态
Dio_WriteChannelGroup设置通道组电平状态
Dio_GetVersionInfo获取DIO模块版本号

3. 配置介绍

不管是端口通道通道组它的本质都只是配置引脚输出电平状态。

在这里插入图片描述

  • Port:端口
  • Channel:引脚
  • Channel Group:由同一端口中若干个连续引脚组成

DIO为以上3种都提供了对应的访问接口,个人认为这样的设计只是为了批量操作,比如我要一次性读出RTA中所有的引脚电平状态,调用Dio_ReadPort即可返回一个32位的数据,每一位代表对应的引脚电平状态。比如我要一次性读取同一个端口中指定的且连续的引脚,那可以调用Dio_ReadChannelGroup实现局部读取操作。

3.1 General

使能API

在这里插入图片描述

Dio Reverse Port Bits:翻转引脚

在这里插入图片描述

Dio Read Zero For Undefined Port Pins:未定义引脚电平状态读取返回为0

在这里插入图片描述

FUNC (Dio_PortLevelType, DIO_CODE) Dio_Gpio_ReadPort
(CONST(Dio_PortType, AUTOMATIC) PortId
)
{VAR(Dio_PortLevelType, AUTOMATIC) PortLevel = (Dio_PortLevelType) STD_LOW;/* @violates @ref Dio_Gpio_C_REF_2 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*//* @violates @ref Dio_Gpio_C_REF_6 A cast should not be performed between a pointer type and an integral type. */PortLevel = (Dio_PortLevelType)((REG_READ32(GPIO_PDIR_ADDR32(PortId))));
#if (STD_ON == DIO_READZERO_UNDEFINEDPORTS)/* @violates @ref Dio_Gpio_C_REF_2 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*//* @violates @ref Dio_Gpio_C_REF_6 A cast should not be performed between a pointer type and an integral type. */PortLevel =(Dio_PortLevelType)(PortLevel & Dio_aAvailablePinsForRead[PortId]);
#endif
#if (STD_ON == DIO_REVERSEPORTBITS)/* @violates @ref Dio_Gpio_C_REF_2 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*//* @violates @ref Dio_Gpio_C_REF_6 A cast should not be performed between a pointer type and an integral type. */PortLevel = (Dio_PortLevelType)(Dio_Gpio_ReverseBits(PortLevel));
#endifreturn PortLevel;
}

3.2 DioPort

配置端口号,我用的是S32K146芯片,所以有5个端口:A(0)、B(1)、C(2)、D(3)、E(4)。

通过下面这段代码可以看到通过端口序号来计算出每个端口的起始地址:

/* @violates @ref Dio_Reg_eSys_Gpio_H_REF_1 Function-like macro defined */
#define GPIO_PDIR_ADDR32(port)  ((uint32)(GPIO_BASEADDR + GPIO_PDIR_OFFSET_ADDR32 + ((uint32)(port) * (uint32)0x40) ))

在这里插入图片描述

配置完以后可以在Dio_cfg.h中看到如下定义:

/* ---------- RTA ---------- *//**
* @brief          Symbolic name for the port RTA.
*
*/
#define DioConf_DioPort_RTA  ((uint8)0x00U)/* ---------- RTB ---------- *//**
* @brief          Symbolic name for the port RTB.
*
*/
#define DioConf_DioPort_RTB  ((uint8)0x01U)/* ---------- RTC ---------- *//**
* @brief          Symbolic name for the port RTC.
*
*/
#define DioConf_DioPort_RTC  ((uint8)0x02U)/* ---------- RTD ---------- *//**
* @brief          Symbolic name for the port RTD.
*
*/
#define DioConf_DioPort_RTD  ((uint8)0x03U)/* ---------- RTE ---------- *//**
* @brief          Symbolic name for the port RTE.
*
*/
#define DioConf_DioPort_RTE  ((uint8)0x04U)

3.3 DioChannel

DioChannel中可以配置需要操作的引脚,如下图所示,我们在端口RTE下,配置了引脚3(RTE3):

在这里插入图片描述

配置完以后可以在Dio_cfg.h中看到如下定义,看到这个定义是不是似曾相识,在介绍Port模块的时候介绍过Pcr序号的计算方式,0x0083 = 131 = 4 * 32 + 3:

/** @violates @ref Dio_Cfg_H_REF_1 The used compilers use more than 31 chars for identifiers. */
#define  DioConf_DioChannel_out_put_test ((uint16)0x0083U)

3.4 DioChannelGroup

DioChannelGroup中我们可以配置通道组,如下所示,在RTE端口下,新建一个通道组

在这里插入图片描述
在这里插入图片描述

Dio Port Bit Number:通道个数

Dio Port Offset:起始通道号(偏移值)

Dio Port Mask:自动计算即可

如上图所示,我们的通道组配置范围是RTE2~RTE5。


参考资料:

S32K-RM.pdf - NXP

AUTOSAR_MCAL_DIO_UM[1].pdf - NXP

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



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

相关文章

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

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

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

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

Flutter-使用dio插件请求网络(get ,post,下载文件)

引入库:dio: ^2.1.13可直接运行的代码:包含了post,get 下载文件import 'package:flutter/material.dart';import 'package:dio/dio.dart';void main() {runApp(new MaterialApp(title: 'Container demo',home: new visitNetPage(),)

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中。制定统一的车

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

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

【MCAL】TC397+EB-tresos之SPI配置实战 - (同步/异步)

本篇文章首先从理论讲起,从AUTOSAR规范以及MCAL手册两个不同角度(前者偏理论,后者偏实践)介绍了SPI模块的背景概念与理论,帮助读者在实际配置之前能有个理论的框架。然后详细的介绍了在TC397平台使用EB tresos对SPI驱动模块进行配置与调试的实战过程,帮助第一次接触这个模块的读者能够更快的上手来实现符合自己项目要求的开发工作,完成SPI通信。文章分别从同步和异步两种方式介绍了配置