MCU

ADSP-BF533之看门狗学习

0
阅读(3433)

在由微处理器构成的微型计算机系统中,由于微处理器的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由微处理器控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对微处理器运行状态进行实时监测的考虑,便产生了一种专门用于监测微处理器程序运行状态的芯片,俗称"看门狗"(watchdog)。看门狗的工作原理:看门狗实际上是一个定时计数器,在系统运行以后就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。

ADSP-BF533处理器包含一个32位定时器,可以用来实现软件看门狗功能。软件看门狗会在定时器溢出之后产生一个事件,从而提高系统的可靠性,具体的定时时间取决于看门狗定时器的设置,所产生的事件可能是一个复位、不可屏蔽中断或者通用中断。看门狗定时器的时钟由系统时钟SCLK产生。

在BF533内部,跟看门狗相关的寄存器主要有WDOG_CNT寄存器、WDOG_STAT寄存器和WDOG_CTL寄存器,下面具体介绍各个寄存器的作用:

1.WDOG_CNT寄存器,该寄存器为看门狗计数寄存器,是一个32位的无符号数,处理器为提高稳定性,只允许在看门狗定时器被禁止的时候才能更新计数寄存器,寄存器的具体内容如下图所示:

2.WDOG_STAT寄存器,该寄存器为看门狗状态寄存器,包含看门狗定时器的当前值。读取WDOG_STAT返回当前的计数值。当看门狗定时器被启用,WDOG_STAT在每个SCLK周期不断地减1。当WDOG_STAT到达0后,看门狗定时器停止计数和看门狗控制寄存器(WDOG_CTL)选定的事件产生。当处理器往WDOG_STAT寄存器写一个任意值时,WDOG_CNT寄存器的值将被复制到WDOG_STAT寄存器中。一般情况下,软件在初始化的时候往WDOG_CNT寄存器赋初值,然后在WDOG_STAT到达0之前往其写任意值,这样WDOG_CNT的值又会被复制到WDOG_STAT中,从而看门狗不会溢出。如果看门狗溢出,WDOG_STAT寄存器将保持0的状态,不再做减一操作。

如下图为WDOG_STAT寄存器的具体内容:

3. WDOG_CTL寄存器,该寄存器为看门狗控制寄存器,该寄存器(WDOG_CTL)是一个16位的系统内存映射寄存器,用于控制看门狗定时器。寄存器的具体内容如下图所示:

WDEV[1:0]字段用来选择看门狗定时器溢出时产生的事件。当为00时产生复位中断事件,当为01时产生NMI中断,当为10时产生GPIO中断,当为11时禁止中断事件产生。

WDEN[7:0]字段用来启用和禁用看门狗定时器。在寄存器中,这八位的值为“10101101”,只要寄存器中这八位的值不等于“10101101”,那么看门狗定时器将启动,如果不等于,即表示启用看门狗定时器。因为只有一个值是禁止看门狗的,所以这个多位禁用键减少了无意中禁用看门狗定时器的机会。

软件可以通过WDRO位来确定看门狗定时器是否已经溢出。当WDRO为0时,表示看门狗定时器没有溢出,反之溢出。往该位写1即可将溢出标志位WDRO给清零了。