社区导航

 

搜索
查看: 162|回复: 0
打印 上一主题 下一主题

[资料分享] 对于CC2640R2f 看门狗可以这样

[复制链接]

3890

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

跳转到指定楼层
楼主
发表于 2020-2-5 10:01 | 只看该作者 |倒序浏览 |阅读模式

在TI的官方例程中就有看门狗的用法,例如:

C:\ti\simplelink_cc2640r2_sdk_2_40_00_32\examples\rtos\CC2640R2_LAUNCHXL\drivers\watchdog

这是我的SDK目录下的看门狗工程,

因为官方已经封装好了代码,所以在我们使用 看门狗的时候,直接调用即可,

头文件

#include <ti/drivers/Watchdog。h>

函数

    Watchdog_init();

    /* Open a Watchdog driver instance */
    Watchdog_Params_init(&params);
    params.callbackFxn = (Watchdog_Callback) watchdogCallback;
    params.debugStallMode = Watchdog_DEBUG_STALL_ON;
    params.resetMode = Watchdog_RESET_ON;

    watchdogHandle = Watchdog_open(Board_WATCHDOG0, &params);
    if (watchdogHandle == NULL) {
        /* Error opening Watchdog */
        while (1) {}
    }

 

还需要一个看门狗回调函数

void watchdogCallback(uintptr_t watchdogHandle)
{
    /*
     * If the Watchdog Non-Maskable Interrupt (NMI) is called,
     * loop until the device resets. Some devices will invoke
     * this callback upon watchdog expiration while others will
     * reset. See the device specific watchdog driver documentation
     * for your device.
     */
    while (1) {}
}

以上函数就开启了看门狗,使用:

 Watchdog_clear(watchdogHandle);

清楚看门狗计数器,这种模式下的看门狗是重启的,

例如说:想让看门狗报警十次再重启设备,可以修改参数

 params.resetMode = Watchdog_RESET_ON;

typedef enum Watchdog_ResetMode_ {
    Watchdog_RESET_OFF, /*!< Timeouts generate interrupts only */
    Watchdog_RESET_ON   /*!< Generates reset after timeout */
} Watchdog_ResetMode;

修改成

params。resetMode = Watchdog_RESET_OFF;

则看门狗就成中断函数,然后在看门狗回调函数里面加上

    Watchdog_init();
    /* Create and enable a Watchdog with resets disabled */
    Watchdog_Params_init(&params);
    params.callbackFxn = (Watchdog_Callback)watchdogCallback;
    params.resetMode = Watchdog_RESET_OFF;
    watchdogHandle = Watchdog_open(Board_WATCHDOG0, &params);

//---------------看门狗回调---------------

void watchdogCallback(uintptr_t unused)
{

    /* Clear watchdog interrupt flag */
    Watchdog_clear(watchdogHandle);

    static int WDT_flag = 0;
    if(WDT_flag++ > 10){
        SystemReset();//重启函数
    }
    /* Insert timeout handling code here. */
}

此帖出自无线连接论坛
0


您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2020-2-19 17:31 , Processed in 0。084676 second(s), 19 queries , Gzip On, MemCache On。

快速回复 返回顶部 返回列表
快乐飞艇app 河北快3 山东十一运夺金开奖结果 全球彩票注册 快乐赛车彩票靠谱吗 快乐赛车官方计划软件 山东11选5走势 快乐赛车投注规律 快乐飞艇杀一码的网址 北京快乐赛车