看门狗定时器

1. 看门狗作用

看门狗定时器检测程序的正常运行,启动看门狗后,必须在看门狗复位之前向特定寄存器中写入数值,不让看门狗定时器溢出,这样看门狗就会重新计时。当用户程序溢出时在规定时间内没有向特定寄存器中依次写入数值,看门狗定时器记数溢出,引出看门狗复位,看门狗产生一个强制系统复位。这样可以使程序重新运行,减少程序跑死的危害。

2. Exynos4412看门狗定时器模块如下:

该模块包括时钟源PCLK, 8预分频,一个四选一的分频器,一个16位的倒数计数器。

预分频和分频器都由WTCON看门狗控制寄存器决定。8位预分频比例因子的范围为

0~255, 分频器的分频比可以为16,32,64,128。看门狗定时器时钟周期的计算如下:

t_watchdaog = 1 / (PCLK / (Prescaler value + 1) / Division_factor)

Prescaler value为8位预分频比例因子;Division_factor 为16,32,64,128

3. 看门狗定时器寄存器详解

1)控制寄存器WTCON

如果配置成看门狗,配置参考值:249<<8 | 1<<5 |1<<2 | 1<<0

如果配置成普通定时器,配置参考值:249<<8 | 1<<5 | 1<<2  

2)数据寄存器WTDAT

 

看门狗当作定时器使用:用于指定超时时间,在看门狗把复位功能禁掉并打开中断使能后,此时看门狗就是一个普看门狗

当作复位看门狗使用:当使用复位功能后,由于WTCNT 的值减到0时,系统就会复位,所以WTCNT的值就装不进看门狗计数寄存器

 

3)看门狗重载数值寄存器WTDAT, 在使用看门狗前先给这个寄存器赋值,否则该寄存器就用默认值0x8000

 

4)看门狗当前计数寄存器WTCNT

 

void wdt_init()

{

    WDT.WTCNT = 0x8000;  //initial value

    /*

    *Prescaler value:255, Enables WDT

    *Prescaler clock division factor 128

    *Enables WDT reset signal

    */

    WDT.WTCON = 0xff<<8 |1<<5 | 3<<3 | 1;

}

 

 

/*-------------------------MAINFUNCTION------------------------------*/

/**********************************************************************

 * @brief     Mainprogram body

 * @param[in] None

 * @return        int

 **********************************************************************/

int main(void)

{

    GPX2.CON = 0x1 << 28;

    uart_init();

 

    wdt_init();

 

    printf("\n************* WDT RESET test!! ***************\n");

 

    while(1)

       {

           //Turn on  LED2

           GPX2.DAT = GPX2.DAT | 0x1 << 7;

           mydelay_ms(200);

#if 0

           // Feed Dog

           WDT.WTCNT = 0xA000;

#endif

           printf("working...\n");

           //Turn off LED2

           GPX2.DAT = GPX2.DAT & ~(0x1 << 7);

           mydelay_ms(200);

       }

    return 0;

}

 


猜你喜欢

转载自blog.csdn.net/weixin_42048417/article/details/80698230