ch58x/ch59x窗口、独立看门狗使用
一、窗口看门狗
ch582 584/5 592的看门狗计数器是8位的(计数最大255),计数周期131072/Fsys
以582 592为例,evt中主频都是60M,看门狗最大时间 (131072/60000000)*255=0.557056s
具体使用方式:
/******************************************************************************* * Function Name : WWDG_ITCfg * Description : 看门狗定时器溢出中断使能 * Input : DISABLE-溢出不中断 ENABLE-溢出中断 * Return : None *******************************************************************************/ void WWDG_ITCfg( FunctionalState s ) { sys_safe_access_enable(); if(s == DISABLE)R8_RST_WDOG_CTRL&=~RB_WDOG_INT_EN; else R8_RST_WDOG_CTRL|=RB_WDOG_INT_EN; sys_safe_access_disable(); } /******************************************************************************* * Function Name : WWDG_ResetCfg * Description : 看门狗定时器复位功能 * Input : DISABLE-溢出不复位 ENABLE-溢出系统复位 * Return : None *******************************************************************************/ void WWDG_ResetCfg( FunctionalState s ) { sys_safe_access_enable(); if(s == DISABLE)R8_RST_WDOG_CTRL&=~RB_WDOG_RST_EN; else R8_RST_WDOG_CTRL|=RB_WDOG_RST_EN; sys_safe_access_disable(); } /******************************************************************************* * Function Name : WWDG_ClearFlag * Description : 清除看门狗中断标志,重新加载计数值也可清除 * Input : None * Return : None *******************************************************************************/ void WWDG_ClearFlag( void ) { sys_safe_access_enable(); R8_RST_WDOG_CTRL |= RB_WDOG_INT_FLAG; sys_safe_access_disable(); } 用法 看门狗中断 如: void main() { WWDG_SetCounter(0);//喂狗 WWDG_ITCfg(ENABLE); PFIC_EnableIRQ(WDOG_BAT_IRQn); while(1) { WWDG_SetCounter(0);//喂狗 } } __INTERRUPT//中断函数 __HIGH_CODE void WDOG_BAT_IRQHandler(void) { WWDG_SetCounter(0); } 看门狗复位(582) 如: void main() { WWDG_SetCounter(0);//喂狗 WWDG_ClearFlag(); WWDG_ResetCfg(ENABLE); while(1) { WWDG_SetCounter(0);//喂狗 } }
二、独立看门狗
独立看门狗(IWDG)由专用的内部低速时钟(LSI)驱动(584/585)

根据寄存器描述,IWDG最大时间可以是(0xFFF/(32K/512))=65.52s
代码如下:
#define FEED_IWDG() {R32_IWDG_KR=0xAAAA;} //需要定时调用喂狗
初始化及喂狗配置:
void IWDG_Enable() { R32_IWDG_KR=0x5555;//解除IWDG保护 R32_IWDG_CFG |= (7<<12);//32K分频512,时钟62.5Hz R32_IWDG_CFG &=0xFFFFF000; R32_IWDG_CFG |=0xFFF;//看门狗时间约65s(0xFFF/(32K/512)) R32_IWDG_KR=0xCCCC; //开启IWDG保护 } void main() { IWDG_Enable(); //使能IWDG PRINT("R32_IWDG_CFG = %x\r\n", R32_IWDG_CFG); while(1){ FEED_IWDG(); //喂狗 } }
喂狗时间具体由这个寄存器决定的R32_IWDG_CFG通过修改分频系数和重装载值。
浙公网安备 33010602011771号