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,我慌得一批

    莫慌 xff0c 淡定 xff0c 先来看看AUTOSAR是个什么鬼 AUTOSAR是什么 AUTOSAR AUTomotive Open System ARchitecture xff0c 中文是 汽车开放系统架构 xff0c 是一家致力
  • 基于PREEvision的AUTOSAR Adaptive设计

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

    现在汽车中 xff0c 车内网络普遍采用CAN LIN FlexRay总线 xff0c CAN FD和车载以太网也将在未来得到更多应用 作为汽车电子软件的主要标准 xff0c AUTOSAR在总线网络通信方面提供了完整的架构 AUTOSAR
  • AUTOSAR和ROS有哪些联系和区别

    AUTOSAR和ROS有哪些联系和区别 xff1f AUTOSAR和ROS有哪些联系和区别 xff1f 用ROS可以实现AUTOSAR的功能吗 xff1f 从Linux和Ros系统转向AP该如何转 xff1f 为什么需要转 xff1f AP
  • ETAS Adaptive AUTOSAR 自适应平台示例视频教程

    ETAS AP AUTOSAR自适应平台示例视频教程 本系列文章旨在提供一个详细的操作指南 xff0c 以构建ETAS AP AUTOSAR自适应平台的示例 实践练习的目标是加强AUTOSAR自适应平台中的理论概念 xff0c 并更好地理解
  • AUTOSAR的E2E通信安全

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

    目录 1 Adaptive AUTOSAR 简介 Adaptive平台 一种新的 AUTOSAR 1 1 Adaptive的案例 1 2 经典平台与适应性平台的比较 1 3 单一系统 1 4 架构 逻辑架构 1 5 软件架构 本文图片来源
  • 一文搞懂AUTOSAR的DEM模块

    Dem全称为Diagnostic Event Manager xff0c 负责故障事件的处理 故障数据的存储和管理 简单说其功能是故障事件确认前的故障debounce xff0c 故障事件确认时的故障数据存储 xff0c 故障发生后的故障老
  • AP AUTOSAR——Update and Configuration Management UCM

    15 Update and Configuration Management 15 1 What is Update and Configuration Management 更新和配置管理是Adaptive Platform Servic
  • AP AUTOSAR——Network Management

    16 Network Management 16 1 What is Network Management 网络管理是Adaptive Platform Services中的一个功能集群 作为AP AUTOSAR平台的服务 xff0c 网络
  • AurixDevStudio集成MCAL

    这是Tricore MCAL安装路径 打开ADS新建一个AURIX Project 我手上的是龙邱的TC377最小系统 就这样选 理解下第一个选项 新建好的基础工程是这个样子 删除掉Library文件夹 因为我们这里要使用的MCAL而不是i
  • [Adaptive Autosar]深入理解--Persistency

    目录 1 Per架构 2 Per初始化 3 Per错误处理 4 多进程访问 5 冗余存储 6 安装和更新per数据 7 Key Value 方式 8 file storage 方式 9 典型使用代码 Persistency模块对比 CP 中
  • 一文读懂Autosar SecOC通讯

    一 为什么用SecOC xff1f 在车载网络中 xff0c CAN总线作为常用的通讯总线之一 xff0c 其大部分数据是以明文方式广播发送且无认证接收 这种方案具有低成本 高性能的优势 xff0c 但是随着汽车网联化 xff0c 智能化的
  • Adaptive Autosar通讯层:ARA::COM中的Instance Identifiers

    一般概念 实例标识符 在收发两端都是要用的 是很核心的概念 proxy端用来搜索服务 xff0c skeleton端用来创建服务实例 站在API的角度来看 xff0c 这样的识别符是和特定的技术绑定的 所以 xff0c 标识符的结构和内容都
  • 【AUTOSAR】【以太网】TCPIP

    目录 一 概述 二 约束和假设 三 依赖模块 3 1 EthIf 3 2 EthSM 3 3 SoAd 3 4 KeyM 3 5 CSM 四 功能说明 4 1 系统扩展性 4 2 IPv4 4 2 1 IPv4 4 2 2 ARP 4 2
  • C/C++语言中的注释:功能、符号和使用方法详解

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

    AUTOSAR多核OS为实现核间资源互斥 保证数据一致性 设计了自旋锁机制 该机制适用于核间资源互斥 对于多核概念 需要一种新的机制来支持不同内核上任务的互斥 这种新机制不应在同一内核上的 TASK 之间使用 因为它没有意义 在这种情况下
  • 【AUTOSAR】CCP协议的代码分析与解读(四)----CCP协议数据下载和上传

    数据下载 DNLOAD DNLOAD指令负责将CRO中的数据下载到ECU中 起始地址为先前设定的MTA0 下载完毕后MTA0指针自增 自增的字数为下载的字节数 DNLOAD命令的CRO数据场结构 如下所示 位 置 类 型 描 述 0 字节
  • 【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

随机推荐