完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
说明
本例子只做软件异常时重置系统用,不需要用作定时器或唤醒用,所以不用打开watchdog中断。需要注意的是:如果上次启动开启过watchdog reset,想要关闭,下次启动必须清除CONFIG4内的WDT配置,否则watchdog还是启动的。 主要代码只是在CONFIG4寄存器对看门狗定时器WDT做使能关闭的配置([7:4],0xF0关闭重置只做定时器,0x50和其他任意值开启重置,但0x50在空闲或掉电模式下停止运行),由于是页擦除,所以先保存CONFIG0到CONFIG4的值再写入。 参考代码 #include "N76E003.h" #include "SFR_Macro.h" #include "Function_define.h" #include "Common.h" #include "Delay.h" #define EN_WATCHDOG #define CRLF "\r\n" #define CFG_READ 0xC0 #define CFG_ERASE 0xE2 #define CFG_BYTE_PROGRAM 0xE1 int is_watchdog_reset_enabled(void) { UINT8 cf4; set_IAPEN; IAPAL = 0x04; IAPAH = 0x00; IAPCN = CFG_READ; set_IAPGO; //get CONFIG4 data cf4 = IAPFD; clr_IAPEN; //printf("watchdog: cf4=0x%bX"CRLF, cf4); if ((cf4 & 0xF0) == 0xF0) { return 0; } else if ((cf4 & 0xF0) == 0x50) { return 1; // watchdog reset enabled, but disabled in idle and power down mode } else { return 2; // watchdog reset enabled, but enabled in idle and power down mode } } #ifdef EN_WATCHDOG #define FEED_DOG() set_WDCLR /*********************************************************************** WDT CONFIG enable warning : this macro is only when ICP not enable CONFIG WDT function copy this marco code to you code to enable WDT reset. ************************************************************************/ void Enable_WDT_Reset_Config(void) { set_IAPEN; IAPAL = 0x04; IAPAH = 0x00; IAPFD = 0x5F; //0x0F; // CONFIG4 IAPCN = CFG_BYTE_PROGRAM; set_CFUEN; set_IAPGO; //trigger IAP while((CHPCON&SET_BIT6)==SET_BIT6); //check IAPFF (CHPCON.6) clr_CFUEN; clr_IAPEN; } #else /*********************************************************************** WDT CONFIG disable warning : this macro is for CONFIG already enable WDT Reset to disable. Since erase CONFIG is full page step 1. storage CONFIG value in RAM step 2. modify RAM CONFIG4 WDT value to disable step 3. erase CONFIG page step 4. re writer CONFIG. ************************************************************************/ void Disable_WDT_Reset_Config(void) { UINT8 cf0,cf1,cf2,cf3,cf4; set_IAPEN; IAPAL = 0x00; IAPAH = 0x00; IAPCN = CFG_READ; set_IAPGO; //Storage CONFIG0 data cf0 = IAPFD; IAPAL = 0x01; set_IAPGO; //Storage CONFIG1 data cf1 = IAPFD; IAPAL = 0x02; set_IAPGO; //Storage CONFIG2 data cf2 = IAPFD; IAPAL = 0x03; set_IAPGO; //Storage CONFIG3 data cf3 = IAPFD; IAPAL = 0x04; set_IAPGO; //Storage CONFIG4 data cf4 = IAPFD; cf4 |= 0xF0; //Moidfy Storage CONFIG4 data disable WDT reset set_CFUEN; IAPCN = CFG_ERASE; //Erase CONFIG all IAPAH = 0x00; IAPAL = 0x00; IAPFD = 0xFF; set_IAPGO; IAPCN = CFG_BYTE_PROGRAM; //Write CONFIG IAPFD = cf0; set_IAPGO; IAPAL = 0x01; IAPFD = cf1; set_IAPGO; IAPAL = 0x02; IAPFD = cf2; set_IAPGO; IAPAL = 0x03; IAPFD = cf3; set_IAPGO; IAPAL = 0x04; IAPFD = cf4; set_IAPGO; clr_CFUEN; clr_IAPEN; } #endif /* EN_WATCHDOG */ void init_watchdog(void) { printf("watchdog: WDCON=0x%bX"CRLF, WDCON); if (WDCON & SET_BIT3) // WDTRF { printf("WARNING: Last time, the system was reset by the watchdog!"CRLF); clr_WDTRF; } //---------------------------------------------------------------------------------------------- // WDT Init !!! ENABLE CONFIG WDT FIRST !!! // Warning: // Always check CONFIG WDT enable first, CONFIG not enable, SFR can't enable WDT reset // Please call Enable_WDT_Reset_Config() function to enable CONFIG WDT reset //---------------------------------------------------------------------------------------------- if (is_watchdog_reset_enabled()) { #ifndef EN_WATCHDOG Disable_WDT_Reset_Config(); //Software disable WDT reset CONFIG setting return; #endif } else { #ifdef EN_WATCHDOG Enable_WDT_Reset_Config(); //Software enable WDT reset CONFIG setting #endif } #ifdef EN_WATCHDOG TA=0xAA;TA=0x55;WDCON|=0x07; //Setting WDT prescale set_WDCLR; //Clear WDT timer while((WDCON|~SET_BIT6)==0xFF); //confirm WDT clear is ok before into power down mode // EA = 1; set_WDTR; //WDT run #endif } void main(void) { init_watchdog(); while(1) { #ifdef EN_WATCHDOG FEED_DOG(); #endif printf("main: do something.."CRLF); } } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
1599 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4738 浏览 0 评论
4229 浏览 9 评论
3822 浏览 16 评论
4398 浏览 1 评论
4210浏览 3评论
2379浏览 0评论
3393浏览 0评论
1158浏览 0评论
2843浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:20 , Processed in 0.608418 second(s), Total 42, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1403