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次,發文人進小黑屋喔~

評論