乐鑫科技官网电话esp32 c3低功耗ble网关+wifi芯片嵌入式看门狗处理,在嵌入式系统中,常使用看门狗(watchdog)电路提高系统的可靠性。看门狗是一个累加或递减的计数器,当累加计数器滥出或递减计数器为零时产生复位信分,使处理器复位。因此,处理器必须在设定的时间间隔内刷新计器,才能保证系统正常据行。使处理器进入睡眠状态是降低系统能耗的常用方法。乐鑫科技官网电话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();
/*中断事务*/
......
}