3.看门狗(Watch Dog)
看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
2812的看门狗电路有一个8位的看门狗加法计数器WDCNTR,无论什么时候,如果WDCNTR计数到最大值时,看门狗模块就会产生一个输出脉冲,脉冲宽度为512个振荡器时钟宽度。为了防止看门狗加法计数器WDCNTR溢出,我们通常可以采用两种方法:一种是禁止看门狗,即使得计数器WDCNTR无效;另一种就是定期的“喂狗”,通过软件向负责复位看门狗计数器的看门狗密钥寄存器(8位的WDKEY)周期性的写入0x55+0xAA,紧跟着0x55写入0xAA能够清除WDCNTR。写任何其他的值都会使看门狗立即复位
DisableDog(); // Disable the watchdog
InitPll(0xA); // Initialize the PLLCR to 0xA---30M*10/2
InitPeripheralClocks(); // Initialize the peripheral clocks