Semidrive E3 MCAL 中看門狗超時後的行為介紹

一、概述

        本文主要介紹 Semidrive E3 MCAL 軟體包中,在 EB 內的 Wdg timeout behavior 的配置項。此配置項可以配置 WDT 超時後三種行為,一是觸發中斷進入中斷回調函數,二是直接 reset 復位,三是先進入中斷再經過一段時間後 reset 復位。E3 最多支持 7 個 WDG,其中 WDG1~6 支持中斷和重啟。WDG8 只支持中斷。

硬體設備:E3640 GATEWAY 開發板

軟體包:MCAL PTG3.0

調試器:J-Link

 E3640 Gateway 開發板

圖 1.1 E3640 Gateway 開發板

二、MCAL 軟體包默認配置介紹

首先介紹一下 E3640 的默認示例配置,本文使用默認示例中配置的 WDT4 為基礎進行測試。

1. General 欄位

WdgChannelId:用於動態內存分配,自增 ID。

       WdgDefaultMode:調用初始化接口後默認的模式,因為示例中有調用 Wdg_140_Instance4_Wdt_SetMode(WDGIF_FAST_MODE),所以會使用配置頁面下 WdgSettingsFast 的時間參數。否則會使用 WDG 模塊 General 中配置的 WdgInitialTimeout 參數。FAST_MODE 和 SLOW 無本質區別,只是兩套配置參數。OFF_MODE 則代表 WDG 中超時值為 0 ,但 WDG 是從 1 開始計數,所以 0 是達不到的值,相當於 OFF。

WdgInstanceIndex:選擇使用的 WDG。

WdgTimeoutNotification:超時後的回調函數,在配置中斷模式下才起作用。

WdgExternalSignalApi:可以配置一個 GPIO,超時後 GPIO 從高電平變為低電平。


2. WdgSettingsSlow/Fast 欄位

WdgClockFrequency:WDG 的時鐘,默認為 24M,不可修改。

WdgTimeoutPeriod:超時時間,單位 ms。

WdgTimeoutBehavior:選擇超時觸發中斷、重啟或先中斷再重啟。

WdgTriggerCondition:選擇窗口模式或普通模式。窗口模式下需要配置 WdgRefreshTime。

WdgRefreshTime:用來配置窗口模式的時間,在超過這個配置時間後才可以餵狗,單位 ms。

 WdgSettingsConfig 配置頁面

圖 2.1 WdgSettingsConfig 配置頁面

三、三種行為測試

1. WDT_INTERRUPT

       如前面提到的默認示例的配置,因為 WdgDefaultMode  選擇的為 WDGIF_FAST_MODE,所以只需要配置 WdgSettingsFast 內的參數即可。

       在 WdgSettingsFast 配置中,WdgTimeoutBehavior  選擇 WDG_INTERRUPT 後,會自動打開 IrqM 模塊中 Interrupt Wdg 下對應的 WDGx_Interrupt。

 

圖 3.1 IrqM 中斷配置

       在中斷模式下,可以在 WdgTimeoutNotification 選項中配置超時後的回調函數,默認示例為 WDT4_IRQ。如果選擇是灰色的,可以點擊名字前面的紅色小方塊打開。然後在代碼中,配置一個相同名字的回調函數,默認代碼已經配置函數。

圖 3.2 WDT4_IRQ() 回調函數

        將代碼燒錄至開發板運行後,輸入 runcase 1500 進入 Wdg4_irq_test1 示例,在定時器超時後,會進入 WDT4_IRQ() 回調函數,列印對應的 log。

 

圖 3.3 WDT_INTERRUPT 模式 log

 

2. WDT_RESET

       在 WdgSettingsFast 配置中,WdgTimeoutBehavior  選擇 WDG_RESET ,此時 IRQ 模塊對應的 Interrupt 會關閉,程序在看門狗定時器超時後,不會再進入 IRQ 中斷,而是直接 reset 復位。

 

圖 3.4 WDG_RESET 模式配置

 


圖 3.5 WDG_RESET 模式 IRQ配置

 

燒錄代碼至開發板運行後的 log 信息如下:


圖 3.6 WDG_RESET 模式 log

 

3. WDT_BOTH

       在 WdgSettingsFast 配置中,WdgTimeoutBehavior 選擇 WDG_BOTH ,此時 IRQ 模塊對應的 Interrupt 是關閉的,所以需要在代碼中手動添加註冊一下中斷,則在定時器超時後,會先進入中斷回調函數,然後經過最大 2.7ms 的時間後 reset。


圖 3.7 WDT_BOTH 模式中斷註冊

將代碼燒錄至開發板後進行測試,log 如下:

 

圖 3.8 WDT_BOTH 模式 log

四、寄存器介紹

       代碼中對於三種模式的寄存器配置,在 Wdg_Ip_Init() 和 Wdg_Ip_SetMode() 中,其中 Wdg_Ip_Init() 是在 Wdg_140_Instance4_Wdt_Init() 初始化時調用,而 Wdg_Ip_SetMode() 是在 Wdg_140_Instance4_Wdt_SetMode() 選擇模式時調用。

1. 中斷配置

看門狗定時器溢出後的中斷,通過配置 WDT_INT 寄存器的 OVFLOW_INT_EN 位進行使能。


圖 4.1 寄存器 OVFLOW_INT_EN 位介紹

 

        在代碼中,WDT_INTERRUPT 和 WDT_BOTH 模式下都配置了 OVFLOW_INT_EN 為 1,使能中斷。在 WDT_RESET 模式下配置了 BM_WDT_RST_CTL_INT_RST_EN 為 0,不使能中斷。


圖 4.2 中斷配置代碼

2. 復位配置

       看門狗定時器溢出後的 reset 操作,通過配置 WDT_RST_CTL 寄存器的 INT_RST_EN 位進行使能。


圖 4.3 寄存器 INT_RST_EN 位介紹

 

       在代碼中,WDT_INTERRUPT 模式下配置了 BM_WDT_RST_CTL_INT_RST_EN 為 0,不使能 reset。在 WDT_RESET 和 WDT_BOTH 模式下都配置了 BM_WDT_RST_CTL_INT_RST_EN 為 1,使能 reset。


圖 4.4 復位配置代碼

3. 中斷和復位間隔時間配置

按照 EB 中的描述,在選擇 WDG_BOTH 時,會在定時器溢出後先觸發中斷,然後在最大 2.7ms 後 reset。

 

圖 4.5 EB 中 WDT_BOTH 模式介紹

 

此時間的配置通過 WDT_RST_CTL 寄存器的 RST_CNT 進行設置。


圖 4.6 寄存器 RST_CNT 位介紹

在代碼中會配置此 16 個 bit 的值,示例默認配置的值為 0xFFFF。

 

圖 4.7 中斷和復位時間間隔配置代碼

 

修改代碼,在回調函數中添加 IO 口的電平翻轉,測試從進入回調函數後到復位的時間。

圖 4.8 中斷和復位時間間隔測試代碼

 

燒錄代碼進行測試,連接示波器,觀察 IO 口電平變化,電平變化的時間跟配置的一致,為 2.7ms。


圖 4.9 中斷和復位時間間隔示波器採集波形

五、參考文檔

  • 《SemiDrive_E3_MCAL_User_Guide》



歡迎在博文下方留言評論,我們會及時回復您的問題。

如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com   
作者:Nostalgia


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


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

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

參考來源

評論