240x DSP内设置了一个看门狗定时器(Watchdog Timer,WD,也称为监视定时器),用来监视DSP程序的运行状况。当系统进入不可预知的状态而造成“死机”时,WD将产生一个复位操作,从而使DSP进入一个已知的起始位置重新运行。
图2-12为看门狗定时器模块框图。WD所有寄存器都是8位的。WD的时钟WDCLK是CPU时钟CLKOUT的512分频,即WDCLK=CLKOUT/512。DSP复位时,看门狗定时器自动工作。一旦8位的看门狗计数器(WDCNTR)达到最大计数值,就产生一个复位信号,使DSP复位。为了防止这种情况出现,用户可以禁止看门狗定时器工作,或者周期性地向看门狗复位关键字寄存器(WDKEY,也称为钥匙寄存器)中写入0x55和0x AA。
图2-12 看门狗定时器模块框图
WD模块具有如下特征:
①8位WD计数器,上溢时产生一个系统复位信号。
②6位的自行计数器,用于WD预定标,共6种选择。
③一个复位关键字寄存器(WDKEY)。当一个55h值后紧随着一个AAh值写入WD⁃KEY时,则WD计数器清零,当不正确的值写入时,则产生一个复位信号。
④WD定时器控制寄存器WDCR中有3个WD检验位即特征值。当不正确的特征值写入时,则启动系统复位。
⑤系统复位后,WD定时器就自动启动。
看门狗模块的寄存器介绍如下:
(1)8位WD计数寄存器:WDCNTR
该寄存器格式如下:
位7~0反映当前WD计数寄存器的值。该8位计数器按WDCLK设定的时钟频率不断计数,如果溢出,则引起DSP复位。如果WDKEY寄存器写入了正确的数(即先写入0x55,再写入0xAA),则WDCNTR清零。
(2)WD复位关键字寄存器:WDKEY
该寄存器格式如下:
位7~0如果先写入0x55,再写入0xAA就会使WDCNTR清零。写入任何其他数值则马上使DSP复位。读操作返回的是WDCR寄存器的值。
(3)WD定时器控制寄存器:WDCR
该寄存器格式如下:
位7 WDFLAG:看门狗复位状态标志位。如果为1,表示看门狗复位;为0,表示是外部复位或上电复位。该位写1清除,否则状态一直保持。(www.xing528.com)
位6 WDDIS:向该位写1,禁止看门狗模块;写0,使能看门狗模块。复位值为0,看门狗模块使能。只有在SCSR2寄存器中的WDOVERRIDE位设为1后才能修改该位。
位5~3 WDCHK2~0:WD检验位。任何时候写该寄存器,用户都必须向这些位写入101,即特征位。写入任何其他数值都会引起复位(如果看门狗使能)。
位2~0 WDPS2~0:看门狗预分频位。这些位用来配置看门狗时钟WDCLK。
●000 WDCLK/1;
●001 WDCLK/1;
●010 WDCLK/2;
●011 WDCLK/4;
●100 WDCLK/8;
●101 WDCLK/16;
●110 WDCLK/32;
●111 WDCLK/64。
在CPU时钟频率CLKOUT=40 MHz时,WDCLK=40 MHz/512=78125 Hz,那么溢出时间最小为256/78125 s=3.28 ms,最大为256×64/78125 s=209.7 ms(64分频)。
【例2-2】看门狗定时器编程。
使用看门狗定时器的C语言程序段(喂狗):
使用看门狗定时器的汇编语言程序段:
禁止看门狗定时器的C语言程序段:
禁止看门狗定时器汇编语言程序段:
注意240x DSP上电时看门狗是工作的,所以应尽快屏蔽看门狗或向WDKEY寄存器周期性写入0x55、0xAA,以免程序跑飞。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。