介绍一下主要容器
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列,这里手动写了:-
Mcu_InitClock: 初始化时钟树。 -
while(...): 等待 PLL(锁相环)锁定,确保时钟稳定。 -
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 秒。
