1.在调试看门狗的时候发现看门狗配置初始化都可以完成,但是回调函数不能进入。
2.如果回调函数不能用的话,我这边开了个定时器来处理喂狗。但是有一个问题因为项目要做超低功耗的所以不知道在系统进入低功耗的时候cc2640看门狗是怎么操作的,查看资料有人说是不工作的(没有找到官方的)。
3.如果cc2640在进入低功耗后看门狗是不工作的话我是不是就可以不使用官方的回调函数进行喂狗了,可以直接使用定时器了。
有人知道的话能不能加一下详谈。
Susan Yang:
不知您是否看过http://software-dl.ti.com/simplelink/esd/simplelink_cc2640r2_sdk/1.50.00.58/exports/docs/tidrivers/doxygen/html/_watchdog_c_c26_x_x_8h.html?
If the Watchdog_clear() is missed and the Watchdog timer is allowed to timeout, the user-defined callback function is called. In this function, the user may do whatever is appropriate for the application.
请问您现在代码是怎样的?
user4499800:
回复 Susan Yang:
.c文件
/** ========================= Watchdog begin ====================================*/#include <ti/drivers/Watchdog.h>#include <ti/drivers/watchdog/WatchdogCC26XX.h>
WatchdogCC26XX_Object watchdogCC26XXObjects[CC2650_WATCHDOGCOUNT];
const WatchdogCC26XX_HWAttrs watchdogCC26XXHwAttrs[] = { { .baseAddr = WDT_BASE, .intNum = INT_WDT_IRQ, }};
const Watchdog_Config Watchdog_config[] = { { &WatchdogCC26XX_fxnTable, &watchdogCC26XXObjects[0], &watchdogCC26XXHwAttrs[0] }, { NULL, NULL, NULL },};/** ========================= Watchdog end ====================================*/
.h文件
//———————————————————————————————————————————————-
#define Board_WATCHDOG CC2650_WATCHDOG0 typedef enum CC2650_WatchdogName { CC2650_WATCHDOG0 = 0, CC2650_WATCHDOGCOUNT, } CC2650_WatchdogName;
//———————————————————————————————————————————————-
//———————————————————————————————————————————————
#include <ti/sysbios/knl/Task.h>#include <ti/drivers/Watchdog.h>#include "Board.h"
Watchdog_Handle WDhandle;Watchdog_Params WDparams;uint32_t tickValue;
void wdtCallback(UArg handle) { Watchdog_clear((Watchdog_Handle)handle); } void wdtInitFxn(void) { Watchdog_init();Watchdog_Params_init(&WDparams); WDparams.callbackFxn = wdtCallback; WDparams.debugStallMode = Watchdog_DEBUG_STALL_ON; WDparams.resetMode = Watchdog_RESET_ON;
WDhandle = Watchdog_open(Board_WATCHDOG, &WDparams); Watchdog_setReload(WDhandle, 1500000*20); }
void wdtClearFxn(void){Watchdog_clear(WDhandle); //Watchdog_setReload(WDhandle, 1500000*10);}
然后再初始化的时候调用一下void wdtInitFxn(void) 函数,通过看寄存器发现计数正常配置正确,两次计数溢出后系统复位。
user4499800:
回复 user4499800:
单独调用喂狗函数可行。
user4499800:
回复 Susan Yang:
没有在别的地方调用喂狗函数,就是想用它的回调函数进行喂狗。
user4499800:
回复 Susan Yang:
协议栈是ble_sdk_2_02_01_18
现在是当第一次时间到后看门狗时间重设。等到第二次时间到后系统复位。中间感觉完全没经过回调函数这个环节。
user4499800:
回复 Susan Yang:
还是说这个回调函数不能用于实际的喂狗保证系统不复位。
user4499800:
回复 Susan Yang:
怎么解决啊,就是不进啊