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

这篇具有很好参考价值的文章主要介绍了7、AUTOSAR MCAL入门-实战:I/O驱动组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

autosar驱动,自动驾驶嵌入式工程师修炼秘籍,# AUTOSAR 开发,# Infineon-TC3X7,嵌入式硬件,AUTOSAR,自动驾驶,嵌入式

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

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

autosar驱动,自动驾驶嵌入式工程师修炼秘籍,# AUTOSAR 开发,# Infineon-TC3X7,嵌入式硬件,AUTOSAR,自动驾驶,嵌入式

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驱动模块的标准调用流程:

autosar驱动,自动驾驶嵌入式工程师修炼秘籍,# AUTOSAR 开发,# Infineon-TC3X7,嵌入式硬件,AUTOSAR,自动驾驶,嵌入式

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)文章来源地址https://www.toymoban.com/news/detail-687210.html

printf("请关注微信公众号:Kevin的学习站,阅读更多关于AUTSAR和自动驾驶嵌入式相关的文章!")

到了这里,关于7、AUTOSAR MCAL入门-实战:I/O驱动组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Autosar教程-Mcal教程-GPT配置教程

    3.3GPT配置、生成 3.3.1 GPT配置所需要的元素 GPT实际上就是硬件定时器,需要配置的元素有: 1)定时器时钟:定时器要工作需要使能它的时钟源 2)定时器分步:时钟源进到定时器后可以通过分频后再给到定时器 定时器模块选择:MCU有多个定时器模块,需要决定使用哪个定时器模

    2024年03月08日
    浏览(46)
  • Autosar MCAL MCU配置时钟-基于cfg

    在Autosar OS中的Counter计数是由STM模块而来,需要在Counter中指定每个tick的 时间 ,但这个时间是根据STM时钟来的,t=1/fstm,并不是指定的时间就是 真的运行时间 ,例如指定的 Seconds per tick 时间为0.00000001,但STM频率为50000000HZ(50MHz),实际执行的时间会是0.00000002,导致os所有认为的

    2023年04月08日
    浏览(80)
  • 自动驾驶解决方案有 adaptive autosar 与 ROS2+DDS这两种各有什么优势劣势?

    adaptive autosar 是一种面向汽车行业的标准软件架构,它提供了一系列基础平台组件和面向服务的协议,如 SOME/IP、DDS 等。它可以支持不同的操作系统,如 Yocto Linux 或其他 RTOS。它从一开始就考虑了功能安全和信息安全的要求,适合用于 高安全性完整性的应用 ,如 ADAS、AD 等。

    2024年02月09日
    浏览(51)
  • Autosar MCAL-S32K324 MCU配置-基于EB

    2023年07月02日
    浏览(66)
  • 【Autosar】MCAL - MCU(NXP - S32K14x)

    MCAL - 汇总 配置工具:EB Tresos Studio 芯片类型:S32K146 MCU模块提供了访问 内核 相关功能的API,例如配置时钟、初始化RAM、设置低功耗模式、提供复位接口等。 1.1 时钟介绍 从上图可以看到最左边为输入时钟源,右边为输出时钟 ,为了让系统运行在合适的时钟频率环境下,我们

    2024年02月04日
    浏览(46)
  • 【AUTOSAR】RH850(F1KM) MCU PWM配置(MCAL)

    前言 在嵌入式项目中,我们经常需要使用到PWM信号。本文将基于汽车电子AUTOSAR架构下的软件开发方式。以RH850为例进行说明,介绍如何查阅芯片参考文档,并结合项目原理图,使用Davinci工具配置MCAL PWM模块,输出PWM波形。 仅供大家学习参考。 其他MCU的配置方法类似,需要找

    2024年02月13日
    浏览(45)
  • Autosar MCAL-RH850P1HC Mcu配置

    2024年01月18日
    浏览(45)
  • AUTOSAR规范与ECU软件开发(实践篇)7.1 MCAL配置工具安装方法

         目录  MCAL配置工具入门 1 MCAL配置工具安装方法 (1) EB tresos Studio工具安装方法

    2024年02月11日
    浏览(54)
  • 一步一步搭建S32K14x的AutoSar项目----MCAL之MCU模块

    1-1、时钟对于任何一款微控制器是很重要的,所以我们首先要了解S32K144的时钟树,才能为后续的MCAL中MCU模块配置做好准备,废话不多说,先上一张图片,聊了解下 对应芯片手册的第27章 Clock Distribution 。 1、SOSC 就是连接外部的高速时钟,我们一般情况下会优先选择它,精准

    2024年01月22日
    浏览(48)
  • AUTOSAR汽车电子嵌入式编程精讲300篇-经典 AUTOSAR 安全防御能力的分析及改善

    目录 前言 研究现状 经典 AUTOSAR 概述 2.1 经典 AUTOSAR 架构 2.2 经典 AUTOSAR 应用层

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包