TI论坛
直播中

桂莅鑫

7年用户 282经验值
私信 关注

谁有cc1310 看门狗的官方示例完整的

这是官方的示例代码,不完整。有些内容还没填,有没有完整的。
#include
#include <ti/drivers/watchdog/WatchdogCC26XX.h>
#include
void selfTestCallback(void);
//如果整个系统正常,则返回true
bool runSelfTest(void) [
return true;
]
//=====看门狗回调函数=======
void wdtCallback(UArg handle)
[
Watchdog_clear((Watchdog_Handle)handle);
]
//从Supervisor任务运行一次
void initializeSupervisor() [

// 1.在INT_WATCHDOG中断上注册watchdogHandler
Watchdog_Params wp;
Watchdog_Handle watchdog;
// 2. 注册自检回调以比看门狗超时更频繁地运行
Watchdog_Params_init(&wp);
wp.callbackFxn = wdtCallback;// 回调看门狗
wp.debugStallMode = Watchdog_DEBUG_STALL_ON;
wp.resetMode = Watchdog_RESET_ON;
// 3. 允许看门狗复位系统
WatchdogResetEnable();
// 4. 第一次到达零时设置重载值
WatchdogReloadSet(1500000); /* Set to 1 second, as Watchdog runs at 48MHz / 32 = 1.5MHz */
// 5. 启用并启动看门狗
WatchdogEnable();
]
//监督任务的主体
void supervisorTask() [
static bool systemOk;
while(1) [
events = Event_pend(supervisorEvent, 0, PERIODIC_SUPERVISOR_CHECK | WATCHDOG_EVENT, BIOS_WAIT_FOREVER);

if(events & PERIODIC_SUPERVISOR_CHECK) [
//运行自检以查看一切是否正常
systemOk = runSelfTest();
if(systemOk) [
//如果一切正常,清除中断,如果有的话,并复位看门狗定时器
WatchdogIntClear();
//清除等待中断状态标志
watchdogPending = 0;
]
else [
//一切都不好,处理这个!
//如果这可以恢复,然后调用WatchdogIntClear并将watchdogPending设置为零
]
]
if(events & WATCHDOG_EVENT) [
//看看为什么看门狗被触发没有自检运行ok!
//如果这可以恢复,然后调用WatchdogIntClear并将watchdogPending设置为零
]
]
]
//这个回调应该比配置的看门狗超时更频繁地运行,以便它有时间进行自检和启动看门狗
void selfTestCallback(void) [
// Run self-test
Event_post(supervisorEvent, PERIODIC_SUPERVISOR_CHECK);
]
//看门狗第一次超时时,看门狗中断运行,然后复位看门狗。
//如果中断标志在第二次超时之前未被清除,则芯片复位,只要配置了WatchdogResetEnable()。
void watchdogHandler(void) [
//清除看门狗超时一次
WatchdogIntClear();
//检查看门狗中断是否已经运行一次
if(watchdogPending) [
//如果是这样,挂起并等待即将复位
while(1);
]
else [
//标志我们已经运行了看门狗中断一次
watchdogPending = 1;

//通知主管
Event_post(supervisorEvent, WATCHDOG_EVENT);
]
]

回帖(1)

蒋美燕

2018-5-15 01:20:50
TI RTOS里面有,请看这边: https://e2e.ti.com/support/wireless_connectivity/proprietary_sub_1_ghz_simpliciti/f/156/t/529212
举报

更多回帖

发帖
×
20
完善资料,
赚取积分