一、概述
本文主要介紹 Semidrive E3 MCAL 軟體包中,在 EB 內的 Wdg timeout behavior 的配置項。此配置項可以配置 WDT 超時後三種行為,一是觸發中斷進入中斷回調函數,二是直接 reset 復位,三是先進入中斷再經過一段時間後 reset 復位。E3 最多支持 7 個 WDG,其中 WDG1~6 支持中斷和重啟。WDG8 只支持中斷。
硬體設備:E3640 GATEWAY 開發板
軟體包:MCAL PTG3.0
調試器:J-Link
圖 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。
圖 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
更多資訊,請掃碼關注我們!
評論