SemiDrive E3 MCAL 开发系列(4) – Gpt 模块的使用

一、  概述

本文将会介绍SemiDrive E3 MCAL GPT模块的基本配置,并且会结合实际操作的介绍,帮助新手快速了解并掌握这个模块的使用,文中的 MCAL 是基于 PTG3.0 的版本,开发板是官方的 E3640 网关板。

 


二、  Gpt 模块的主要配置

E3 最多有 6 个BTM 模块,每个 BTM 分为 G0 和 G1 两个计数器,G0 和 G1 必须分配在同一个核中。其中 G0 时钟为 APB 时钟,而 G1 的时钟为 24MHz,不同型号的 E3 芯片 G0 的频率有所不同,可以参照下图。

                                                 图 2.1 不同型号 G0 的时钟频率

GPT 模块的配置主要有两大部分,一个是通用配置,另一个是针对每个 GPT通道的配置,我们先看通用配置,具体配置如图 2.2 所示。

                                                 图 2.2 GPT 模块通用配置

下面针对主要的配置项进行说明:

  • 第一部分是选择是否使能相关的 API 接口,其中 GptPredefTimerFunctionalityApi 和 GptWakeupFunctionalityApi 这两个配置项是不支持的,配置将不起作用。
  • 第二部分是 GPT 驱动的配置,其中 GptPredefTimer1usEnablingGrade 这个配置项用于配置 PredefTimer 的模式,选择 32 位模式,则支持返回 32/24/16 位的数据,选择 24 位模式,则支持返回 24/16 位的数据,选择 16 位模式,则支持返回 16 位数据。
  • 第三部分是 PredefTimer 的配置,用于选择使用哪个 BTM 模块作为 PredefTimer。选择 BTM 以后,这个 BTM 必须分配在 SF 核,并且占用一个 G0 通道。

 

接着针对每个 GPT 通道进行对应的配置,我们的实际 Demo 将以 BTM6 的 G0 定时器为例,配置界面如下图所示。

                                                  图 2.3 GPT 通道配置界面

 

下面以 BTM6 G0 这个通道的配置为例对配置项进行说明介绍。

                                                 图 2.4 GPT 通道配置



具体每个配置项的作用如下:

  • GptChannelId:这个值是自增的,用户无需修改,修改的话会报错。
  • GptHwModuel:这个参数用于选择使用哪个 BTM。
  • GptHwModulePrescaler:这个参数选择定时器的分频系数,例如我们使用的芯片是 E3640,其 G0 的频率为 150 MHz,我们这里配置分频系数为 149,分频后的频率为 150/(149+1) = 1 MHz。
  • GptHwModuleChannel:这个选项用于选择使用哪个定时器,G0 或者 G1。
  • GptChannelMode:这个选项用于选择触发模式,单次触发或者连续触发。
  • GptChannelTickFrequency:该选项无需配置。
  • GptChannelTickValueMax:该选项用于启动定时器时检查传入的参数是否大于该最大值。
  • GptNotification:回调函数设置,这里配置回调函数的名称,函数需要用户自己实现。


三、  实际操作

下面我们基于 MCAL 例程和官方的 E3640 网关开发板进行验证,代码逻辑比较简单,在初始化完 GPT 定时器后启动定时器,定时器周期为 10 ms,在中断回调函数中会进行串口打印,具体代码实现如下图所示。

                                                   图 3.1 GPT 测试代码实现

运行测试代码,具体操作如下图所示,可以看到串口会定时打印信息。

                                                       图 3.2 具体操作

四、使用注意事项

E3 的 GPT 模块在使用上有以下注意事项:

  • 若将 GPT 分配到了不同的核,则 G0 和 G1 都应该在同一个核中。
  • 同一个 GPT 其中断只能开在分配的核中。
  • 禁止调用非本核的 GPT,MCAL 驱动会进行相应拦截。
  • 对于 PredefTimer 的初始化只能在 SF 核中才能初始化成功,在其它核中可以使用 Gpt_GetPredefTimerValue 这个接口。由于 PredefTimer 使用了 BTM 的一个 G0 通道,因此不能在 EB 中继续配置这个通道。
  • Gpt_Init 函数只初始化本核中的 GPT,其它核的需要在其它核中进行初始化,Gpt_Deinit 函数也是一样。


五、参考资料

1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论