一、测试环境
SemiDrive 支持系统 G9 系列目录中,PTG5.1.2 版本只适用于 G9H,其中 MCAL_v1.3.0 例程较为全面。最近进行了 GPT 模块的例程测试,操作过程 hands on 如下:
注:此版本使用 eMMC Only 的启动方式(拨码:0001),不使用 OSPI Flash。
硬件:SemiDrive G9H ref A02 图(1)
软件:PTG5.1.2 + MCAL_v1.3.0
软件环境搭建以及 G9H Ref A02 操作方法参考:《SD_G9_Quick_Start_Rev2.4.pdf》
图(1)
2024/10/28~11/03 万圣节特别企划,点击此处参与有奖活动吧~
二、配置&Demo
- 模块介绍:
9 Series MCAL 中最多支持配置 8 个 Timer Module,每个 Timer Module 下分为 G0,G1,Local_A/B/C/D 通道(32 位)。其中 safety domain 默认可配置 Timer1/2,其余六个 Timer 由其他 domain 使用。主要使用 Timer(归属于 TMR:Time-Mode Register,即通用定时器,具有比较和捕获功能,分别适用于 PWM 和 ICU 场景)的 Count 功能,提供定时器功能,定时触发一个(溢出)中断。
Timer 通道支持配置两种时钟源:400M 高频时钟(来自 Soc 内部时钟发生器)、24M 低频时钟(来自 24MHz 晶体振荡器)。
- EB 配置
GptChannelConfiguration
Name:对应生成宏定义,可以根据名字,来选择哪个 GPT。如图:
图一 GptChannelConfiguration
GptChannelId:自增的,修改会报错。固定值。
GptHwModule:选择硬件 Timer Module。
GptHwModulePrescaler:分频值,需要减 1 写入,如图为 24 分频。
GptHwModuleChannel:G0/G1,Local_A/B/C/D
GptChannelMode:选择循环触发模式或单次触发模式。
GptChannelTickFrequency:无需配置。
GptChannelTickValueMax:用于 starttimer 时,check 传参是否大于最大值。
GptNotification:回调函数。
GptChannelClkSrcRef:不支持。
图二 GptChannelConfiguration
GptClockReferencePoint
Gpt functional clock 通过选择 Mcu reference clock 配置,如图三、图四
图三 GptClockReferencePoint
Mcu reference clock 可在 MCU——McuClockSettingConfig 中配置
需注意,Gpt 中可以存在多个 McuClockReferencePoint 配置,但同一 Gpt 配置中仅可将单个 Clock Reference 作为 clk src 配置给所有通道(即:所有通道仅可配置同一时钟源)
图四 McuClockSettingConfig
另外,需要注意:通道配置 Oneshot 模式只能使用 Loca l通道,G0/G1 不支持 Oneshot 模式
3. 代码和 Log
实例中使用 Gpt_StartTimer 接口,经过 XXX.c->XXX_Ip.c 层层调用将值写入寄存器 CNT_G0_OVF(图五),参考《G9 Series Processor Technical Reference Manual》TMR 寄存器章节(图六)可知,可用于更新计数的溢出值。
图五 CNT_G0_OVF
图六 寄存器描述
关于计数周期:因为 EB 中选配 24MHz Clock,分频值 24,所以计数加 1 的周期为 1us。如图:
图七 计数周期
对照 Log 分析示例逻辑:
Case 201:1ms 后进中断执行 test_ms++;执行 1000 次(即 1s)打印一次。
Case 202: 因为 Timer mode: one-shot,所以每次进中断需要再执行一次 Gpt_StartTimer();
图八 示例 log
三、参考文献
- 《SemiDrive_9Series_MCAL User Guide》
- 《G9 Series Processor Technical Reference Manual》
欢迎在博文下方留言评论,我们会及时回复您的问题。
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:Alan
更多资讯,请关注原文作者!