14. 从0学ARM-exynos4412-看门狗裸机程序编写 (2)

WTCNT包含看门狗定时器工作的时候,计数器的当前计数值。WTCNT描述如下:

WTCNT

4) WTCLRINT

写入任意值清中断。

WTCLRINT

三、看门狗定时器的程序编写 1、看门狗软件程序设计流程

因为看门狗是对系统地复位或中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需要对看门狗的寄存器组进行操作,即对看门狗的控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。

其一般流程如下:

设置看门狗中断操作,包括全局中断和看门狗中断使能及看门狗中断向量的定义,如果只是进行复位操作,这一步不用设置。

对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值,中断使能和复位使能等。

对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置。

启动看门狗定时器。

void do_irq(void) { static int a = 1; int irq_num; irq_num = CPU0.ICCIAR&0x3ff; //获取中断号 switch(irq_num) { case 75: printf("in the WDT interrupt!\n"); //WDT.WTCNT = 25000;//喂狗 WDT.WTCLRINT = 0; ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 11); //清GIC中断标志位 break; } CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num; //清cpu中断标志位 } void wdt_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 } int main (void) { wdt_init(); printf("hello reset!\n"); while(1) { WDT.WTCNT = 25000;//喂狗,如果一旦停止喂狗,系统就reset mydelay_ms(100); } return 0; }

上述是正确运行的代码,将WDT.WTCNT = 25000; 注释掉,就会停止喂狗,超时后系统就会reset。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpjd.html