Hands-On 基於 Flagchip FC4150 MCAL-使用 GPT 模塊定時餵狗

簡介

        本文將詳細介紹如何使用 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


更多資訊,請掃碼關注我們!


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論