第二十一节:MCAL GPT实操

介绍一下主要容器

1. GptHwConfigurations (硬件基础)

  • 作用: 它是**"选设备"**。

  • 内容: 在这里定义芯片上有哪些真实的硬件定时器模块(比如 LPIT, FTM)要被驱动使用。

  • 关键任务: * 指定硬件 ID(比如 LPIT_0_CH_0)。

    • 开启硬件中断(ISR)。

    • 正如我们之前聊过的,它是最底层的配置,直接决定了你用哪块电路。

2. GptChannelConfigSet (逻辑频道设置)

  • 作用: 它是**"分配任务"**。

  • 内容: 这是你作为开发者最常打交道的地方。你在这里创建一个个"逻辑通道",并给它们起名字。

  • 关键任务:

    • 关联硬件: 把这里的一个逻辑通道(比如 MyTimer_1ms)指向 GptHwConfigurations 里的一个硬件单元。

    • 设置通知: 填写 GptNotification 函数名(闹钟响了该调哪个 C 函数)。

    • 设置模式: 决定是 One-shot (响一次)还是 Continuous(一直响)。

    • 设置 Tick 频率: 规定这个通道每秒跳动多少次(Prescaler)。

3. GptDriverConfiguration (全局开关)

  • 作用: 它是**"公司管理制度"**。

  • 内容: 这里不针对某个具体的通道,而是针对整个 GPT 驱动模块的全局属性。

  • 关键任务:

    • API 开关: 是否允许使用 Gpt_DeInit、Gpt_GetTimeRemaining 等功能(为了节省代码空间,不用的可以关掉)。

    • 开发错误检测: 是否开启 GptDevErrorDetect(如果代码传参错了,驱动会不会报错提示你)。

    • 运行模式: 设置驱动是在 Normal 模式下工作,还是在 Sleep 模式下省电。

添加GPT模块

GPT 硬件资源配置如图,注意每个通道的id一定不能重合

GptHwConfiguration (对象名): 这是 GPT 驱动内部定义的硬件实体配置。

Isr Enable (中断使能): 如果你勾选了(图中目前全是没勾选状态),那么这个硬件通道触发时,会进入对应的 ISR(中断服务程序)。

Isr Hw Id (硬件标识): 这是最关键的一列。 你可以看到第一个对应的是 LPIT_0_CH_0(LPIT第0个模块的第0个通道)

接下来是通道具体配置

首先配置时钟

再MCU模块点击这个

配置如下

新建一个时钟参考

配制如下

现在可以在GPT那边引用配置好的时钟啦!

channl配置如下

下图这个勾取消

最后别忘了在ECUM中初始化

新建

简单来说,这里是在排**"开机启动项"**。当你的汽车 ECU 上电启动时,哪些底层驱动(MCAL 模块)需要最先被初始化,以及按照什么顺序初始化,都在这里规定。

1. 核心作用:定义初始化序列

在 AUTOSAR 架构中,硬件必须在 OS(操作系统)启动之前就准备好。EcuM_Init 会根据这个列表,依次调用各个模块的初始化函数。

图中展示了四个初始化步骤:

  • Mcu_Init: 初始化微控制器的基本功能(如内部寄存器、分频器等)。

  • Mcu_Init_AdditionalCode: 这是一个自定义步骤。看右边的 Additional Init Code 列,这里手动写了:

    1. Mcu_InitClock: 初始化时钟树。

    2. while(...): 等待 PLL(锁相环)锁定,确保时钟稳定。

    3. Mcu_DistributePllClock: 正式将时钟分发给整个芯片。

  • Port_Init: 初始化引脚配置(决定哪些针脚是 GPIO,哪些是 ADC 或通信引脚)。

  • Spi_Init: 初始化 SPI 通信模块。

2. 为什么要把 GPT 的初始化加到这里?

如果你要使用 GPT(通用定时器),你必须在这个列表里添加一个新的 Item(点击左上角的"+"号):

  • 顺序很重要: 通常 GPT 会放在 Mcu_Init 和 Port_Init 之后。

  • 关联性: 只有在这里配置了,EcuM 模块生成的代码才会去调用 Gpt_Init。如果不加在这里,即便你在 GPT 模块里配置得再完美,程序跑起来后 GPT 硬件也不会被启动。

新建

因为这里是定时中断,所以我们还要配置中断,在OS

具体中断的名字要去代码里找,这里打开vscode

复制这个名字去vscode这个c文件夹下查询

用这个名字

所以配置如下,其中中断源查询得知是64,参考本节视频的第14分钟

genarate生成代码

打开IAR添加工程文件夹

添加MCL文件夹

添加GPT文件夹,这些是静态代码,恩智浦公司给的驱动

在source下添加配置文件,这些在gendata下的是动态代码,也就是由配置工具生成的代码

可以在option里看到gpt的头文件路径已经被包含

这是 IAR Embedded Workbench 中的 项目选项设置(Options) 界面,具体定位在 C/C++ Compiler(编译器) 的 Preprocessor(预处理器) 配置页。

简单来说,这个界面是用来告诉编译器:"去哪里找头文件" 以及 "开启哪些全局开关"。

去改vscode运行代码

1. Gpt_EnableNotification(0);
  • 字面意思:开启 0 号定时器通道的"通知"功能。

  • 深层作用 :在 AUTOSAR 架构中,Notification(通知)等同于硬件中断的回调函数。

  • 必要性说明 :默认情况下,定时器计满溢出时仅仅是在硬件寄存器上置一个标志位。通过调用此函数,当定时器达到设定的计数值时,系统会自动触发并在软件层调用你在配置工具(如 DaVinci 或 EB Tresos)中关联的那个 Callback 函数。

  • 常见应用:用于周期性触发特定任务,例如 LED 灯闪烁、定时触发 ADC 采样或维持系统心跳。

2. Gpt_StartTimer(0, 240000);
  • 字面意思:启动 0 号定时器,并设置计数的终点值为 240,000。

  • 参数详细解释:

    • 0:代表通道 ID(Channel ID)。

    • 240000 :这是计数值(Ticks),它是一个无单位的数值,而不是直接的毫秒或微秒。

  • 时间换算逻辑 : 实际计时的时长取决于你在配置工具中为 GPT 模块设置的时钟频率(Clock Reference)。

    • 计算公式:时间 = 计数值 / 频率

    • 实例计算 :假设你的 GPT 模块配置频率为 24 MHz (即每秒跳动 24,000,000 次),那么 240,000 个 Ticks 换算出来的时间正好是 0.01 秒 ,也就是 10 毫秒 (10ms)。

1. 函数触发频率

根据函数名 GPT_10ms 和之前的配置,这个函数每隔 10 毫秒会被硬件定时器自动调用一次。

2. 代码逐行解析

  • Cbkcnt++; 每次进入函数,计数器 Cbkcnt 就加 1。因为每 10ms 进来一次,所以这个计数器记录了经过了多少个 10ms。

  • if( Cbkcnt >= 1000 ) 这是一个判断条件。当 Cbkcnt 达到 1000 时,意味着时间过去了: 10ms * 1000 = 10,000ms = 10 秒。

  • LedState ^= 0x01; 这是一个位运算(异或)。它的作用是翻转 LED 的状态:如果原来是 0(灭),就变成 1(亮);如果原来是 1,就变成 0。

  • Dio_WriteChannel(112, LedState); 这是 AUTOSAR 的标准接口,用来控制硬件引脚。

    • 112:是 LED 连接的引脚(Channel)编号。

    • LedState:将上面翻转后的状态(亮或灭)写到引脚上。

  • Cbkcnt = 0; 清空计数器,重新开始下一轮 10 秒的计时。

3. 最终效果总结

  • 动作:LED 灯会每隔 10 秒钟改变一次状态(亮或灭)。

  • 周期:一个完整的亮灭周期是 20 秒。

相关推荐
树欲静而风不止8613 小时前
技术实践:用全星SPC软件系统 REST API 把 SPC 能力嵌入自有质量平台
汽车
云边云科技_云网融合18 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
QYR-分析20 小时前
7.0% 年增!新能源汽车 EPB 电机赛道升温,安全执行件的博弈正在底盘上演
安全·汽车
金瑞铭20 小时前
RFID赋能汽车零部件管理:打通仓储与生产物流,实现高效协同
汽车·制造·rfid·全生命周期管理
irislinAmelia1 天前
汽车产线端侧AI视觉质检完整指南
人工智能·汽车
YH行业报告分析1 天前
2026热塑性聚酯合金市场深度分析:玻纤增强与新能源汽车三电系统驱动下的高性能化路径
汽车
艾德克斯1 天前
艾德克斯以测试之力护航汽车创新落地——以“测试先行”解码2027年度中国汽车十大技术趋势
汽车·芯片·ai测试·固态电池·汽车测试·v2g·电驱动
2301_780789661 天前
智能汽车的“软肋”:车载系统漏洞分析与安全防护框架初探
网络·安全·车载系统·汽车·ddos
慧都CAD开发笔记1 天前
汽车零部件检测软件如何用统一接口直读多种 CAD:3D InterOp 的三类数据接入
3d·汽车
YH行业报告分析1 天前
2026热浸镀锡铜带市场深度分析:汽车电子驱动下的精密镀层升级与国产替代路径
汽车