一、 概述
本文將會介紹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
評論