09、W601看门狗

09、W601看门狗

一、什么是看门狗

“看门狗”会产生一个周期性中断,系统软件在中断产生后要清除其中断标志,若超过其设定时间未清除,则会产生一个硬复位信号对系统进行复位

主要特性

  • 提供定时功能
  • 提供复位功能
  • 提供定时中断

二、W601看门狗功能表述

1、定时功能

设置定时值到寄存器 WD_LD 后,设置 WDG_CTRL 的 BIT0 为 1 启动定时器,WDG 模块定时时间到会产生定时中断,通知程序处理。如果寄存器 WD_CLR 的 BIT0 不清除,则会周期产生定时中断。WD_LD 的值以 APB 时钟单位为基准,APB 的时钟从 160M 时钟分频出来

在这里插入图片描述

在这里插入图片描述

2、复位功能

设置芯片定时值 WD_LD 后,启动定时和复位功能(设置 WDG_CTRL 的 BIT1/BIT0),WDG 模块启动倒计时,定时时间到,WDG 会产生定时中断,同时如果 WD_CLR 的 BIT0 不清除,则芯片会在定时时间的下一个周期产生复位信号

三、代码实现

看门狗的主要寄存器

在这里插入图片描述

接下来就是配置这几个寄存器

void tls_watchdog_init(u32 usec)
{
	tls_sys_clk sysclk;
 
	tls_sys_clk_get(&sysclk);
	tls_irq_enable(WATCHDOG_INT);
 
	tls_reg_write32(HR_WDG_LOAD_VALUE, sysclk.apbclk * usec); 	/* 40M dominant frequency: 40 * 10^6 * (usec / 10^6) */
	tls_reg_write32(HR_WDG_CTRL, 0x3);             /* enable irq & reset */

}



上面就配置好了看门狗了,现在我们利用按键中断来进行“喂狗”,没触发一次按键中断我们就清除看门狗中断标志,这样程序就不会复位了。

void keyup_callback(void *arg)
{
   if(tls_get_gpio_irq_status(WM_IO_PA_08))
   {
   	tls_clr_gpio_irq_status(WM_IO_PA_08);
   	log_i("keyup is succceed");	
   	tls_watchdog_clr();
   }
}

四、实验现象

在这里插入图片描述

忽略上面的时间,当按下按键的时候,程序是正常执行的,当停止按按键,看门狗中断就触发了……

试验成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值