Tag Archives: arm

NXP ARM7内置看门狗使用注意

先看一下zlg的喂狗程序 void InitWdt(void) {     WDTC = 0x5F0000;      // 设置WDTC,喂狗重装值     WDMOD = 0×03;          // 设置并启动WDT     RstWdt();                  // 进行喂狗操作 } void  RstWdt(void) {     WDFEED = 0xAA;     WDFEED = 0×55; } 表面上看来这段程序没有什么问题,如果你不用中断的话,或者是狗的值设置的比较长而中断出现的频率较低时也不容出现什么问题,但是隐患还是依然存在的。 在周立功的<<ARM微控制起基础与实战>>里关于看门狗喂狗寄存器WDFEED有一句话:   " 向WDFEED寄存器写入0XAA的下一个操作应当是向WDFEED寄存器写入0X55"。这就说喂狗时向WDFEED写入0xAA和0×55时中间是不能有任何间隔的,也就是在此期间不能被中断。如果我们的程序里用到中断就有可能导致喂狗失败从而导致系统复位。因此为了避免被中断,我们可以在喂狗是关闭中断,在喂狗结束时再开启中断。程序改写如下 void  RstWdt(void) {     IRQDisable();     WDFEED = 0xAA;     WDFEED = 0×55;     IRQEnable(); } 这就好比在os中的临界段要关闭中断一样,在不应该被打断的地方先关中断处理完了再开中断。