本帖最后由 xuyuanping1075 于 2012-12-19 10:50 编辑
关闭看门狗程序简单,就一句话,WDTCL=WDTPW+WDTHILD,但为什么会是这样呢?众多的参考书只是简单的这么一说,并没有仔细分析。今天在教室,翻阅众多书籍,查阅.H文件,得出权威结论。详情请等待11点左右发布。
来晚了,宿舍网友问题,奶奶的,具体如下:
看门狗寄存器WDTCTL (地址0x0120)
WDTPW:又名口令。个人理解,就是WDTPASSW的缩写。是看门狗定时器访问时安全键值,读取时位0x69,写入时应该为0x5A.如果口令输错了,那就game over 了——复位。 WDTHOLD:看门狗暂停位。 0:看门狗定时器正常工作; 1:看门狗定时器暂停。 其余的与本版无关,就不介绍了,自己查书去。
关闭看门狗,地球人都知道是这句:WDTCTL=WDTPW+WDTHOLD;为什么呢?这得从IAR提供的头文件说起。以 MSP430x14x.h文件为例,里面有这么一些关于看门狗的定义(红色的是重点,只看红色可以!):
/*------------------------------------------------------------------------- * Watchdog Timer *-------------------------------------------------------------------------*/
__no_init volatile union { unsigned short WDTCTL; /*Watchdog Timer Control */
struct { unsigned short WDTIS0 :1; /* */ unsigned short WDTIS1 :1; /* */ unsigned short WDTSSEL :1; /* */ unsigned short WDTCNTCL :1; /* */ unsigned short WDTTMSEL :1; /* */ unsigned short WDTNMI :1; /* */ unsigned short WDTNMIES :1; /* */ unsigned short WDTHOLD :1; /* */ }WDTCTL_bit; } @ 0x0120;
enum { WDTIS0 = 0x0001, WDTIS1 = 0x0002, WDTSSEL = 0x0004, WDTCNTCL = 0x0008, WDTTMSEL = 0x0010, WDTNMI = 0x0020, WDTNMIES = 0x0040, WDTHOLD =0x0080 };
#define WDTPW (0x5A00u) *******************************************************************************WDTCTL=WDTPW+WDTHOLD。由上面可以看出,WDTPW的值为0x5A00,WDTHOLD宏定义为 0x0080;进行运算后,WDTCTL为0x5A80,即高8位为5AH,写入口令;低8位10000000,看门狗定时器关闭。以此类推,可以得出很多书本上一带而过却又值得大家思考的简短的语句。 共勉! |