一、測試環境
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)
二、配置&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
更多資訊,請掃碼關注我們!

評論