有没有cc1310 看门狗的官方示例完整的
这是官方的示例代码,不完整。有些内容还没填,有没有完整的。
#include <driverlib/watchdog.h>
#include <ti/drivers/watchdog/WatchdogCC26XX.h>
#include <ti/drivers/power/PowerCC26XX.h>
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);
}
}
TI RTOS里面有,请看这边: https://e2e.ti.com/support/wireless_connectivity/proprietary_sub_1_ghz_simpliciti/f/156/t/529212