[DemoCode下载] N76e003的看门狗复位

[复制链接]
5912|24
 楼主| 643757107 发表于 2018-7-31 17:11 | 显示全部楼层 |阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : May/02/2018
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 Watch Dog reste functiondemo code
  14. //***********************************************************************************************************

  15. #include "N76E003.h"
  16. #include "Common.h"
  17. #include "Delay.h"
  18. #include "SFR_Macro.h"
  19. #include "Function_define.h"

  20. /***********************************************************************
  21.         WDT CONFIG enable
  22.         warning : this macro is only when ICP not enable CONFIG WDT function
  23.         copy this marco code to you code to enable WDT reset.
  24. ************************************************************************/
  25. void Check_WDT_Reset_Config(void)
  26. {
  27.                 set_IAPEN;
  28.                 IAPAL = 0x04;
  29.                 IAPAH = 0x00;       
  30.                 IAPFD = 0xFF;
  31.                 IAPCN = 0xC0;                                                //Read config command
  32.                 set_IAPGO;  
  33.                 if ((IAPFD&0xF0)==0xF0)
  34.                 {
  35.                                 IAPFD = 0x0F;
  36.                                 IAPCN = 0xE1;
  37.         set_IAPGO;                                                                         //trigger IAP
  38.                                 while((CHPCON&SET_BIT6)==SET_BIT6);          //check IAPFF (CHPCON.6)
  39.                                 clr_CFUEN;
  40.                                 clr_IAPEN;
  41.                                 EA = 0;
  42.                                 TA = 0xAA;
  43.                                 TA = 0x55;
  44.                                 CHPCON &= 0xFD;
  45.                                 TA = 0xAA;
  46.                                 TA = 0x55;
  47.                                 CHPCON |= 0x80;
  48.                 }
  49.                 clr_IAPEN;
  50. }


  51. /************************************************************************************************************
  52. *    Main function
  53. ************************************************************************************************************/
  54. void main (void)
  55. {

  56.   Set_All_GPIO_Quasi_Mode;
  57. //        CKDIV = 0X01;
  58.         clr_GPIO1;
  59. //        Timer0_Delay1ms(1);                                        //toggle I/O to show MCU Reset
  60.         set_GPIO1;

  61.        
  62. //----------------------------------------------------------------------------------------------
  63. // WDT Init !!! ENABLE CONFIG WDT FIRST !!!
  64. // Warning:
  65. // Always check CONFIG WDT enable first, CONFIG not enable, SFR can't enable WDT reset
  66. // Please call Enable_WDT_Reset_Config() function to enable CONFIG WDT reset
  67. //----------------------------------------------------------------------------------------------
  68.                 Check_WDT_Reset_Config();
  69.        
  70.           TA=0xAA;TA=0x55;WDCON|=0x07;                                                //Setting WDT prescale
  71.                 set_WDCLR;                                                                                                                //Clear WDT timer
  72.                 while((WDCON|~SET_BIT6)==0xFF);                                //confirm WDT clear is ok before into power down mode
  73. //                EA = 1;
  74.                 set_WDTR;                                                                                                                        //WDT run
  75. //               
  76.     while(1)
  77.                 {
  78.                         clr_P05;
  79.                         Timer0_Delay1ms(1);
  80.                         set_P05;
  81.                         Timer0_Delay1ms(1);
  82.                         clr_P05;
  83.                         Timer0_Delay1ms(1);
  84.                         set_P05;
  85.                         Timer0_Delay1ms(1);
  86.                         clr_P05;
  87.                         set_PD;
  88.                 }
  89. }



玛尼玛尼哄 发表于 2018-7-31 19:16 | 显示全部楼层
有了这个例子,做起来就容易了。
yiyigirl2014 发表于 2018-7-31 19:58 | 显示全部楼层
没看懂怎么回事。
gejigeji521 发表于 2018-7-31 20:18 | 显示全部楼层
没有喂狗?
稳稳の幸福 发表于 2018-7-31 20:51 | 显示全部楼层
跑一下例子就明白了。
捉虫天师 发表于 2018-8-6 20:23 | 显示全部楼层
看门狗好多应用都是关闭的。
yiyigirl2014 发表于 2018-8-6 20:37 | 显示全部楼层
PD 掉电模式  设置该位使MCU进入掉电模式。在此模式下,CPU和外设时钟停止,程序计数器 (PC)挂起。此时为最小功耗。CPU从掉电模式下唤醒后,该位自动由硬件清零, 且在系统唤醒之前程序继续执行中断服务程序(ISR)。从ISR返回后,设备继续执 行系统进入掉电模式时所处的指令。 注如果IDL位和PD位同时置位,MCU进入掉电模式。从掉电模式退出后不会进入空 闲模式。
yiyigirl2014 发表于 2018-8-6 20:38 | 显示全部楼层
关键看这个PD,是主函数执行了这个。然后系统休眠了,一旦被看门狗复位那就唤醒了。
dhvliyike 发表于 2018-8-14 18:49 | 显示全部楼层
看门狗定时器复位 最低功耗能做到多少?
huangcunxiake 发表于 2018-8-14 21:53 | 显示全部楼层
好用应用,开始就关看门狗
chansoncc 发表于 2019-1-8 23:30 | 显示全部楼层
看门狗不是可以在程序跑飞时复位保障系统运行吗? 为什么说开始就关看门狗不用哦
KGSABER 发表于 2019-2-18 16:19 | 显示全部楼层
我跑了这个历程,一直卡在while((CHPCON&SET_BIT6)==SET_BIT6);          //check IAPFF (CHPCON.6)这一条!!

评论

新的IC默认是关了的,你用Keil的时候要在Debug里面设置一下,打开才能用。这个真是反人类,也没个地方说一下。  发表于 2019-9-25 17:34
xixi2017 发表于 2019-2-18 23:52 | 显示全部楼层
楼上说的是为啥
xixi2017 发表于 2019-2-18 23:54 | 显示全部楼层
。IAP动作完成后,程序计数器继续运行之后的指令,IAPGO位将自动清零。IAPFF (CHPCON.6)是IAP错误标志,可以用来检查之前IAP操作成功与否。通过这些纯软件的设置,用户可以很方便对FLASH存储器进行擦除、编程和校验。
xixi2017 发表于 2019-2-18 23:54 | 显示全部楼层
看门狗的程序,怎么还搞了IAP
xixi2017 发表于 2019-2-18 23:55 | 显示全部楼层
KGSABER 发表于 2019-2-18 16:19
我跑了这个历程,一直卡在while((CHPCON&SET_BIT6)==SET_BIT6);          //check IAPFF (CHPCON.6)这一条 ...

说明IAP错误了,看看是不是有相关的配置字没有设置对
xixi2017 发表于 2019-2-18 23:57 | 显示全部楼层
配置字里有跟看门狗和IAP相关的设置。
antusheng 发表于 2019-2-21 18:43 | 显示全部楼层
看门狗的应用一般比较少。
antusheng 发表于 2019-2-21 18:43 | 显示全部楼层
在程序设计开始一般都是关闭看门狗。功能完善后,再增加防止跑飞。
xuanhuanzi 发表于 2019-2-22 18:29 | 显示全部楼层
增强版的51,支持多种复位m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3955

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部