一、观点
看门狗的简称是WDT(Watch Dog Timer),exynos4412scp中的看门狗定时器(WDT)是一种定时装置。
1. 事情事理由(一样平常须要客户编写)软件读写定时器干系的寄存器,打开看门狗,并设定计数韶光(以秒或分钟打算),定时器计数计满,由软件清零,以表明系统状态正常,这时,定时器计数重新开始,反复,否则,看门狗认为系统非常或有其他特定事宜发生,触发系统复位旗子暗记,或供应中断,系统正常后重复定时器计数。

这样只要软件正常运行,就不会涌现复位或触发中断。当软件去世机或运行出错时,由看门狗定时器对系统进行复位或触发中断,从而担保系统的正常运行。

看门狗的定时韶光可以由用户设定,这样可以根据须要在指定的韶光内复位系统。
2. 浸染看门狗的浸染是微处理器受到滋扰进入缺点状态后,使系统在一定韶光间隔内复位。因此看门狗是担保系统长期、可靠和稳定运行的有效方法。目前大部分的嵌入式芯片内部都集成了看门狗定时器来提高系统运行的可靠性。
4412处理器的看门狗是当系统由于噪音和系统缺点而涌现故障后,用于处理器的复位操作,也可以作为一个通用的16位定时器来要求中断操作。看门狗定时器产生128个PCLK周期的复位旗子暗记。紧张特性有如下两个。 1)通用的中断办法的16位定时器。 2)当计数器减到0(发生溢出)时,产生128个PCLK周期的复位旗子暗记。
3. Watchdog Timer Block DiagramWatchdog Timer Block Diagram
看门狗模块包括一个预比例因子放大器,一个四分频的分频器,一个16位计数器。
看门狗的时钟旗子暗记源来自PCLK,为了得到宽范围的看门狗旗子暗记,PCLK先被预分频,然后再进过分频器分频。预分频比例因子和分频器的分频值,都可以由看门狗掌握寄存器(WTCON)决定,预分频比例因子的范围是0~255,分频器的分频比可以是16、32、64或128。看门狗定时器时钟周期的打算如下:
clock分频公式
式中Prescaler value 为预分频比例放大器的值;Divison_factor是四分频的分频比,可以是16、32、64或128。
4. 事情流程一旦看门狗定时器被许可,看门狗定时器数据寄存器(WTDAT)的值就不能被自动地装载到看门狗定时器(WTCNT)中。因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中。
【把稳】 当4412用嵌入式ICE调试时,看门狗定时器的复位功能就不被启动,看门狗定时器能从CPU内核旗子暗记判断出当前CPU是否处于调试状态。如果看门狗定时器确定当前模式是调试模式,只管看门狗产生溢出旗子暗记,但是仍旧不会产生复位旗子暗记。
每个时钟周期都会将看门狗定时计数器WTCNT里的值减1,当计数器WTCNT里的值变为0时开始实行超时操作。
首先,判断看门狗掌握寄存器里bit2 WTCON[2]设置情形,如果为1则产生中断旗子暗记,引起系统中断,如果为0不做任何操作,进入复位旗子暗记产生器,如果WTCON[0]位为1,则产生掌握器复位旗子暗记,否则不做任何操作。
每次超时操作之后,看门狗WTCON会自动加载看门狗数据寄存器WTDAT里的用户设置值,连续实行递减操作。
二、寄存器设置1)看门狗定时器掌握寄存器(WTCON)WTCON
WTCON寄存器的内容包括:
WDT timer:[5] 用户是否启动看门狗定时器、Clock select:[4:3] 4个分频比的选择、Interrupt generation:[2] 是否许可中断产生、Reset enable/disable: [0] 是否许可复位操作等。1) 利用起看门狗功能 开启看门狗复位功能、许可中断、16分频、开启看门狗定时器、Prescaler value设置为249
WDT.WTCON=(249<<8)|(1<<5)|(1<<2)|(1<<0);
2)当普通定时器利用 如果用户想把看门狗定时当做一样平常定时器利用,该当中断使能,禁止看门狗定时器复位。
WDT.WTCON=(249<<8)|(1<<5)|(1<<2);2) 看门狗定时器数据寄存器(WTDAT)
在这里插入图片描述
WTDAT用于指定超时时间,在看门狗把复位功能禁止并打开中断使能后,此时看门狗定时器便是一个普通的定时器,利用方法和普通定时器一样。当利用复位功能后,由于WTCNT的值减到0时,系统就会复位,以是WTDAT的值装不进看门狗计数寄存器(WTCNT)中。复位后初始值为0x8000。
3) 看门狗计数寄存器(WTCNT) 喂狗用WTCNT包含看门狗定时器事情的时候,计数器确当前计数值。WTCNT描述如下:
WTCNT
4) WTCLRINT写入任意值清中断。
WTCLRINT
三、看门狗定时器的程序编写1、看门狗软件程序设计流程由于看门狗是对系统的复位或中断的操作,以是不须要外围的硬件电路。要实现看门狗的功能,只须要对看门狗的寄存器组进行操作,即对看门狗的掌握寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。
其一样平常流程如下:
设置看门狗中断操作,包括全局中断和看门狗中断使能及看门狗中断向量的定义,如果只是进行复位操作,这一步不用设置。对看门狗掌握寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值,中断使能和复位使能等。对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置。启动看门狗定时器。voiddo_irq(void){staticinta=1;intirq_num;irq_num=CPU0.ICCIAR&0x3ff;//获取中断号switch(irq_num){case75:printf("intheWDTinterrupt!\n");//WDT.WTCNT=25000;//喂狗WDT.WTCLRINT=0;ICDICPR.ICDICPR2=ICDICPR.ICDICPR2|(0x1<<11);//清GIC中断标志位break;}CPU0.ICCEOIR=CPU0.ICCEOIR&(~(0x3ff))|irq_num;//清cpu中断标志位}voidwdt_init(void){WDT.WTCON=(249<<8)|(1<<5)|(1<<2)|(1<<0);//复位使能//WDT.WTCON=(249<<8)|(1<<5)|(1<<2);//关闭复位使能WDT.WTDAT=25000;ICDDCR=1;//使能分配器ICDISER.ICDISER2=ICDISER.ICDISER2|(0x1<<11);//使能相应中断到分配器ICDIPTR.ICDIPTR18=ICDIPTR.ICDIPTR18&(~(0xff<<24))|(0x1<<24);//选择CPU接口CPU0.ICCPMR=255;//中断屏蔽优先级CPU0.ICCICR=1;//使能中断到CPU}intmain(void){wdt_init();printf("helloreset!\n");while(1){WDT.WTCNT=25000;//喂狗,如果一旦停滞喂狗,系统就resetmydelay_ms(100);}return0;}
上述是精确运行的代码,将WDT.WTCNT = 25000; 注释掉,就会停滞喂狗,超时后系统就会reset。









