第二十一节: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_DeInitGpt_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_InitPort_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 秒。

相关推荐
南宫萧幕12 小时前
基于 Luenberger 观测器的 PMSM 无速度传感器 id=0 矢量控制系统 Simulink 建模与实现(一)
算法·matlab·汽车·控制
KIHU快狐13 小时前
快狐KIHU|110寸壁挂触控一体机G+G电容屏安卓系统汽车展厅查询展示
android·python·汽车
VBsemi-专注于MOSFET研发定制14 小时前
高端汽车零部件尺寸3D检测设备功率MOSFET选型方案:精密高效运动与成像电源驱动系统适配指南
3d·汽车
盟接之桥15 小时前
盟接之桥®制造业EDI软件:专注制造,为制造业服务,让全球供应链协同更有底气
网络·安全·低代码·汽车·制造
VBsemi-专注于MOSFET研发定制16 小时前
共享汽车功率管理器件选型实战:空间、效率与可靠性的平衡之道
大数据·汽车
VBsemi-专注于MOSFET研发定制16 小时前
功率MOSFET选型方案——路空一体飞行汽车充电场站高效、可靠与紧凑型电源系统设计指南
汽车
LONGZETECH16 小时前
教育数字化转型|汽车专业仿真教学体系搭建实操指南(含避坑+案例+FAQ)
大数据·人工智能·物联网·自动驾驶·汽车·汽车仿真教学软件·汽车教学软件
汽车仪器仪表相关领域18 小时前
Kvaser Leaf Light HS v2 CB:裸卡式CAN接口新标杆,赋能车载与工业集成测试高效升级
服务器·网络·数据库·人工智能·单元测试·自动化·汽车
docsz1 天前
新能源汽车监管平台
汽车·新能源
LONGZETECH1 天前
汽车仿真教学平台支持在线理论考试吗?实操解析+行业案例
人工智能·科技·架构·数据挖掘·汽车·汽车仿真教学软件·新能源汽车仿真教学软件