樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片嵌入式看門狗處理,在嵌入式系統中,常使用看門狗(watchdog)電路提高系統的可靠性??撮T狗是一個累加或遞減的計數器,當累加計數器濫出或遞減計數器為零時產生復位信分,使處理器復位。因此,處理器必須在設定的時間間隔內刷新計器,才能保證系統正常據行。使處理器進入睡眠狀態是降低系統能耗的常用方法。樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片睡眠后,處理器不能刷新看門狗計數器,導致處理器復位。這不僅不能降低能耗,反而影響系統的正常工作。該如何解決這個問題?
1.解決方案
如果能夠管理看門狗,使其在處理器正常功耗模式時開啟,在處理器進入睡眠狀杰或者整個系統處于靜態功耗狀態下關閉,就解決了上述問題。
將處理器狀態分為正常運行和睡眠兩個狀態。處理器正常運行時看門狗定時器處于激活狀態,需要不斷刷新,從而監測處理器運行程序的狀況。樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片處理器睡眠時看門狗定時器不工作,不需要刷新,也不會使系統復位。
在處理器啟動、進入睡眠狀態和被喚醒的同時,控制看門狗定時器的工作狀態程序啟動時啟動看門狗計數器,處理器進入睡眠前關閉看門狗計數器,在中斷喚醒處理器的同時打開看門狗計數器。
使用上述方案,系統既可以使用看門狗在處理器程序運行出錯時自動復位,又能保證處理器在等待任務時正常進入睡眠狀態,降低系統能耗。
2.GD32VF103 看門狗
GD32VF103 有兩個看門狗定時器外設,樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片自由看門狗定時器(Free Watchdoglimer,FWDGT)和窗口看門狗定時器(Window Watchdog Timer,WWDGT)。
(1) 自由看門狗
如圖 8.9 所示為自由看門狗定時器的示意圖。FWDGT 是一個 12 位遞減計數器,由內部時鐘源 IRC40K 驅動,即使處理器主時鐘發生故障,也可以正常工作。
控制寄存器(Control Register)控制計數器的工作狀態。將 0xCCCC 寫入控制寄存器,啟用看門狗,計數器開始倒計時。樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片當計數器值為 0x000 時,輸出復位信號Keset。將數據0XAAAA 寫入控制寄存器,計數器重新加載。所加的數值來自重載寄存器(Reload Register)。在計數器達到 x000 前重新加計數器,防止看門狗復位。
預分頻器寄存器(Prescaler)和重載寄存器具有寫保護,以防止在程序中誤寫,在寫入這些寄存器之前,需要將 0x5555 寫人看門狗的控制寄存器。將任何不等于0x555 的數值寫入看門狗的控制寄存器后,再次保護預分器寄在器和重載寄存器。在更新預分頻器寄在器或重載寄存器的操作過程中,看門狗的狀態寄在寄存器中的狀態位PUD和RUD為1。
IRC40K --->狀態PUD 重置
---> 預分頻器寄存器/4/8/.../256 --->12位遞減計數器 --->
--->重載--->12位遞減計數器
<---控制寄存器 --->重載寄存器--->狀態PUD
--->12位遞減計數器
--->重載
圖8.9 GD32VF103 自由看門狗定時器示意圖
GD32VF103自由看門狗寄存器組映射到內存空間的基地址為 0x4000 3000。樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片表8.2列出了相關寄存器的地址偏移量和功能說明。關于寄存器中詳細的數據定義,請參照GD32VF103 用戶手冊。
表 8.2 GD32VF103 Free Watchdog 寄存器
名 稱 地址偏移 初始值 功能
控制寄存器 (FWDGT CTL) 0x00 0x0000 0000 bit[15:0],16 位特定數值
預分頻寄存器 (FWDGT PSC) 0x04 0x0000 0000 "bit[2:0],1/4、1/8、1/16、1/32、1/64、 1/128、1/256"
重載寄存器 (FWDGT RLD) 0x08 0x0000 0FFF 計數器初始值
狀態寄存器 (FWDGT STAT) 0x0c 0x0000 0000 bit[1:0],RUD、PUD
(2)窗口看門狗
WWDGT 是一個 7位遞減計數器,時鐘源是 APB1 總線時鐘。
上電復位后,看門狗定時器處于禁用狀態。將控制寄存器中 WDGTEN 位置 1啟動看門狗。啟用窗口看門狗定時器后,計數器遞減。當計數器中的值小于或等于0x3F 時,產生復位信號,即 CNT[6]=0。CNT[5:0]是計數器兩次重新加載的大時間間隔。計數時鐘頻率由 APB1 時鐘和預分頻器中 PSC[1:0]位確定。
配置寄存器中的 WIN[6:0]指定窗口值。當計數器值小于窗口值,并日大干F時,可以通過重新加載計數器防止復位,否則看門狗會使處理器復位。
GD32VF103 窗口看門狗寄存器組映射到內存空間的基地址為 0x4000 2C00。表8.3列出了相關寄存器的地址偏移量和功能說明。樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片寄存器中詳細的數據定義,請參照 GD32VF103 用戶手冊。
表8.3GD32VF103 Window Watchdog 寄存器
名 稱 地址偏移 初始值 功能
控制寄存器 (WWDGT_CTL) 0x00 0x0000 007F "bit[7],WDGTEN;bit[6:0],CNT[6:0]"
設置寄存器 (WWDGT CFG) 0x04 0x0000 007F "bit [9,8:7,6:0],EWIE、PSC[1:0]WIN[6:0]"
狀態寄存器 (WWDGT_STAT) 0x08 0x0000 0000 bit [o],EWIF
3.方案實現
在GD32VF103 集成的兩個看門狗定時器中,窗口看門狗定時器能夠在程序中開啟和關閉。因此,樂鑫科技官網電話esp32 c3低功耗ble網關+wifi芯片本實現使用窗口看門狗定時器。
(1)設置窗口看門狗,設置計數器、窗口值和預分頻值
/*設置窗口看門狗,設置計數器值 counter,窗口值 window,預分頻值 prescaler * /
void wwdgt_config(uint16_t counter, uint16_t window, uint32-t prescaler)
{
uint32_t reg cfg = 0U, reg ctl = 0U;
/*清除相關位*/
reg_cfg = (WWDGT_CFG &(~(WWDGT_CEG_WIN|WWDGT_CFG_PSC)));
reg_ctl = (WWDGT_CTL &( WWDGT_CTL_CNT));
/*寫人設定值 */
reg_cfg = CFG_WIN(window);
reg_cfg = prescaler;
reg_ctl = CTL CNT(counter);
WWDGT_CTL = reg_ctl;
WWDGT_CFG = reg_cfg;
}
(2)開啟和關閉看門狗,設置使能位
/*開啟看門狗 */
void wwdgt enable(void)
{
WWDGT_CTL = WWDGT_CTL_WDGTEN;
}
/*關閉看門狗 */
void wwdgt_disenable(void)
{
WWDGT_CTL & = ~WWDGT_CTL_WDGTEN;
}
(3)刷新看門狗,重載新計數器的值
void wwdgt_counter_update(uint16_t counter_value)
{
uint32_t reg = 0U;
reg = (WWDGT_CTL &(~WWDGT_CTL_CNT))
reg |= CTL_CNT(counter value);
WWDGT_CTL = reg;
}
(4)使處理器睡眠
/*進人睡眠前關閉看門狗*/
while(1)
{
Wwdgt_disenable();
__WFI() ;
}
/ * 中斷服務程序中打開看門狗 */
void EXTI_ISR_Handler (void)
{
wwdgt_counter_update(0x7f);
wwdgt_disenable();
/*中斷事務*/
......
}