7、AUTOSAR MCAL入门-实战:I/O驱动组

2023-05-16

在这里插入图片描述

7、AUTOSAR MCAL入门-实战:I/O驱动组

在第三节中有介绍AUTOSARMCAL 抽象分为4个驱动组,分别为:**微控制器驱动组,存储器驱动组,通信驱动组、输入/输出驱动组。**这一节将具体介绍MCAL微控制器驱动组的内容。

在这里插入图片描述

2.4、I/O驱动组

I/O驱动组完成MCU片上以下输入/输出模块的驱动:端口控制(PORT)驱动、数字I/O引脚(DIO)驱动、模式转换(ADC)驱动、PWM驱动、输入捕获(ICU)驱动、输出比较(OCU)驱动。

2.4.1、PORT 驱动

PORT驱动实现片上端口配置和引脚复用的功能,提供配置和初始化MCU所有端口/引脚的服务。如:将引脚配置为通用I/O、ADC、PWM等。

2.4.1.1、PORT常用的API函数

AUTOSAR规范中,PORT模块的常用接口函数有Port_Init(初始化PORT驱动模块)、Port_SetPinDirection(设置引脚输入、输出方向)、Port_RefreshPortDirection(刷新端口方向配置)、Port_GetVersioninfo(返回PORT驱动模块的版本信息)、Port_SetPinMode(设置引脚模式)等。

PORT驱动模块初始化必须在MCU驱动模块初始化之后完成,AUTOSAR MCAL规范给出了初始化PORT驱动模块的标准调用流程:

请添加图片描述

2.4.2、DIO驱动

作为DIO驱动使用的引脚需要先在PORT驱动中配置和初始化,然后才能使用DIO驱动/写引脚上的逻辑状态。

2.4.2.1、DIO常用的API函数

AUTOSAR规范中,Dio模块的常用接口函数有Dio_WriteChannel(写DIO通道状态)、Dio_ReadChannel(读DIO通道状态)、Dio_FlipChannel(变换DIO通道状态)等。

①、Dio_Init()

void Dio_Init(const Dio_ConfigType *ConfigPtr);

功能:初始化DIO驱动模块;

参数:const Dio_ConfigType *,由于Dio模块只有Per Compile模式,所以其传入参数必须为NULL_PTR;

返回值:void。

Dio_Init(NULL_PTR);

②、Dio_WriteChannel()

void Dio_WriteChannel(const Dio_ChannelType ChannelId,const Dio_LevelType Level);

功能:设置DIO 通道值;

参数:const Dio_ChannelType,即传入DIO通道Id号;const Dio_LevelType,即传入DIO通道状态值,STD_HIGH为1;STD_LOW为0;

返回值:void。

注意:

配置完DioChannel后,在生成MCAL配置代码过程中会在Dio_Cfg.h文件中通过宏定义(#define)的方式将DioChannel Name与DioChannelId关联起来。

③、Dio_ReadChannel()

Dio_LevelType Dio_ReadChannel(const Dio_ChannelType ChannelId);

功能:读取DIO 通道值;

参数:const Dio_ChannelType,即传入DIO通道Id号;

返回值:Dio_LevelType,即返回当前通道状态,STD_HIGH为1;STD_LOW为0。

④、Dio_FlipChannel()

Dio_LevelType Dio_FlipChannel( const Dio_ChannelType ChannelId);

功能:返回当前通道状态;

参数:const Dio_ChannelType,即传入DIO通道Id号;

返回值:Dio_LevelType,即返回当前通道状态,STD_HIGH为1;STD_LOW为0。

2.4.3、ADC 驱动

ADC 驱动实现初始化、控制MCU内部的ADC模块的功能,可以使能触发源发起模数转换,以及关闭触发源停止模数转换。此外,ADC驱动还提供通知机制查询模数转换的状态和结构。

ADC驱动在ADC通道(ADC Channel)的基础上进行。ADC通道把模拟信号输入引脚、所需的ADC电路和转换结果寄存器三部分联系成为一个整体,使其能被ADC驱动所控制与访问。此外,属于同一个ADC硬件单元(ADC HW Unit)的一个或者多个ADC通道,可以组成一个ADC通道组(ADC Channel Group),由同一触发源触发。但一个ADC通道组必须至少包含一个ADC通道。

ADC模块支持以下两种转换模式:

①单次转换(One-Shot Conversion):ADC通道组中每个ADC通道只执行一次转换。

②连续转换(Continuous Conversion):在启动转换后,ADC通道组将会自动重复进行转换,而不需要再次触发。

ADC模块可以选择以下两种触发源:

①软件触发(SW-TRIGGER):ADC通道组通过ADC模块提供的服务来启动/停止转换,其可在上述两种转换模式下使用。

②硬件触发(HW-TRIGGER):ADC通道组通过硬件事件(如边沿触发、定时器等)来启动转换,但该方式只能用于单次转换模式。

AUTOSAR MCAL规范中 ADC 驱动模块初始化API的标准调用流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dm00dpOX-1683633393234)(E:\1.NXP_AUTOSAR_S32K1X\4.功能说明\3.AUTOSAR-MCAL 架构简介\9.png)]

2.4.3.1、ADC驱动模块常用API函数

①、Adc_Init()

void Adc_Init(const Adc_ConfigType*pConfigPtr);

功能:初始化 ADC 驱动模块;

参数:const adc_ConfigType*;

返回值:void。

②、Adc_SetupResultBuffer()

Std_ReturnType Adc_SetupResultBuffer(Adc_GroupType Group,Adc_ValueGroupType*pDataBufferPtr);

功能:配置结果缓存;

参数:Adc_GroupType和Adc_ValueGroupType*;

返回值:void。

Adc模块有两种转换结果的访问模式,由以下两个接口函数实现:

③、Adc_ReadGroup()

Std_ReturnType Adc_ReadGroup(Adc_GroupType Group,Adc_ValueGroupType*pDataBufferPtr);

功能:读取模数转换通道组最后一轮模数转换的结果,并存入指定的结果缓存指针中;

参数:Adc_GroupType和Adc_ValueGroupType*;

返回值:Std_ReturnType。

④、Adc_GetStreamLastPointer()

Adc_StreamNumSampleType Adc_GetStreamLastPointer(Adc_GroupType Group,Adc_ValueGroupType**PtrToSamplePtr)

功能:获取结果缓存的最后指针;

参数:Adc_GroupType和Adc_ValueGroupType*;

返回值:Adc_StreamNumSampleType。

ADC通道组启动、停止、转换状态回读相关的接口函数:

⑤、Adc_StartGroupConversion()

void Adc_StartGroupConversion(Adc_GroupType Group)

功能:打开模数转换通道组的所有通道进行模数转换;

参数:Adc_GroupType和Adc_ValueGroupType*;

返回值:void。

⑥、Adc_StopGroupConversion()

void Adc_StopGroupConversion(Adc_GroupType Group)

功能:停止模数转换通道组的所有通道进行模数转换;

参数:Adc_GroupType和Adc_ValueGroupType*;

返回值:void。

⑦、Adc_GetGroupStatus()

Adc_StatusType Adc_GetGroupStatus(Adc_GroupType Group)

功能:获取模数转换通道组的状态;

参数:Adc_GroupType;

返回值:Adc_StatusType,有4种状态,即ADC_IDLE、ADC_BUSY、ADC_COMPLETED、ADC_STREAM_COMPLETED。

2.4.4、PWM 驱动

PWM驱动提供MCU芯片内部PWM模块初始化和控制的功能。PWM驱动定义的PWM通道,都与MCU内部模块的PWM硬件通道对应。PWM驱动能产生可变脉冲的脉冲信号,支持设置占空比和周期。但是,AUTOSAR MCAL规范并未对PWM类型(中心对称PWM、左边对称PWM),PWM类型是由驱动提供商的具体实现方案决定的。

2.4.4.1、PWM驱动模块常用API函数

①、Pwm_Init()

void Pwm_Init(const Pwm_ConfigType*ConfigPtr)

功能:初始化 PWM 驱动模块;

参数:const Pwm_ConfigType*;

返回值:void。

②、Pwm_SetDutyCycle()

void Pwm_SetDutyCycle(Pwm_ChannelType ChannelNumber,uint16 DutyCycle)

功能:设置 PWM驱动模块通道的占空比;

参数:Pwm_ChannelType–PWM通道;

​ uint16–占空比设定值,AUTOSAR规范中规定0x0000对应 0%,0x8000对应100%;

返回值:void。

2.4.5、 ICU 驱动

ICU驱动完成MCU内部输入捕获模块的功能,用于调解PWM信号、脉冲计数、测量信号周期和占空比、产生普通中断和唤醒中断等。ICU驱动提供如下服务:

①、信号边沿检测、产生相应通知;

②、唤醒中断控制;

③、周期信号测量;

④、信号边沿时间戳(用于非周期信号);

⑤、边沿计数;

2.4.5.1、ICU驱动模块常用API函数

①、Icu_Init()

void Icu_Init(const Icu_ConfigType*ConfigPtr);

功能:初始化 ICU驱动模块;

参数:const Icu_ConfigType*;

返回值:void。

②、Icu_GetDutyCycleValues()

void Icu_GetDutyCycleValues(Icu_ChannelType Channel,Icu_DutyCycleType*DutyCycleValues);

功能:获取ICU通道的值;

参数:Icu_ChannelType和Icu_DutyCycleType*,前者为ICU通道,后者为采样结果缓存结构体,其定义如下:

typedef struct
{
 /*<@brief Low or High time value.*/ 
	Icu_ValueType ActiveTime; 
 /*<@brief Period time value.*/
 	Icu_ValueType PeriodTime;    
}Icu_DutyCycleType;

返回值:void。

2.4.6、OCU驱动

OCU驱动完成MCU内部输出比较模块的初始化和控制的功能。OCU驱动中定义的软件通道,与MCU内部的输出比较硬件通道对应。当通用计数器的值与预设阈值匹配时,OCU驱动自动做出相应动作。

由于一些MCU并没有专门的OCU驱动,则是使用通用计数器完成输出比较功能。在AUTOSAR MCAL规范中,并没有规定OCU驱动的硬件架构,只定义了参数和用户接口函数,因此,OCU驱动可以用于任何适合的硬件平台。

OCU驱动提供如下服务:

①、开始、停止通用计数器比较;

②、设置比较阈值;

③、使能、关闭通知机制;

④、获取通用计数器当前值;

⑤、改变输出引脚电平状态;

⑥、触发其他硬件资源(ADC、DMA)

printf("请关注微信公众号:Kevin的学习站,阅读更多关于AUTSAR和自动驾驶嵌入式相关的文章!")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

7、AUTOSAR MCAL入门-实战:I/O驱动组 的相关文章

  • 来来来!我告诉你 AUTOSAR架构深度解析从入门到放弃

    如何快速学习AUTOSAR 关于AUTOSAR的背景和架构信息 xff0c 这里就不详细展开了 大家可以参看 xff1a AUTOSAR的分层架构 一文了解 今天我们重点讲讲如何快速学习AUTOSAR架构的方法 如何获取规范文档 xff1f
  • 3.Adaptive AUTOSAR 架构详解

    3 1 逻辑层架构 下面显示了AP的逻辑架构 xff0e AA xff08 adaptive application 在ARA AUTOSAR Runtime for Adaptive Applications 上运行 ARA包含了所有功能
  • AUTOSAR——AUTOSAR基础

    一 AUTOSAR AUTOSAR全称为 AUTomotive Open System ARchitecture xff0c 译为 汽车开放系统体系结构 二 AUTOSAR核心思想 1 xff09 提倡 在标准上合作 xff0c 在实现上竞
  • AUTOSAR架构的故事(干货)

    1 AUTOSAR架构概览 在新世纪 xff0c 汽车产业蓬勃发展 xff0c 欧洲大陆的车企们 xff0c 瞄准了这是一块大蛋糕 xff0c 于是在2002年成立了一个联盟 xff0c 搞了个叫AUTOSAR的标准 xff0c 以期一统天
  • 基于PREEvision的AUTOSAR Adaptive设计

    导读 xff1a 为适应汽车智能化 网联化等的发展趋势 xff0c 应对汽车E E系统开发面临的高性能处理器的应用 自动驾驶的软件实现 高带宽通信需求 车与外界的互联互通等的挑战 xff0c AUTOSAR组织推出了AUTOSAR Adap
  • AUTOSAR_DCM&DEM(UDS&OBD)

    1 术语与缩写 术语 DCM Diagnostic Communication Manager DEM Diagnostic Event Manager UDS Unified diagnostic services OBD On Boar
  • CP AUTOSAR 简介

    嵌入式系统不支持硬件抽象 xff0c 使得我们每次在进行新的处理器更换之后 都需要进行重新进行底层软件的开发 2003年建立autosar 组织 autosar官方文档非常长2万多页 xff0c 从这里可以看出什么 xff1f 1 auto
  • Autosar 软件中间件

    我们都知道手机 xff0c 电脑啥的在应用之下 xff0c 硬件之上 xff0c 还有一个东西叫操作系统 xff0c 车辆里也有类似的东西 操作系统 xff0c 中间件 xff0c 应用软件 各司其职分工不同 操作系统 我负责对硬件 xff
  • AUTOSAR的E2E通信安全

    AUTOSAR标准的安全通信为支持功能安全 xff0c AUTOSAR标准结合ISO 26262功能安全标准 xff0c 在基础软件层从安全执行 安全通信以及安全内建测试三个方面做出了规范 xff0c 并规范 AUTOSAR标准的安全通信
  • AP AUTOSAR——Security Management

    11 Security Management 11 1 What is Security Management 安全管理是自适应平台体系结构中的一个功能集群 作为一个功能集群 xff0c 安全管理由多个模块组成 xff0c 这些模块向在Ad
  • 浅谈AP autosar 之 runtime 基础

    AP Autosar Architecture overview AP autosar在SOC 中的位置 xff0c 起到的作用 下面图可以看出 xff0c AP autosar封装了操作系统的接口 xff0c 封装了功能安全 xff0c
  • AurixDevStudio集成MCAL

    这是Tricore MCAL安装路径 打开ADS新建一个AURIX Project 我手上的是龙邱的TC377最小系统 就这样选 理解下第一个选项 新建好的基础工程是这个样子 删除掉Library文件夹 因为我们这里要使用的MCAL而不是i
  • AutoSar之微控制器抽象层MCAL

    微控制器抽象层位于AUTOSAR BSW的最底层 xff0c 包含内部驱动 xff0c 可直接访问微控制器和外设芯片 从具体应用来看 xff0c MCAL主要包括微控制器驱动 存储器驱动 通信驱动和输入输出驱动四个部分 xff0c 各部分又
  • AutoSAR 学习笔记5:基于 AutoSAR 工具链的开发流程

    1 西门子 CVI 工具开发流程 博世 ETAS 工具开发流程 Vector Davinci 工具开发流程
  • C/C++语言中的注释:功能、符号和使用方法详解

    目录 引言 注释的功能 注释符号 单行注释 多行注释 注释结尾问题 利用预处理实现多行注释 示例代码和解析 结论 引言 在C语言中 注释是一种非常有用的工具 可以帮助程序员在代码中添加说明 解释和备注 本文将深入探讨注释的功能 不同注释符号
  • Classic AUTOSAR专题

    往期小怿向各位小伙伴介绍了Classic AUTOSAR专题之I O模块 相信看过的小伙伴对Classic AUTOSAR的I O模块已经有基本的认知了 本期为大家介绍 AUTOSAR模块之诊断模块 内容超丰富 将分两期推出哦 目录 1 概
  • AutoSAR 学习笔记2:AutoSAR架构

    1 应用层 ASW 2 运行时环境层 RTE RTE 是专门为应用软件 AutoSAR 软件组件和 或 AutoSAR 传感器 执行器组件 提供通信服务的层 在 RTE 之上 软件架构风格从 分层 转变为 组件风格 AutoSAR 软件组件
  • IPC-核间通讯

    1 IPC通讯是AUTOSAR体系结构中的核心组成部分 它使得不同的软件组件可以相互通信 协同工作 从而实现整车系统的功能 IPC可以理解为核间通讯 就是一个芯片有多个核 现在想让多核之间通信 达到下面几个目的 数据共享 不同的软件组件之间
  • 【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码

    CCP协议介绍 CCP的全称是CAN Calibration Protocol CAN标定协议 是基于CAN总线的ECU标定协议规范 CCP协议遵从CAN2 0通信规范 支持11位标准与29位扩展标识符 CCP通信方式 CCP协议采用主从通
  • 数据类型:C++中的基本数据类型

    数据类型 C 中的基本数据类型 在C 中 数据类型是用于存储不同种类数据的变量类型 C 提供了多种基本数据类型 包括字符型和数值类型 本篇博客将详细介绍C 中的基本数据类型 并提供相应的示例代码 目录 引言 字符型数据类型 2 1 char

随机推荐