簡介
本文將詳細介紹如何使用 EB 工具配置 Flagchip FC4150 MCAL 使用 GPT 模塊定時餵狗,並重點強調了配置 GPT、WDG 模塊的過程以及對 GPT、WDG 模塊的詳細解釋,關於 mcu、port 、dio、icu、adc 、pwm 模塊可參考之前發布的博文。本次示例演示將會使用 FTU4_CH0 超時時間去做 WDG 模塊的硬體定時餵狗,FTU0_CH1 來做周期性軟體餵狗。
硬體平台:旗芯微 FC4150 DEMO BOARD V2 開發板
軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04
MCAL: V1.1.0 & V1.1.1
一 、MCAL 配置
1.1 配置 MCU 模塊
根據本次實例的內容,我們需要在 MCU 模塊-> PCC 下添加 FTU1、FTU4 的外設時鐘,時鐘選擇 FOSCDIVH。另外需要在 MCU 模塊-> McuClockReferencePoint下添加 FTU1、FTU4、SYS_CORE 、FOSC 對外的參考時鐘,來用作 GPT、WDG 模塊的輸入參考時鐘。如圖 1.1.1、1.1.2 所示。
▲ 圖 1.1.1
▲ 圖 1.1.2
1.2配置 WDG 模塊
1.2.1 在 Module Configurations 中添加 WDG 模塊,在 WDG-> General 下配置超時時間的初始值為 0.03 秒、最大值為 0.1 秒
▲ 圖 1.2.1
1.2.2 在 WDG-> WdgSettingsConfig下添加 WdgSettingsConfig_0,選擇硬體看門狗 0、看門狗模式為慢速、關聯的 Gpt 通道為 GptChannel_WDG (該項在 GPT ->GptChannelConfiguration 配置完成後進行配置)、時鐘參考點選擇 McuClockReferencePoint_Fosc、填入看門狗時鐘頻率、選擇看門狗類型為超時復位、看門狗時鐘選擇 FOSC_Clock、看門狗溢出時間 0.1 秒、使能 Wdg 時鐘分頻(固定 256 分頻)。如圖 1.2.2 所示
▲ 圖 1.2.2
1.3 配置 GPT 模塊
1.3.1在 Module Configurations 中添加 GPT模塊,在 GPT-> GptClockReferencePoint下選擇 系統時鐘參考點。另新建兩個 GPT 時鐘參考點,如圖 1.3.1 所示
▲ 圖 1.3.1
1.3.2 在 GPT-> GptChannelConfiguration 添加兩個 GPT Channel
▲ 圖 1.3.2
1.3.3 雙擊 Index 0 進入GPT Channel 配置界面,將名稱命名為 GptChannel_WDG、GPT 通道選擇為 FTU4_CH0、GPT 通道配置為連續模式、時鐘參考點選擇GptClockReferencePoint_Ftu4、填入 GPT 通道時鐘頻率、填入 GPT 通道最大計數值、使能 FTU4 DEBUG、ISR 模式、填入 FTU4 中斷回調函數命名為 Wdg_Cbk_GptNotification0 、將 FTU4 設置為時鐘 32 分頻,時鐘輸入選擇為 PCC。關於 FTU4 時鐘分頻說明: 在 WDG 模塊中我們配置了看門狗硬體溢出時間 0.1 秒(MCAL WDG API 初始化時會將 GPT 觸發中斷的時間設置為看門狗硬體溢出時間的一半(0.05 秒)),FTU4 的時鐘輸入源為 24Mhz 、分頻 32 後計算得出 0.75MHz、FTU4 最大計數值為 65535 ,計算得出 FTU4 計數溢出中斷時間為 0.08738 秒,在看門狗的硬體溢出時間內進行了餵狗操作,不會使系統硬體復位。
▲ 圖 1.3.3
1.3.4 雙擊 Index 1 進入 GPT Channel 配置界面,將名稱命名為 GptChannel_WDGCondition、GPT 通道選擇為 FTU1_CH0、GPT 通道配置為連續模式、時鐘參考點選擇GptClockReferencePoint_Ftu1、填入 GPT 通道時鐘頻率、填入 GPT 通道最大計數值、使能 FTU1 ISR 模式、填入 FTU1 中斷回調函數命名為 Gpt_WdgCondition_Notification 、將 FTU1 設置為時鐘 32 分頻,時鐘輸入選擇為 PCC。關於 FTU1 時鐘分頻說明: FTU1 應用於每次進入中斷設置軟體超時時間,與 FTU4 的時鐘頻率相同更加容易方便計算。
▲ 圖 1.3.4
二、示例代碼解析
2.1 工程導入 & Main 函數
2.1.1將 EB 配置好的工程編譯並更新代碼至 FCIDE 中
2.1.2 在工程下中找到 Main 函數,將 BSP_FCUART_Init、Bsp_Gpt_Init 、Bsp_Wdg_Init 函數取消屏蔽
▲ 圖 2.1.2
2.2 GPT 相關函數
2.2.1 在 Gpt_PBcfg.c 中我們可以看到 FTU0、FTU4外設、FTUx_CH0 在EB 工具配置好的屬性、回調函數名稱
▲ 圖 2.2.1.1(GPT通道配置屬性)
▲ 圖 2.2.2(GPT通道中斷回調函數)
2.2.2 在 Gpt_Cfg.h 中我們可以看到 GPT 通道配置的名稱宏定義,在調用 MCAL 函數會使用到
▲ 圖 2.2.1.2 (GPT通道配置屬性)
2.2.3 在 Bsp_Gpt.c 中, 這是 demo 示例對 MCAL API 的調用,其中 FTU4_IRQHandler 用於硬體餵狗,FTU1_IRQHandler 用於軟體超時時間設置
▲ 圖 2.2.3
2.3 WDG 相關函數
2.3.1 在 Wdg_instance0_PBcfg.c 中我們可以看到 WDG0 外設在 EB 工具配置好的屬性,工作模式、時鐘、關聯的 GPT 通道名稱
▲ 圖 2.3.1.1 (WDG0 配置屬性)
▲ 圖 2.3.1.1 (WDG0 慢速模式下的配置)
2.3.2 在 Wdg_HLD.c 中, 找到 Wdg_Cbk_GptNotification0 這是我們在 GPT FTU4_CH0 通道配置中的中斷回調函數實體,用於進行硬體看門狗餵狗。
▲ 圖 2.3.2
2.3.3在Bsp_Wdg.c 中, 這是 demo 示例對 MCAL API 的調用
▲ 圖 2.3.3
2.4 軟體流程框架
2.4.1 軟體流程示意
配置項:
①、硬體餵狗時間(硬體看門狗)
②、軟體餵狗時間(軟體看門狗)
③、軟體超時時間(軟體看門狗的超時時間)
注意項:(軟體超時時間>定時中斷進行餵狗時間)&& (定時中斷進行餵狗時間>定時中斷時間)
▲ 圖 2.4.1
2.4.2 Wdg_Cbk_GptNotification0 回調函數中 Wdg_HLD_ChannelTrigger 函數分析
每一次 GPT FTU4_CH0 中斷的餵狗中,都會對 s_WdgTimeout 進行操作,當 s_WdgTimeout 時間小於 s_WdgGptPeriod 時間時,將會停止 GPT 相對應的通道計時功能(停止餵狗、FTU4_CH0 中斷),否則進行 s_WdgTimeout - s_WdgGptPeriod 時間,進行餵狗。(s_WdgTimeout 軟體超時時間、s_WdgGptPeriod:GPT 周期觸發時間)
▲ 圖 2.4.2
2.4.3 Gpt_WdgCondition_Notification 回調函數中 Wdg_Instance0_SetTriggerCondition 函數分析
每一次 GPT FTU1_CH0 中斷中,進行軟體超時時間的設定,當 uElapsedTime 大於 s_WdgTimeout 時,將會停止 GPT 相對應的通道計時功能(停止餵狗、FTU4_CH0 中斷),否則進行 s_WdgTimeout 的重新賦值。(s_WdgTimeout 剩餘軟體超時時間、uElapsedTime:上一次 FTU4_CH0 中斷髮生到此刻的時間間隔)
▲ 圖 2.4.3
三、燒錄 & 調試
3.1 將工程編譯並燒錄到開發板
通過串口上位機軟體,波特率設置為 115200 ,打開串口時間戳,我們可以看到串口列印的信息 :FTU1 的軟體餵狗中斷時間為 20 ms,FTU4 的硬體餵狗中斷時間為 50 ms。
▲ 圖 3.1
四、MCAL GPT 模塊詳解
FC4150 GPT 模塊用於定時器觸發指定的功能
4.1 General 配置
▲ 圖 4.1
4.1.1 GptConfigurationOfOptApiServices
- GptDeInitApi:復位 GPT 配置
- GptEnableDisableNotificationApi:啟用通道中斷通知
- GptTimeElapsedApi :獲取該通道已經過的時間
- GptTimeRemainingApi :獲取該通道到達設定目標之前剩下的時間
- GptVersionInfoApi :獲取 GPT 模塊版本信息
- GptWakeupFunctionalityApi :使能通道的喚醒功能
- GptChangeNextTimeoutValueApi :更改正在運行的通道計數器比較值的設置
4.1.2 GptDriverConfiguration
- GptDevErrorDetect :打開或關閉開發錯誤檢測和通知
- GptPredefTimer100us32bitEnable :啟用 GPT 預定義定時器 100us 32bit
- GptPredefTimer1usEnablingGrade :指定使能 1us 時鐘周期的 GPT 預定義定時器、可選 GPT_PREDEF_TIMER_1US_16BIT_ENABLED、GPT_PREDEF_TIMER_1US_16_24BIT_ENABLED、GPT_PREDEF_TIMER_1US_16_24_32BIT_ENABLED
- GptReportWakeupSource :使能喚醒源通知
- GPT Register Locking Mode :GPT 寄存器加鎖機制,不需要配置
- GPT Enable User Mode Support :不需要配置
- Gpt Standby Wakeup Support :專門休眠喚醒(需要用 A0NTIMER ) 配合 ECUM,與 GptChannelConfiguration -> General ->GptWakeupConfiguration 相同配合勾選
4.2 GptChannelConfigSet 配置
4.2.1 在 GptChannelConfiguration 下一共可以添加 58 個 GPT Channel ,由硬體決定
▲ 圖 4.2
4.2.2 雙擊 Index 進入 GptChannelConfiguration -> General 配置
▲ 圖 4.2.2
- GptChannelId: GPT 通道邏輯 ID 號
- GptHwChannel :選擇所使用的硬體 GPT 通道
- GptChannelMode :通道計數模式。可選單次和連續觸發
- GptChannelTickFrequency:GPT 通道的時鐘頻率
- GptChannelClkSrcRef:GPT 通道的時鐘參考點
- GptChannelTickValueMax:GPT 通道最大計數值(由硬體決定)
- GptDbgModeEnable :使能後,在 DEBGU 打斷點後 CNT 繼續計數
- GptIsrEnable :中斷使能
- GptEnableWakeup :使能喚醒服務
- GptNotification :填入中斷回調函數名稱
- GptFtuPrescaler :GPT 外設的時鐘分頻選擇
- GptFtuChannelClkSrc: GPT 通道的時鐘源選擇
4.3 GptClockReferencePoint 配置
系統時鐘參考點,依賴於 MCU 模塊 McuClockReferencePoint 中的定義
▲ 圖 4.3
- System clock reference point: 系統時鐘的參考點
- GptClockReferencePoint:GPT 所選外設時鐘的參考點
4.4 PublishedInformation
GPT 模塊版本信息
4.5 GPT 模塊常用函數
- Gpt_Init:初始化GPT 模塊
- Gpt_DeInit:將 GPT模塊復位至默認狀態
- Gpt_GetTimeElapsed:獲取該通道已經過的時間
- Gpt_GetTimeRemaining:獲取該通道到達設定目標之前剩下的時間
- Gpt_StartTimer:開始 GPT通道計時
- Gpt_StopTimer:停止GPT通道計時
- Gpt_EnableNotification:使能 GPT 通道事件通知
- Gpt_DisableNotification:失能GPT通道事件通知
- Gpt_GetVersionInfo: 獲取 GPT模塊版本信息
- Gpt_SetMode:設置 GPT 模塊的運行模式
- Gpt_DisableWakeup:失能 GPT 通道喚醒
- Gpt_EnableWakeup:使能 GPT 通道喚醒
- Gpt_CheckWakeup:檢查 GPT 通道是否為喚醒源
- Gpt_ChangeNextTimeoutValue:更改正在運行的通道計數器比較值的設置
- Gpt_GetPredefTimerValue:獲取預定義定時器值
五、MCAL WDG 模塊詳解
FC4150 WDG 模塊有兩個看門狗模塊
5.1 General 配置
▲ 圖 5.1
- Development Error Detection:打開或關閉開發錯誤檢測和通知
- Wdg Disable Allowed:允許啟用/禁用看門狗驅動程序
- Wdg Instance0 Index:看門狗 0 模塊
- Wdg Instance1 Index:看門狗 1 模塊
- Wdg Initial Timeou:初始的看門狗軟體超時時間,看門狗初始化時設置的時間
- Wdg Max Timeout:最大可設置的看門狗軟體超時時間,設置軟體超時時間時,會與 Wdg Max Timeout 進行比較,進行合規檢查
- Wdg Run Area:看門狗驅動程序的執行區域,ROM 或 RAM
- Wdg Trigger Location:不需要配置
- Provide Version Info AP:獲取看門狗模塊的版本信息
- Wdg Trigger Mode:看門狗觸發方式,不需要配置
5.2 WdgSettingsConfig 配置
5.2.1 在 WdgSettingsConfig 下一共可以添加 2 個 WDG ,由硬體決定
▲ 圖 5.2.1
5.2.2 雙擊 Index 進入 WdgSettingsConfig-> General 配置
▲ 圖 5.2.2
- Wdg Hardware Instance:看門狗硬體外設選擇
- Wdg Default Mode:看門狗默認模式配置,關、快速、慢速
- Enable Wdg interrupt:是否使能看門狗中斷
- Wdg instance ISR CallBack Notification:看門狗硬體中斷通知回調函數
- Wdg GPT Trigger Channel:選擇關聯的 Gpt 通道,WDG 通過 GPT 來實現啟/停餵狗
- Wdg Clock Value:看門狗時鐘
- WdgClkSrcRef:看門狗時鐘參考點
- Wdg Runs In Stop mode:當 MCU 處於 STOP 模式時,啟用/停止看門狗繼續計數
- Wdg Runs In Debug Mode:當 MCU 處於 DEBUG 模式時,啟用/停止看門狗繼續計數
- Wdg Runs In Wait Mode:當 MCU 處於 WAIT 模式時,啟用/停止看門狗繼續計數
- Wdg Set Reset Delay:當看門狗發生中斷時,需配置延遲復位時間,可選 WDG_RST_DLY_128、WDG_RST_DLY_256、WDG_RST_DLY_512、WDG_RST_DLY_1024 總線時鐘。注意:僅在 FC4150 1M Flash 晶片上可用
- Wdg Operation Mode:看門狗計數溢出時處理模式、超時復位、超時中斷
- Wdg Clock Selection:看門狗時鐘源選擇,可選 Bus_Clock、AON_Clock、FOSC_Clock、FOSC_Clock
- Wdg Timeout Period:看門狗溢出時間設置,單位:秒 ,注意:不要超過最大硬體時鐘周期
- Wdg Window Mode:啟用窗口看門狗模式
- Wdg Window Period:窗口看門狗溢出時間設置,單位:秒
- Wdg Prescaler Enabled :啟用看門狗的時鐘分頻,啟用後則 256 分頻
- Wdg Allow Updates:是否允許軟體重新配置看門狗而不進行復位
- Wdg Test Mode:啟用看門狗自檢模式,可選 TestModeDisabled、TestModeEnabled、TestModeLowByte、TestModeHighByte
5.3 PublishedInformation
WDG 模塊版本信息
5.4 WDG 模塊常用函數
- Wdg_Instancex_Init:初始化看門狗模塊
- Wdg_Instancex_SetMode:設置看門狗模式
- Wdg_Instancex_SetTriggerCondition:看門狗軟體超時時間設置
- Wdg_Instancex_GetVersionInfo:獲取 WDG 模塊版本信息
六、總結
本文以使用 GPT 模塊定時餵狗為示例,詳細介紹了如何配置和使用 GPT(定時器)、WDG(看門狗)模塊,通過本文的講解,讀者可以了解到如何正確配置 GPT、WDG 模塊,以實現定時器觸發指定的功能與與看門狗模塊的使用。
七、參考文獻
(1) AUTOSAR_SWS_WatchdogDriver.pdf
(2) AUTOSAR_SWS_GPTDriver.pdf
(3) FC4150 Reference Manual V3.0.pdf
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Memory
更多資訊,請掃碼關注我們!
評論