2803x DSP内设置了一个看门狗定时器WD(Watchdog Timer,也称为监视定时器),用来监视DSP程序的运行状况。当系统进入不可预知的状态而造成“死机”时,WD将产生一个复位操作,从而使DSP进入一个已知的起始位置重新运行。
图2-13为看门狗定时器模块框图。DSP复位时,看门狗定时器自动工作。一旦8位的看门狗计数器(WDCR)达到最大计数值,就产生一个512个振荡时钟(OSCCLK也即XCLKIN)周期宽的脉冲,使DSP复位。为了防止这种情况出现,用户可以禁止看门狗定时器工作,或者周期性地向看门狗钥匙寄存器(WDKEY,也称为关键字寄存器)中写入0x55和0xAA。
图2-13 看门狗定时器模块框图
当DSP处在备用模式时,除了看门狗外的所有外设都被关掉。同时也关掉了PLL或振荡器的时钟。信号送到了低功耗模块(LPM),因此可以将DSP从备用模式下唤醒。在空闲模式下,可以向CPU申请中断(PIE中的WAKEINT中断),从而将CPU拉出空闲状态。在停止模式下,振荡器、PLL和看门狗全部被关掉。
看门狗有如下寄存器,它们全部受EALLOW保护。
(1)系统控制与外设状态寄存器(SCSR)
●位15~3,保留。
●位2,WDINTS:看门狗中断状态位。反映了看门狗电路中WDINTS信号的状态。
●位1,WDENINT:看门狗中断使能位。如果设为1,则看门狗复位WDRST输出信号禁止,看门狗中断使能。如果设为0,则看门狗复位WDRST输出信号使能,看门狗中断禁止。
●位0,WD OVERRIDE:看门狗保护位。复位后为1,这时用户可以改变看门狗控制寄存器WDCR中WDDIS位的状态。该位是一个只能清除的位,通过向该位写1对其清零,这时用户不能改变WDCR中WDDIS位的状态,可以防止看门狗WD被软件禁止。
(2)8位WD计数寄存器:WDCNTR
●位15~8,保留位。
●位7~0,WDCNTR:反映当前WD计数寄存器的值。该8位计数器按WDCLK时钟频率不断计数,如果溢出,则引起DSP复位。如果WDKEY寄存器写入了正确的数值,则WDCNTR清零。
(3)WD复位钥匙寄存器:WDKEY
●位15~8,保留位。
●位7~0,WDKEY:如果先写入0x55,再写入0xAA就会使WDCNTR清零。写入任何其他数值则马上使DSP复位。读操作返回的是WDCR寄存器的值。
(4)WD定时器控制寄存器:WDCR
●位15~8,保留位。
●位7,WDFLAG:看门狗复位状态标志位。如果为1,表示看门狗复位;为0,表示是外部复位或上电复位。该位写1清除,否则状态一直保持。
●位6,WDDIS:向该位写1,禁止看门狗模块;写0,使能看门狗模块。复位值为0,看门狗模块使能。只有在SCSR寄存器中的WDOVERRIDE位设为1后才能修改该位。
●位5~3,WDCHK:看门狗检验位。任何时候写该寄存器,用户都必须向这些位写入101。写入任何其他数值都会引起复位(如果看门狗使能)。(www.daowen.com)
位2~0 WDPS:看门狗时钟定标位。这些位用来配置看门狗时钟WDCLK。
000 WDCLK=OSCCLK/512/1
001 WDCLK=OSCCLK/512/1
010 WDCLK=OSCCLK/512/2
011 WDCLK=OSCCLK/512/4
100 WDCLK=OSCCLK/512/8
101 WDCLK=OSCCLK/512/16
110 WDCLK=OSCCLK/512/32
111 WDCLK=OSCCLK/512/64,OSCCLK为振荡器频率。
在振荡器频率OSCCLK=60MHz时,溢出时间最小为256/60×512=2.18ms,最大为2.18×64=139.8ms(64分频)。
仿真时,看门狗在下面不同的条件下有不同的工作状态:
1)CPU悬挂。CPU悬挂时,WDCLK时钟也悬挂。
2)自由运行模式。CPU处于自由运行模式时,看门狗恢复正常操作。
3)实时单步模式。CPU处于实时单步模式时,WDCLK悬挂。即使在实时中断中,看门狗也保持悬挂状态。
4)实时自由运行模式。CPU处于自由运行模式时,看门狗正常工作。
例2-3 使用看门狗定时器的C语言程序段。
EALLOW; //宏定义#define EALLOW asm(“EALLOW”),解除保护
SysCtrlRegs.WDKEY=0x55;
SysCtrlRegs.WDKEY=0xAA; //周期性写入0x55,0xAA,使WDCNTR清零
EDIS; //宏定义#define EDIS asm(“EDIS”),设置保护
禁止看门狗定时器工作的C语言程序段如下:
EALLOW;
SysCtrlRegs.WDCR=0x0068; //屏蔽看门狗
EDIS;
注意DSP上电时看门狗是工作的,所以应尽快屏蔽看门狗或向WDKEY寄存器周期性写入0x55、0xAA,以免程序跑飞。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。