TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310 watchdog只能复位,不能进中断

使用的SDK是tirtos_cc13xx_cc26xx_2_21_00_06(因为这个项目启动的比较早,所以使用SDK版本比较旧一点),最近在调watchdog,这个SDK中没有watchdog的example,但watchdog比较简单,只看文档和watchdog.h差不多就知道怎么用了。

在其他example project上修改(rfPacketRx ),写了一个最简单的watchdog测试程序:

main()中创建一个任务,在任务函数先调用Watchdog_init();,然后设置watchdog参数并open watchdog,然后while(1)。  debug时在watchdog中断回调函数中打上断点。  结果跑起来后发现始终没有进入watchdog中断回调函数,debug stop后发现程序也没有在while(1)处运行(感觉像跑飞了)。

Watchdog_Handle watchdogHandle;

void watchdogCallback(uintptr_t unused)
{
/* Clear watchdog interrupt flag */
Watchdog_clear(watchdogHandle);
}

static void rxTaskFunction(UArg arg0, UArg arg1)
{
Watchdog_Params params;

Watchdog_init();

Watchdog_Params_init(&params);
params.callbackFxn = (Watchdog_Callback)watchdogCallback;
params.resetMode = Watchdog_RESET_OFF;
watchdogHandle = Watchdog_open(0, &params);
if (watchdogHandle == NULL) {
/* Error opening Watchdog */
while (1);
}

while(1);

}

我有使用最新的SDK进行测试,simplelink_cc13x0_sdk_2_10_00_36,这个SDK中有watchdog example project,测试是可以进入watchdog中断回调函数的。   然后我再SDK的rfPacketRx example project中使用上面的代码和流程进行测试,也是能进入中断的。

对于tirtos_cc13xx_cc26xx_2_21_00_06这版SDK,watchdog中断为何总是进不去??

da qin zheng sheng:

说明新版本比较好啊!

da qin zheng sheng:

中间没有进行喂狗操作?

Viki Shi:

新版本在老版本基础上会有一些更新改进,具体更新内容请查看release note: file:///C:/ti/simplelink_cc13x0_sdk_2_10_00_36/release_notes_simplelink_cc13x0_sdk_2_10_00_36.html

AndyChen:

回复 da qin zheng sheng:

我就是想测一下watchdog超时后能否正常进入中断或复位,所以没有喂狗。

AndyChen:

回复 Viki Shi:

现在用的不是simplelink的SDK,tirtos_cc13xx_cc26xx_2_21_00_06,这版SDK在TI官网上竟然都找不到了。。。

YiKai Chen:

回复 AndyChen:

tirtos_cc13xx_cc26xx_2_21_00_06 可以到 software-dl.ti.com/…/ 下載

Felix ZF:

在tirtos_cc13xx_cc26xx_2_21_00_06中使用WDT应该没有问题的。

下面是我在CC2650上的empty project中加的WDT测试代码,

/*
 *  ======== main ========
 */
int main(void)
{
    Task_Params taskParams;

    /* Call board init functions */
    Board_initGeneral();
    // Board_initI2C();
    // Board_initSPI();
    // Board_initUART();
    Board_initWatchdog();

    /* Construct heartBeat Task  thread */
    Task_Params_init(&taskParams);
    taskParams.arg0 = 1000000 / Clock_tickPeriod;
    taskParams.stackSize = TASKSTACKSIZE;
    taskParams.stack = &task0Stack;
    Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL);

    /* Open LED pins */
    ledPinHandle = PIN_open(&ledPinState, ledPinTable);
    if(!ledPinHandle) {
        System_abort("Error initializing board LED pins\n");
    }

    PIN_setOutputValue(ledPinHandle, Board_LED1, 1);

    Watchdog_Params params;

    /* Create and enable a Watchdog with resets disabled */
    Watchdog_Params_init(&params);
    params.callbackFxn = watchdogCallback;
    params.debugStallMode = Watchdog_DEBUG_STALL_ON;
    params.resetMode = Watchdog_RESET_OFF;
    watchdogHandle = Watchdog_open(Board_WATCHDOG0, &params);
    if (watchdogHandle == NULL) {
        /* Error opening Watchdog */
        while (1);
    }

    Watchdog_setReload(watchdogHandle, 1500000);

    System_printf("Starting the example\nSystem provider is set to SysMin. "
                  "Halt the target to view any SysMin contents in ROV.\n");
    /* SysMin will only print to the console when you call flush or exit */
    System_flush();

    /* Start BIOS */
    BIOS_start();

    return (0);
}

赞(0)
未经允许不得转载:TI中文支持网 » CC1310 watchdog只能复位,不能进中断
分享到: 更多 (0)