完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、什么是看门狗
“看门狗”会产生一个周期性中断,系统软件在中断产生后要清除其中断标志,若超过其设定时间未清除,则会产生一个硬复位信号对系统进行复位 主要特性:
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(); } } 四、实验现象 忽略上面的时间,当按下按键的时候,程序是正常执行的,当停止按按键,看门狗中断就触发了…… 试验成功。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3457 浏览 1 评论
8995 浏览 16 评论
4050 浏览 18 评论
1103浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 20:33 , Processed in 1.146027 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号