[ 搞一点AutoSar ]基于EB的MCAL-GPT全模块配置与解析

article/2025/10/11 11:28:44

 笔者搞了快一个星期的GPT的测试了,从配置到代码一遍又一遍的操作和阅读。觉得有必要把学习成功稍微总结一下了;学AUTOSAR最后还是得熟悉代码,毕竟AUTOSAR只是目的,而代码才是实现的手段。中间的逻辑关系看代码一目了然;这篇文章蹿了好久才写完,以后大概可以照这个模式把MCAL的所以模块都写一遍吧。

目录

一、什么是GPT

二、基于EB的GPT模块介绍:

2.1 变体配置(cinfig Variant)---一般默认选择VariantPostBuild: 

 2.2 GPT通道设置--GptChannelConfigSet

2.3、GptConfigurationOfOptApi

2.4 GptDriverConfiguration 

2.5、GPT预定义计时器配置 

三、GPT驱动模块API和函数的使用方法及原理

3.1GPT驱动模块API

3.2计时器通道相关

3.3 API调用流程

3.4 GPT_SetMode 


一、什么是GPT

        GPT驱动(General Purpose Timer Driver)是使用通用定时器单元的硬件定时器通道,它为操作系统或者其他基础软件模块提供计时功能。GPT驱动可以提供启动和停止硬件定时器、得到定时器数值、控制时间触发的中断、控制时间触发的中断唤醒等功能。除此之外,GPT能初始化、控制MCU内部的通用定时器,用来产生一次性(One-shot)或者连续性(Continuous)的定时通知。GPT驱动通常为操作系统(OS)提供定时服务,或者当OS Alarm负担过重时为BSW其他模块提供定时服务。

GPT通道可以设置为连续模式(CONTINUOUS)或单次模式(ONESHOT)。

①连续模式:定时器到达目标时间后会自动清零并继续运行。

②单次模式:定时器到达目标时间,即计数值达到设定值时,定时器会自动停止,保持计数值不变,且通道状态从“运行”变为“超时”。

二、基于EB的GPT模块介绍:

                                                        图1、GPT模块图形化界面介绍 

由图1可知,GPT模块配置从上至下主要分为五大模块:

  • cinfig Variant --变体
  • GptChannelConfigSet --GPT通道配置
  • GptConfigurationOfOptApi --GPT的API配置
  • GptDriverConfiguration --GPT驱动配置
  • GptPredefTimerConfig --GPT预定义计时器配置

2.1 变体配置(cinfig Variant)---一般默认选择VariantPostBuild: 

 

VariantPostBuild:

代码里面使用到的数据,在编译和链接完成后仍没有添加到里面,而是代码里面通过指针的方式指向某个FLASH地址,并且这个地址所对应的数据是空的.这些数据不是在编码阶段提供的,而通常是在制造过程中或以后阶段提供(工厂产线等)。主要指可重新加载的、模块外的常量;

VariantPreCompile:

所有的代码和数据在编译器运行前就已经决定了,编译完成(这里指链接完得到二进制文件)后代码和有效数据同时放到ECU的FLASH中(指代码和数据均已被包含在二进制文件里面)

 2.2 GPT通道设置--GptChannelConfigSet

 

GptChannelConfigSet是一个容器,用来存放已配置的GPT通道;此容器是包含已配置GPT通道的配置集的基础。通过这种方式,可以为后构建过程定义不同的配置集;

点击GptChannelConfiguration,我们就进入了具体的配置界面:

 

这里我配置了9个GPTchannel,双击数字0,进入通道的具体配置 

 

  1. GptChannelId : GPT通道序列号
  2. GptHwModule:硬件模块配置,这里分配了BTM4计时器给这个通道
  3. GptHwModulePrescaler (0 -> 255):硬件模块预分频值(预分频有点复杂,这里一般按要求配置就好)
  4. GptHwModuleChannel:硬件模块通道,一个计时器可以分配两个通道GO、G1;这里选择了G0通道;
  5. GptChannelMode:通道模式,有两种模式,单次模式和连续模式;这里选择了连续模式;  
  6. GptChannelTickFrequency (0 -> Infinity):指定定时器通道的滴答频率,单位为Hz,具体该配多少由硬件决定;
  7. GptChannelTickValueMax  :计时器通道能够计数的最大刻度值(由硬件决定)。下一个滴答时刻,计时器重新转到零。4294967295转化为16进制为FFFF  FFFF;代表该种硬件对应的寄存器最多存的数据量0XFFFFFFFF;
  8. GptEnableWakeup  : 使能唤醒服务,点击方框可及激活唤醒功能;
  9. GptNotification  : 选择中断通知服务,这里命名为Gpt4_GO_IRQ(4代表使用的是计时器BTM4,GO代表选择的硬件通道是GO,IRQ代表的是中断函数);

小结:一个正常通道的配置,需要设置通道ID、选择对应的计时器、分配对应的计时器通道、选择通道模式、指定定时器通道的滴答频率、命名中断通知函数;

2.3、GptConfigurationOfOptApi

GPT的API服务配置,点击方框可启用相应的API;

 

  1. GptDeinitApi : GPT 去初始化函数API,将GPT驱动状态恢复到默认状态;
  2. GptEnableDisableNotificationApi:使能/去使能中断通知函数API;
  3. GptTimeRemainingApi  : 计时器时间剩余API;
  4. GptWakeupFunctionalityApi:唤醒功能API;
  5. GptPredefTimerFunctionalityApi :预计时器功能API;
  6. GptTimeElapsedApi :记录当前计时器已计时时间的API;
  7. GptVersionInfoApi  :版本信息获取API;

2.4 GptDriverConfiguration 

 

GPT驱动方面的配置,主要包含了错误检测、预计时器使能、

  1. 1. GptDevErrorDetect  是否启用错误检测功能;

2. GptPredefTimer100us32bitEnable :

开启/禁用GPT Predef Timer 100μs32bit功能,勾选方框开启后可使用GptPredefTimer100us32bit功能;

  1. 3. GptPredefTimer1usEnablingGrade 

ff9f6fd4988e45c2a6c6a9d8ede062c7.png

设置GPT Predef Timers使能等级,滴答时间为1μs。

预定义定时器的位数16/24/32,代表的是寄存器的最大存储数据,即定时器的最大定时时间;例如16BIT的定时器最大定时时间为2的16次方--65535个tick(tick由时钟频率决定); 1US代表一个tick的持续时间为1 us,那么100US就代表一个tick=100us; 所以你会看到上图16位的定时器的最大计时时间约为65ms;

有四种可选项,

GPT_PREDEF_TIMER_1US_16BIT_ENABLED、GPT_PREDEF_TIMER_1US_24BIT_ENABLED、GPT_PREDEF_TIMER_1US_32BIT_ENABLED、

GPT_PREDEF_TIMER_1US_DISABLED;

4. GptReportWakeupSource :

启用/禁用唤醒源报告

Gpt_CheckWakeup函数只有在GptReportWakeupSource静态配置为可用时才可行。

Gpt_SetMode函数只有在配置参数GptReportWakeupSource启用时才可用。

Gpt_DisableWakeup函数只有在GptReportWakeupSource静态配置为可用时才可行。

Gpt_EnableWakeup函数只有在GptReportWakeupSource静态配置为可用时才可行

5. GptClockReferencePoint:

这个容器就是对系统时钟的映射;该容器包含一个参数,它表示对类型为McuClockReferencePoint的容器的引用(在模块MCU中定义)。容器需要支持多个时钟引用(依赖于硬件)。

2.5、GPT预定义计时器配置 

 

 GPT Predef Timer  :是由GPT Driver提供的一个自由运行的计数器。如果计时器已经达到最大值(最大值= 2n -1, n=比特数),计时器将在下一次计时器滴答时继续运行,值为“0”。哪些GPT预定义定时器可用,取决于硬件(时钟,硬件定时器,预分频器,定时器寄存器的宽度,..)和配置。GPT Predef Timer具有预定义的物理时间单位和范围。除非有特殊要求,一般随便选一个配置。

三、GPT驱动模块API和函数的使用方法及原理

3.1GPT驱动模块API

GPT驱动模块可以初始化、控制MCU内部的通用寄存器,并且为如下功能提供接口函数和配置参数:

● 启动、停止硬件计时器;

● 获取硬件计时器的值;

● 控制时间触发的中断通知;

● 控制时间触发的唤醒中断(须硬件支持)。

并不是所有的硬件计时器都由GPT驱动模块控制,一些硬件计时器由OS驱动模块或者复杂驱动(CDD)模块控制。一个计时通道的节拍时长是由通道配置参数及MCU 驱动模块中系统时钟分布决定的, 在AUTOSAR MCAL规范中并未对节拍时长进行限制。GPT驱动模块提供了如表3-1所示的API供上层软件组件调用。

57caa75fcef84cceba277968d93febb5.png

表3-1 GPT驱动模块提供的API 

3.2计时器通道相关

GPT驱动程序提供启动和停止计时器通道(分配给计时器硬件的逻辑计时器实例)的服务,每个通道通过调用:Gpt_StartTimer 、Gpt_StopTimer

“目标时间”作为参数传递给Gpt_StartTimer。因此,对于计时器通道的每个开始,目标时间都可以单独设置。

 计时器通道的状态和状态转换如图3-2所示

0629ce44d30b47888801730b8aecdc26.png

3-2 计时器通道状态和状态转化 

计时器通道两种模式设置原理

使用函数Gpt_GetTimeElapsed、Gpt_GetTimeRemaining可以获得当前

计时器已计时时间和剩余时间。

图3-3所示为连续计时模式下计时器已计时时间和剩余时间。使用Gpt_StartTimer、Gpt_StopTimer可以单独打开或关闭每个计时器通道。Gpt_StartTime会把参数传入目标时间,因此,目标时间在每次打开计时器通道时都可以设置。

51f566dc97af47d48b204358e9b6c05e.png

 图3-3 连续计时模式下计时器已计时时间和剩余时间

一次计时模式和连续计时模式。当通道被配置为一次计时模式时,计时器计时到目标时间后会自动停止并保持当前值不变,同时计时器通道状态从“运行”变为“expired”(逾时)状态,而连续模式下不会进入该状态,而是直接进入下一次定时器计数;图3-4所示为一次计时模式下计时器的状态流程。  

833e090d7ade48a4b3a83856ad31c42e.png

图3-4 一次计时模式下计时器的状态流程 

当计时器通道被配置为连续计时模式时,计时器计时到目标时间后会继续在下一个节拍从0开始计时,因此,计时周期=目标时间+1。图3-5所示为连续计时模式下计时器的状态流程。 

0e4ad03484df48f0b1492518befd00f6.png

图3-5 连续计时模式下计时器的状态流程

3.3 API调用流程

在AUTOSAR MCAL规范中给出了一次计时模式下GPT驱动模块API的调用流程,如图3-6所示。

aed9d19e23c645aab7bff2baf6b5443a.png

图3-6 一次计时模式下GPT驱动模块API的调用流程

在AUTOSAR MCAL规范中给出了连续计时模式下GPT驱动模块API

的调用流程,如图3-7所示。

d58605060ed6481eac2289db50442fc5.png

图3-7 连续计时模式下GPT驱动模块API的调用流程 

3.4 GPT_SetMode 

 

初始化后,GPT驱动程序处于“正常模式”。

函数Gpt_SetMode应该将GPT驱动程序的操作模式设置为给定的模式参数;

Gpt_SetMode函数只有在配置参数GptReportWakeupSource启用时才可用;

GPT驱动程序的操作模式和可能的模式转换如图3-8所示

 

图3-8 GPT驱动模式转化流程


http://chatgpt.dhexx.cn/article/3s1GSCZt.shtml

相关文章

【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 什么是FullCAN和BasicCAN 1.1 FullCAN / Basic CAN HRH区别 1.2 FullCAN / Basic CAN HTH区别 1.3 FullCAN和Basic CAN存在的原因 1.4 FullCAN/Basic CAN HRH/HTH如何选择 2 如何配置FullCAN和BasicCAN 3 来自CAN Dr…

MCAL MCU Module详解和配置说明

关注“嵌入式软件实战派”回复“AUTOSAR”获得更多实战教程。 以下内容包含:基本概念、模块依赖、应用时序、参数配置实践讲解,以及ECUM对其引用等。 1. 基本概念 描述了MCU(Microcontroller Unit) 驱动程序的功能和 API。 MCU 驱…

搞一点AutoSar--MCAL SPI-1

整理了一点SPI的资料 目录 1、SPI模块简介2、SPI驱动模块API的使用方法3、SPI通信主要概念4、选择SPI通道缓存(Buffer)位置5、SPI驱动模块API调用流程 1、SPI模块简介 图1 MCAL 4个驱动组与微控制器内核和外设的映射关系SPI属于MCAL模块中的通信驱动组&…

【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 关键字定义 2 Maibox与Hardware Object之间的关系 2.1 接收L-PDU 2.2 发送L-PDU 3 HOH,HRH,HTH,Hardware Object之间的关系 4 Message buffer(MB)结构 5 结尾 1 关键字定义 Mailb…

图解AUTOSAR(五)——微控制器抽象层(MCAL)

微控制器抽象层位于AUTOSAR分层模型中BSW最底层,包含内部驱动,可以直接访问微控制器和片内外设。更进一步地,MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块…

MCAL架构

MCAL位于AUTOSAR软件架构中基本软件(BSW)的底层,是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件(如ECU抽象层、系统服务层等)独立于MCU硬件平台,保证上层软件的标准化和通用性。…

AutoSar之微控制器抽象层MCAL

微控制器抽象层位于AUTOSAR BSW的最底层,包含内部驱动,可直接访问微控制器和外设芯片。从具体应用来看,MCAL主要包括微控制器驱动、存储器驱动、通信驱动和输入输出驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组…

MCAL介绍及Module Plugin开发流程总结

Mcal–微控制器抽象层位于AUTOSAR分层模型中BSW最底层,包含内部驱动,可以直接访问微控制器和片内外设。 MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组成。如图所示…

Autosar MCAL软件架构基本概念

MCAL架构介绍 Autosar整体架构图如下所示: MCAL是MicroController Abstraction Layer(微控制器抽象层)的缩写。如下图所示,MCAL位于AUTOSAR软件架构中基本软件(Basic Software,BSW)的底层&…

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT&…

Object数据转map类型

最近 因为调用接口 返回数据 原本项目中是用List<Map<String, Object>> a 接收的 等于说我只能获取到 Map m1 a.get(0); 到第一层的数据 m1.get(“HttpCode”)的数据 然后就是objcet的数据了 无法直接获取到 之前在网上找了好多 什么直接转成jsonObject因为格式的…

Javascript Object和Map之间的转换

简单的区分Map和Object Map是ES6退出的一个类型&#xff0c;特点&#xff1a;任何值都可作为属性名 Object特点&#xff1a;属性名只能是字符串(一开始我也不信&#xff0c;测试后才发现的) 代码图片 创建一个map类型 new Map([[key, value],[key1, value1] ])简单的介绍下面…

Object 转Map,Map转Object方式总结

商品业务对象定义&#xff1a;Product Product product new Product(); product.setId(1L); product.setName("爱他美") product.setProductDt("2022-03-16") 第一种&#xff1a;通过Alibaba Fastjson实现&#xff1a; pom.xml 文件依赖 <dependen…

使用PyQt打包命令pyinstall的几个问题

**问题1&#xff1a;**打包后无demo.spec文件 在windows下使用cmd界面打包时&#xff0c;可以将路径设置到目标文件目录&#xff0c;这样会生成demo.spec文件&#xff0c;方便后期改正软件。 问题2&#xff1a;打包好后提示如下错误&#xff1a; 解决办法&#xff1a;在demo.…

PyCharm打包失败及Pyinstall无法安装问题的解决

问题描述 Python的工程很多情况下需要打包成EXE文件&#xff0c;通过pyinstaller的工具进行打包&#xff0c;首先需 要安装PyInstaller的工具&#xff0c;然后再通过命令行进行打包&#xff0c;安装 PyInstaller 模块与安装其他 Python 模块一样&#xff0c;使用 pip 命令安装…

pyinstall 打包python3.7.1的exe反编译

pyinstall 打包python3.7.1的exe反编译 由于 pyinstall打包的EXE文件&#xff0c;被360认为可能有木马病毒&#xff0c;首先怀疑计算数机系统有毒。用360杀毒&#xff0c;病毒倒是查处了十几个&#xff0c;对于一个对计算机不是十分精通的人来说&#xff0c;只能按360的提示去做…

pyinstall打包多个.py文件成应用程序

Pyinstall打包多个.py文件成应用程序的方法&#xff1a; 这里成功打包了两个.py文件&#xff0c;一张图片&#xff0c;一个.h5文件 如图所示&#xff1a; 第一步&#xff1a;生成.spec文件 pyinstaller -c -D main.py -p image_handler.py这里main.py文件是主文件&#xff0…

解决python3.6中pyinstall打包失败的问题

环境&#xff1a;python 3.6 pyinstall 一开始用百度上的方法&#xff0c;直接执行python目录下的pyinstall.exe文件&#xff0c;很好用。 C:\WINDOWS\System32>C:\Users\hasee\AppData\Local\Programs\Python\Python36\Scripts\pyinstaller.exe F:\python_code_test\ren…

pyqt5 +pyinstall打造属于自己的桌面版程序(学习阶段)

网上关于pyqt5的教程特别少,终于东拼西凑,做出一点东西出来,很简单的小应用,便于上手学习。 pyqt5的主文件代码如下,代码特别多,也没怎么细分。大家可以参考下。github地址 pyinstall打包的一点小技巧送给大家。 取消生成程序doc窗口使用命令pyinstaller -F -i 图标路径 …

tkinter - 使用Pyinstall进行打包封装

1 需要安装 PyInstaller C:\Users\30818> pip install pyinstaller 2 将模块py文件打包成pyd 防止反编译暴露源代码 pyd是一个模块插件 可以通过 Import 来引入pyd文件 直接编译会提示二进制读取错误 2-1 安装cython pip install cython 2-2 在当前目录创建一个 set…