關于tresos Studio(EB)的MCAL配置之GPT

概念

GPT,全稱General Purpose Timer,就是個通用定時器,取的名字奇怪了點。定時器是一定要的,要么提供給BSW去使用,要么提供給OS去使用。

配置

General

GptDeinitApi控制接口Gpt_DeInit是否啟用

GptEnableDisableNotificationApi控制接口Gpt_EnableNotification和Gpt_DisableNotification是否啟用。

GptTimeElapsedApi控制接口Gpt_GetTimeElapsed是否啟用

GptTimeRemainingApi控制接口Gpt_GetTimeRemaining是否啟用

GptTimeElapsedApi控制接口Gpt_GetTimeElapsed是否啟用

GptTimeRemainingApi控制接口Gpt_GetTimeRemaining是否啟用

GptVersionInfoApi控制接口Gpt_GetVersionInfo是否啟用

GptWakeupFunctionalityApi控制喚醒相關功能接口接口Gpt_SetMode, Gpt_EnableWakeup,Gpt_DisableWakeup和Gpt_Cbk_CheckWakeup()是否啟用。

這里介紹一下定時器喚醒機制:如果硬件支持并啟用,內部硬件計時器可以作為喚醒源,如果一個通道作為喚醒源,就不能用來做其他的用途。

GptDevErrorDetect開發者錯誤檢測是PORT_DEV_ERROR_DETECT宏定義的開關,新人可以勾選,它能幫你檢查出一些開發階段的錯誤。老手一般不打開,因為會影響到代碼的執行效率。

GptReportWakeupSource控制喚醒源報告是否啟用

GptEnableDualClockMode在模式轉換時啟用預分頻器設置,一般用不上。

GptEnablePit64啟用pit 64位功能,PIT就是Periodic Interrupt Timer周期中斷定時器,PIT64就是一個大點的PIT計時器,能容納更大的tick數據,因為芯片只有32位,所以分開高32位和低32位傳回來。

?

GptClockReferencePoint

這里就是在GPT模塊里面創建個時鐘引用,本身不創建任何東西,只是把MCU模塊里面配置的時鐘引用過來,作為一個基準時鐘,給到GptChannelConfigSet里面的定時器去用。

GptChannelConfigSet

GptChannelConfiguration里面的才是主要的配置,每個容器就是一個通用定時器。

?

GptChannelId自己排序的號

GptHwChannel物理通用定時器通道,可以選STM(System Timer Module系統時鐘模塊)/GTM(Generic Timer Module通用定時器模塊)/PIT(Periodic Interrupt Timer周期中斷定時器)之類的。

?

  • STM(系統時鐘模塊):適用于系統級任務,如系統心跳或任務調度,通常與系統時鐘直接相關。
  • GTM(通用定時器模塊):適合需要多種功能的場景,如PWM生成、輸入捕捉和比較輸出,靈活性高。
  • PIT(周期中斷定時器):專為生成周期性中斷設計,適合需要定期執行任務的情況。

GptChannelMode定時器超時之后的行為,也就是連續計時還是一次性計時。

GptChannelTickFrequency指定定時器的頻率,單位為Hz。最大不能大于下面引用的GptClockReferencePoint引用的MCU時鐘,下面稱為“引用的MCU時鐘”。

對于STM,引用的MCU時鐘除以定時器頻率小于等于256。

對于RTC,引用的MCU時鐘除以定時器頻率只能是32或512或16384。

其他通道改這個配置值是不起作用的。

GptFreezeEnable勾選之后不能在代碼運行的時候修改硬件通道。

GptEnableWakeup使能通道喚醒功能

GptNotification通用定時器的回調函數,這個函數要自己實現,動態代碼只會生成個定義,不會實現出來。

GptChannelClkSrcRef選擇GptClockReferencePoint里面的引用,這個引用后面會再引用到MCU的時鐘源。具體GPT的時鐘基礎就是引用的MCU頻率,在Gpt_StartTimer接口里面設置超時時間,到達超時時間就會調用回調函數。

GptWakeupSourceRef喚醒源,從ECU狀態管理器里面獲取。

GptDisableEcumWakeupSourceNotification通過調用EcuM_CheckWakeup接口啟用/禁用EcuM通知

靜態代碼

Gpt_CheckWakeup檢查支持喚醒的GPT通道是否是喚醒事件的源,并調用ECU狀態管理器服務EcuM_SetWakeupEvent,用于有效的GPT通道喚醒事件。在調用Gpt_Cbk_CheckWakeup之前,需要初始化驅動程序。

Gpt_DeInit逆初始化接口,根據硬件通道是STM/PIT/GTM/PIT1類型來操作對應的寄存器。譬如硬件通道是STM類型的,就操作STM_CR寄存器失能定時器、分頻數設置為0,操作STM_CCR寄存器失能STM通道里面跟定時器相關的配置,操作STM_CMP寄存器將比較器里面的值清零,操作STM_CIR寄存器清除中斷標志位。最后,無論是什么類型的硬件通道,都會把通道狀態進行重置,模式設置為普通,回調函數指針清空。

Gpt_DisableWakeup禁用單個GPT通道的喚醒中斷調用。實際上就是調用Gpt_LLD_DisableWakeup接口,根據硬件通道類型去失能對應通道的中斷,入參是物理通道ID,需要在動態代碼里面復制。

Gpt_EnableNotification開啟單個GPT通道的喚醒中斷調用,操作Gpt_DisableWakeup相反。

Gpt_GetTimeElapsed獲取從開始計時或重新開始計時到現在的tick,實際上是調用Gpt_LLD_GetTimeElapsed接口獲取當前tick返回。

Gpt_GetTimeRemaining獲取現在到超時之間的tick,實際上是調用Gpt_LLD_GetTimeRemaining接口獲取當前tick和超時tick進行相減后返回。

Gpt_GetVersionInfo獲取版本信息,需要傳入一個Std_VersionInfoType類型的結構體指針,接口會把版本信息賦值到傳入的結構體里面。

Gpt_Init初始化的時候需要調用,入參是Gpt_ConfigType類型的結構體指針,接口會把入參的結構體或者Gpt_InitConfigPC結構體里面的內容賦值給全局結構體Gpt_Cfg_Ptr,這個結構體會在Gpt_LLD_SetSleepMode等GPT相關的操作函數里面使用到。

Gpt_SetMode設置GPT的模式,只有GPT_MODE_NORMAL和GPT_MODE_SLEEP可以選。如果是GPT_MODE_NORMAL,調用Gpt_LLD_SetNormalMode接口,有回調函數就使能回調函數,使能定時器。如果是GPT_MODE_SLEEP,調用Gpt_LLD_SetSleepMode,停止定時器并失能,有回調函數失能回調函數。并且在執行過程中調用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保護GPT的執行。

Gpt_StartTimer啟動定時器,入參為GPT通道和超時值,單位為tick。先調用Gpt_LLD_CheckStartTimeoutValue檢查超時值是否合理,再調用Gpt_LLD_StartTimer開始計時。并且在執行過程中調用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保護GPT的執行。

Gpt_StopTimer停止定時器,調用Gpt_LLD_StopTimer暫停計時。并且在執行過程中調用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保護GPT的執行。

Gpt_DisableNotification失能定時器函數回調機制。

Gpt_DisableNotification_Pit64失能Pit64的回調機制,其實就是清除PIT1_TCTRL寄存器。并且在執行過程中調用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保護GPT的執行。

介紹到這里,需要注意一件事情,就是啟動定時器之前,如果有回調函數,就要先使能回調機制。暫停定時器的時候,如果有回調函數,就要失能回調機制,放在暫停定時器的前還是后都可以。

Gpt_EnableNotification_Pit64使能Pit64的回調機制

Gpt_EnableWakeup_Pit64使能PIT64的喚醒功能

Gpt_GetTimeElapsed_Pit64獲取PIT64從開始計時或重新開始計時到現在的tick

Gpt_GetTimeRemaining_Pit64獲取PIT64計時器離超時還有多久的tick

Gpt_StartTimer_Pit64啟動PIT64計時器

Gpt_StopTimer_Pit64暫停PIT64計時器

動態代碼

GPT_GTM_TOMx_CH_y_ISR_USED,其中x和y都是可變的數字,當你選擇的GPT通道為GTM的,就會出現這類定義,這類定義會將動態代碼里面的ISR(Gpt_TOM_x_CHy_CHz_ISR);接口編譯進來,其中xyz都是可變數字。其實就是開啟一個TOM的中斷,并且把該接口實現,該接口本質上就是調用Gpt_Gtm_LLD_ProcessInterrupt接口執行產生中斷時候的動作,譬如重載、調用回調函數之類的。

其他的GTM和STM、PIT也類似。

Gpt_InitChannelPC_1數組里面有每一個GPT的初始配置信息,用來給Gpt_Init初始化的。

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72505.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dify 開源大語言模型應用開發平臺使用(一)

文章目錄 一、創建鋰電池專業知識解答應用1.1 應用初始化 二、核心功能模塊詳解2.1 知識庫構建2.2 工作流與節點編排節點類型說明工作流設計示例:鋰電池選型咨詢 2.3 變量管理 三、測試與調試3.1 單元測試3.2 壓力測試3.3 安全驗證 四、部署與優化建議4.1 部署配置4…

《Java基礎 聊天窗口案例:剖析 GUI、文件 I/O 等關鍵技術知識》

1. 面向對象編程 類與對象:代碼中定義了 Chat 類,它是整個程序的核心,封裝了與聊天窗口相關的屬性和方法。在 main 方法中創建了 Chat 類的對象,并調用其方法來完成相應的功能。繼承與多態:ButtonClickListener 類實現…

IDE集成開發環境MyEclipse中安裝SVN

打開Myeclipse的help菜單----install from site 點擊add彈出對話框 在輸入框中輸入對應內容 http://subclipse.tigris.org/update_1.10.x 點擊OK之后,會刷新出兩個選項,需要選中的 點擊next,出現許可的時候選中同意,一直結束等…

歸并排序:分治哲學的完美演繹與時空平衡的藝術

引言:跨越世紀的算法明珠 在計算機科學的璀璨星河中,歸并排序猶如一顆恒久閃耀的明星。1945年,現代計算機之父馮諾伊曼在EDVAC計算機的研發過程中首次系統性地提出了這一算法,其精妙的分治思想不僅奠定了現代排序算法的理論基礎&…

服務器CPU微架構

1、微架構圖 前端:預解碼、解碼、分支預測、L1指令緩存、指令TLB緩存 后端:順序重排緩存器ROB處理依賴,調度器送到執行引擎 執行引擎:8路超標量,每一路可以進行獨立的微操作處理 Port0、1、5、6支持整數、浮點數的加…

SpringBoot調用DeepSeek

引入依賴 <dependency><groupId>io.github.pig-mesh.ai</groupId><artifactId>deepseek-spring-boot-starter</artifactId><version>1.4.5</version> </dependency>配置 deepseek:api-key: sk-******base-url: https://api.…

【前端基礎】Day 9 PC端品優購項目

目錄 1. 品優購項目規劃 1.1 網站制作流程 1.2 品優購項目整體介紹 1.3 學習目的 1.4 開發工具以及技術棧 1.5 項目搭建工作 1.6 網站favicon圖標 1.7 網站TDK三大標簽SEO優化 2. 品優購首頁制作 2.1 常見模塊類命名 2.2 快捷導航shortcut制作 2.3 header制作 2.4…

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的簡要步驟。移植描述過程中&#xff0c;忽略了Keil軟件的部分使用技巧。默認讀者熟練使用Keil軟件。本文的描述是基于OpenMCU_FreeRTOS這個工程&#xff0c;該工程已經下載放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo創建一個基于CIFLog平臺的應用系統1. 下載安裝CIFLog2. 授權使用3. 解決本地機器碼驗證錯誤問題4. 創建一個基于CIFLog平臺的應用系統&#xff08;1&#xff09;新建項目&#xf…

ESP8266連接網絡實時上傳數據

要實現這個功能,可以按照以下步驟進行編程。我們將使用Arduino IDE來編寫代碼,并結合ESP8266的WiFi庫、MQTT庫以及Web服務器庫來實現。 1. 準備工作 硬件:ESP8266開發板、溫度傳感器(如DS18B20)、顯示屏(如OLED)。軟件:Arduino IDE、ESP8266庫、PubSubClient庫(MQTT)…

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 測試框架的配置文件,它允許你自定義 pytest 的行為。通過在 pytest.ini 中設置各種選項,可以改變測試用例的發現規則、輸出格式、插件行為等。以下詳細介紹 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于項目的根目錄下,pytest 在運…

MARL零樣本協調之Fictitious Co-Play學習筆記

下列引用來自知乎作者Algernon 知乎link FCP作為ZSC領域兩階段訓練方法的開創者 論文《Collaborating with Humans without Human Data》來自 NeurIPS 2021。這篇論文提出 Fictitious Co-Play (FCP) 來解決 ZSC 問題。論文認為&#xff0c;ZSC 的第一個重要問題是對稱性&#x…

Docker小游戲 | 使用Docker部署DOS游戲合集

Docker小游戲 | 使用Docker部署DOS游戲合集 前言項目介紹項目簡介項目預覽二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署dos-games網頁小游戲下載鏡像創建容器檢查容器狀態檢查服務端口檢查容器日志安全設置四、訪問DOS游戲網頁五、進階玩法下載游戲拷貝…

SpringBoot-模擬SSE對話交互

SpringBoot-模擬SSE對話交互 后端使用SSE進行會話&#xff0c;前端使用Html模擬大模型的問答交互->【前端】【后端】 1-學習目的 本項目代碼倉庫&#xff1a;https://gitee.com/enzoism/springboot_sse 1-核心知識點 1&#xff09;什么是SSE協議->客戶端發起一次請求&am…

2025 ubuntu24.04系統安裝docker

1.查看ubuntu版本&#xff08;Ubuntu 24.04 LTS&#xff09; rootmaster:~# cat /etc/os-release PRETTY_NAME"Ubuntu 24.04 LTS" NAME"Ubuntu" VERSION_ID"24.04" VERSION"24.04 LTS (Noble Numbat)" VERSION_CODENAMEnoble IDubun…

Avalonia 中文亂碼

代碼字體文件設置成支持中文的&#xff0c;但是編譯的代碼還是顯示的亂碼&#xff0c;原因是代碼文件的文件編碼格式不支持中文導致的。 如下面的2個頁面一部分中文顯示正常&#xff0c;一部分顯示正常&#xff0c;一部分顯示亂碼。

國產編輯器EverEdit - 工具欄自定義及認識工具欄上的按鈕

1 設置-高級-工具條 1.1 設置說明 1.1.1 工具條自定義 選擇主菜單工具 -> 設置 -> 常規&#xff0c;在彈出的選項窗口中選擇工具條分類&#xff0c;如下圖所示&#xff1a; 左側窗口是當前支持所有功能按鈕列表(上圖中居中欄)&#xff0c;右側的窗口是當前顯示在工具欄…

淘寶商品詳情高級版API接口測試與數據處理指南

在電商數據分析、商品監控和自動化運營中&#xff0c;淘寶商品詳情API接口是不可或缺的工具之一。本文將詳細介紹如何測試淘寶商品詳情高級版API接口的返回數據&#xff0c;并提供完整的數據處理流程&#xff0c;幫助開發者高效利用接口數據。 一、淘寶商品詳情API接口概述 淘…

C++海康相機DEMO

非標設備經常用到相機算法&#xff0c;利用工作之余時間&#xff0c;結合海康相機demo寫一套全面的相機應用&#xff0c;圖像處理常用的有halcon 、 opencv &#xff0c; MIL &#xff0c; visionpro&#xff0c;這里采用目前比較常用的halcon和opencv對相機圖片算法處理。整個…

TMS320F28P550SJ9學習筆記2:Sysconfig 配置與點亮LED

今日學習使用Sysconfig 對引腳進行配置&#xff0c;并點亮開發板上的LED4 與LED5 我的單片機開發板平臺是 LAUNCHXL_F28P55x 我是在上文描述的驅動庫C2000ware官方例程example的工程基礎之上進行添加功能的 該例程路徑如下&#xff1a;D:\C2000Ware_5_04_00_00\driverlib\f28p…