RT10XX 看门狗——RTWDOG系统复位

1 前情提要

        RT10XX有三个看门狗定时器,用法都比较相似,但WDOG12的时钟源必须来自外置32.768K的晶体。WDOG3是窗口看门狗,对于时钟源的选择就没有这么苛刻,有如下选择:

Bus clock来自外置的24M晶体,SDK里面默认是150M(基于i.mx RT106X)
LPO clock和INTCLK默认是外置的32K晶体,若无该晶体,可以自动切到内部32K(精度为10-45KHz)
ERCLK默认是1MHz,来自内部的24M,精度需要基于外置的32K晶体检验,一般是±100KHz

2 设计和注意事项

       若无外置32K的时候,需要注意RTC_XTALI连接到 GND 且 RTC_XTALO 浮空

       若基于Bus clock驱动WDOG3,默认SDK的情况下,喂狗时间不能超过0.11S,不要问我怎么知道,能管Gai的,就能管狗。

3 最简单的code

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的Rt-thread看门狗程序的示例: ``` #include <rtthread.h> #define WATCHDOG_TIMEOUT (5000) // 5秒超时时间 /* 定义看门狗设备对象 */ static rt_device_t watchdog_dev; /* 定义看门狗线程 */ static rt_thread_t watchdog_thread = RT_NULL; static void watchdog_thread_entry(void* parameter) { rt_uint32_t timeout; while (1) { /* 表示没有任务需要看门狗保护 */ if (rt_thread_self()->stat == RT_THREAD_CLOSE) { rt_kprintf("No task to watch!\n"); break; } /* 看门狗开始计时 */ timeout = rt_device_control(watchdog_dev, RT_DEVICE_CTRL_WDT_START, (void*)WATCHDOG_TIMEOUT); /* 如果返回0,则表示看门狗时间到达 */ if (timeout == 0) { rt_kprintf("Watchdog timeout\n"); rt_hw_reset(); // 通过硬件复位系统 } rt_thread_mdelay(WATCHDOG_TIMEOUT / 2); // 线程等待WATCHDOG_TIMEOUT / 2毫秒 } } int watchdog_init(void) { watchdog_dev = rt_device_find("wdt"); // 找到看门狗设备 /* 如果找不到看门狗设备,则返回错误 */ if (watchdog_dev == RT_NULL) { rt_kprintf("Watchdog device not found!\n"); return -1; } /* 控制看门狗的设备注册为看门狗模式 */ rt_device_control(watchdog_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, (void*)WATCHDOG_TIMEOUT); rt_device_control(watchdog_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL); // 看门狗计时开始 /* 创建看门狗线程 */ watchdog_thread = rt_thread_create("watchdog", watchdog_thread_entry, RT_NULL, 1024, 25, 10); if (watchdog_thread != RT_NULL) { rt_thread_startup(watchdog_thread); rt_kprintf("Watchdog thread create success!\n"); return 0; } rt_kprintf("Watchdog thread create fail!\n"); return -1; } /* 注册看门狗初始化函数到Rt-thread */ INIT_APP_EXPORT(watchdog_init); ``` 这个看门狗程序中,我们使用了Rt-thread提供的看门狗接口来实现计时功能并防止系统因为某个线程的执行超时而崩溃的情况发生。当超时时间到达时,看门狗会向外部硬件发送一个复位信号,从而复位整个系统。这个看门狗程序需要在初始化的时候调用 watchdog_init() 函数来完成注册到Rt-thread内核的初始化过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值