This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CC2640R2F:看门狗功能

Guru**** 2582405 points
Other Parts Discussed in Thread: BLE-STACK, SIMPLELINK-CC2640R2-SDK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/594695/ccs-cc2640r2f-watchdog-functionality

器件型号:CC2640R2F
Thread 中讨论的其他器件:BLE-STACKSIMPLELINK-CC2640R2-SDK

工具/软件:Code Composer Studio

版本信息 CCS 版本:7.1.0   TI-RTOS 2.20   TI BLE-Stack 3.00.00.22

我尝试使用内部看门狗来重置我的器件、但无法使用此功能。

我已经尝试了驱动程序接口和驱动程序库接口、甚至通过在控制器中设置必要的寄存器来实现。

我在这个论坛上读过一些主题帖、在其他网站上搜索、但没有找到答案。 在某些地方、它指出看门狗是优先级的、但我想这意味 着驱动程序层。

当使用调试器运行时、每5秒调用一次回调、但现在复位、因为据我了解、软复位的复位功能被禁用。

没有调试器、我看不到任何复位。  在 加电时有一个 LED 闪烁、但在首次加电时只能看到一次。 器件的功能正常工作(除了每10秒复位一次)

我还尝试 从回调函数调用 SysCtrlSystemReset(),但这不会重置设备。 在回调之外、它可以正常工作

我猜我忘记了一些小东西、但什么?

下面的代码。 (main 正在调用 HALInit(),然后调用 HAL_WDT_Enable(),而我从未调用 HAL_WDT_KICK ())


用于看门狗的//句柄
静态看门狗_Handle HAL_WDT_Handle;


void HAL_Init()

 (笑声)

 /*呼叫板初始化函数*/
 Watchdog_init()

 (笑声)


 

void HAL_WDT_Callback (uintptr_t 未使用)

 /*清除看门狗中断标志*/
 Watchdog_clear (HAL_WDT_Handle);

void HAL_WDT_Enable (void)(空)

 Watchdog_Params 参数;
 uint32_t 节拍;

 /*创建并启用禁用复位的看门狗*/
 Watchdog_Params_init (params);

 params.callbackFxn =(Watchdog_Callback) HAL_WDT_Callback;
 params.resetMode = Watchdog_reset_on
// params.debugStallMode = Watchdog_debug_star_on;

 HAL_WDT_Handle = Watchdog_open (Board_WATCHDOG0、&params);
 IF (HAL_WDT_Handle == NULL)
 {
   /*打开看门狗时出错*/
   while (1);
 }

 节拍数= Watchdog_convertMsToTicks (HAL_WDT_Handle、5000);
 () Watchdog_setReload (HAL_WDT_Handle、tick);

void HAL_WDT_KICK ()

 Watchdog_clear (HAL_WDT_Handle);

此致 Örjan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您的帖子指定您使用的是 TI-RTOS 2.20和 TI BLE-Stack 3.00.00.22。 您可以使用 SIMPLELINK-CC2640R2-SDK v1.30或更高版本吗? TI RTOS 包含在 SDK 中、不应从提供的版本进行更改。

    正确的做法是、如果连接了 XDS110、则不允许 MCU 复位。 您能否确认"没有调试器"意味着您没有连接调试器? 如果您使用的是 LaunchPad、您能否拔下跳线?

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    这是我们正在使用的版本: simplelink_cc2640r2_sdk_1_00_00_22、我们现在无法更新数据。
    使用 LaunchPad、当我说调试器已断开连接时、我意味着去除 j 标签连接器、硬件由电源供电。

    但是、我发现了一些我不知道的应用程序相关信息(我不是唯一的开发人员)。
    应用程序在 通告之间进入低功耗模式,根据 我读出的数据, WDT 计数器的计数 速度会更慢,因此4秒可能大约为1小时:)

    我改为使用 driverlib、在执行一些愚蠢的错误操作后、我终于按我的需要启动并运行了它。 您将在下面找到源代码。
    和... 是的、我知道使用计时器来启动看门狗并不是最好的 ID、但对于 我的解决方案而言、它已经足够了。

    现在我将保持原样、但如果我有一些时间、我将再次尝试使用驱动程序层、看看它是否起作用。

    此致 Ørjan  

    /*
     *@fn     HAL_WDT_Enable
     *
     *@brief  启用内部看门狗、以便在4秒后进行复位。
     *
     *         两秒后、WDT 将发出中断并重新开始计数、并在下一次之后进行复位
     *         两秒。
     *         为了防止在第二阶段复位、必须在计时器中断到期前将其清除。
     *         在中断产生之前、通过向 WDT 写入新值来重新启动 WDT
     *
     *@注意   为了在调试器停止时不继续计数、必须启用 STALL。
     *
     *@param  无。
     *
     *@返回 无。
     *
    void HAL_WDT_Enable (void)(空)

     /*当调试器停止时,以下命令将导致 WDT 计数器停止计数*/
     /* TODO!! 应在版本代码中删除*
     WatchdogStallEnable();

     /*加载计数器值、启用复位功能并启动 WDT */
     WatchdogReloadSet (APP_CONFIG_WDT_TIMEOUT_TICK);
     WatchdogResetEnable();
     WatchdogEnable();


    /*
     *@fn     HAL_WDT_Disable
     *
     *@brief  会禁用内部看门狗
     *
     *@param  无。
     *
     *@返回 无。
     *
    void HAL_WDT_Disable (void)(空)

     WatchdogResetDisable();


    /*
     *@fn     HAL_WDT_TimerStart
     *
     *@brief  会启动一个软件计时器、该计时器每隔三秒便会启动看门狗。
     *
     *@param  无。
     *
     *@返回 无。
     *
    void HAL_WDT_TimerStart (void)

     Clock_Params clockParams;

     clockParams.arg = 0;
     Clock_Params_init (&clockParams);

     /*构造 ant 启动 WDT kicker,每次 WDT 到期时都将重置它*/
     Clock_construction (&HAL_WDT_Kick 时钟、HAL_WDT_Kick Swifxn、APP_CONFIG_WDT_Kicker_TIME_MS *(1000/Clock_tickPeriod)、&clockParams);
     Clock_start (Clock_handle (&HAL_WDT_Kick 时钟));

    /*
     *@fn     HAL_WDT_Kick Swifxn
     *
     *@  软件计时器的简短回调函数、该计时器应在看门狗到期前启动
     *
     *@param  dummy -定时器回调中的一个必须参数。 未使用。
     *
     *@返回 无。
     *
    静态空 HAL_WDT_Kick Swifxn (UArg 虚拟)

     /*清除 WDT 中断,必须完成。 请参阅 HAL_WDT_Enable()中的说明*/
     WatchdogIntClear();

     /*重新加载 WDT 计数器并重新启动软件定时器*/
     WatchdogReloadSet (APP_CONFIG_WDT_TIMEOUT_TICK);
     Clock_start (Clock_handle (&HAL_WDT_Kick 时钟));