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.

[参考译文] LAUNCHXL-CC1310:我使用看门狗 SDK 演示、为什么电路板在加载程序后必须对复位键进行 PESS、否则看门狗进行回调会一直处于循环状态、而(1)不是进入系统复位状态?

Guru**** 2481085 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1318532/launchxl-cc1310-i-use-watchdog-sdk-demo-why-the-board-must-pess-on-reset-key-after-load-program-oherwise-the-watchdog-into-callback-will-stuck-in-loop-while-1-all-time-not-into-system-reset

器件型号:LAUNCHXL-CC1310
主题中讨论的其他器件:CC1310

#define TIMEOUT_MS 1000
#define SLEEP_US 500000

/*
*=========== WatchdogCallback =========
*/
void watchdogCallback (uintptr_t watchdogHandle)
{
/*
*如果调用看门狗不可屏蔽的中断(NMI),
*循环,直到设备复位。 一些器件将调用
*在看门狗过期时进行此回调,而其他人将
*重置。 请参阅特定于器件的看门狗驱动程序文档
*您的设备。
*
*/
GPIO_WRITE (Board_GPIO_LED1、BOARD_GPIO_LED_ON);

// while (1){}

/*
*=========== gpioButtonIsr =========
*/
void gpioButtonIsr (uint_least8_t index)
{
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);

/*
*模拟应用程序被卡在 ISR 中。 此 ISR 可用于
*被看门狗不可屏蔽中断(NMI)抢占。
*/
while (1){}

/*
*=========== 主线程====
*/
void *mainThread (void *arg0)
{
Watchdog_Handle WatchdogHandle;
Watchdog_Params 参数;
uint32_t reloadValue;

/*调用驱动程序初始化函数*/
GPIO_init ();
watchdog_init();

/*配置 LED 和按钮引脚*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig (Board_GPIO_LED1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig (Board_GPIO_BUTTON0、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setCallback (Board_GPIO_BUTTON0、gpioButtonIsr);

GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);
GPIO_WRITE (Board_GPIO_LED1、Board_GPIO_LED_OFF);

usleep (sleep_US);

GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
GPIO_WRITE (Board_GPIO_LED1、BOARD_GPIO_LED_ON);

usleep (sleep_US);

GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);
GPIO_WRITE (Board_GPIO_LED1、Board_GPIO_LED_OFF);

usleep (sleep_US);

/*打开看门狗驱动程序实例*/
Watchdog_Params_(参数(&P);
params.callbackFxn =(Watchdog_Callback)看门狗回调;
params.debugStallMode = Watchdog_debug_staller_on;
params.resetMode = Watchdog_reset_on;

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

/*
*看门狗重新加载值在
* Watchdog_open()调用。 重载值也可以使用 HyperKnob
*运行时动态设置。
*
*将 TIMEOUT_MS 转换为看门狗时钟节拍。
*此 API 并非适用于所有设备。
*请参阅特定于设备的看门狗驱动程序文档
*您的设备。
*/
reloadValue = Watchdog_convertMsToTicks (watchdogHandle、timeout_MS);

/*
*值为零(0)表示转换后的值超过了32位
*或 API 不适用于此特定设备。
*/
if (reloadValue !=0){
WATCHDOG_setReload (watchdogHandle、reloadValue);

/*打开 Board_GPIO_LED0并启用 Board_GPIO_BUTTON0中断*/
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
GPIO_enableInt (Board_GPIO_BUTTON0);

while (1){

/*
*禁用电源策略将阻止设备进入
低功耗状态。 当 CPU 处于活动状态或处于活动状态时、
*空闲。
*/
power_disablePolicy();

/*在清除看门狗之前休眠 SLEEP_US */
usleep (sleep_US);
WATCHDOG_CLEAR (watchdogHandle);
GPIO_toggle (Board_GPIO_LED0);

/*
*启用电源策略将允许设备进入低电平
* CPU 空闲时的电源状态。 如何使用看门狗外设
*在低功耗状态下的行为是特定于设备的。
*/
power_enablePolicy();

/*在清除看门狗之前休眠 SLEEP_US */
usleep (sleep_US);
WATCHDOG_CLEAR (watchdogHandle);
GPIO_toggle (Board_GPIO_LED0);

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

    您好

    我不确定我是否理解您的问题。

    我已经在 CC1310 LP 上测试了 SDK 中的看门狗示例、它的工作原理与自述文件中描述的完全相同:

    README.html (TI.com)

    Siri

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

    我无法打开它 README.html (TI.com)

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

    您的意思是、看门狗只在 电路板复位或再供电时有效  

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

    不能确定为什么无法打开自述文件。 我的链接词。 但是、在导入自述文件时、也会在示例中找到它。

    您可以从调试器中运行示例、但是只要您按下按钮进入 while (1)循环、并强制看门狗复位器件、就会与调试器失去接触。

    Siri

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

    为什么必须对板重新加电。程序加载到板上时、我们可以看到程序运行 、LED 切换、但按下按钮程序将进入看门狗回调并卡在 while (1)中、如果不对板重新加电或按下复位按钮、板将不会永久复位。

    将示例应用程序加载到电路板后、断开器件与调试会话的连接。 然后将器件与电源物理断开5秒。 重新连接器件、应用程序应该会自动运行。

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

    我不确定我能在这里帮助你,因为我没有看到任何问题。 按下按钮后、我没有在 while (1)循环中停留很短的时间(LED 停止闪烁)、然后它将复位、LED 将再次开始闪烁。

    您是否正在使用 CC1310 LP? 当您不使用调试器运行时、您怎么知道它卡在 while (1)循环中?

    Siri

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

    我用 CC1310LP,程序加载到板上后,按下按钮,板上 LED 指示灯亮起几秒钟, LED 一直熄灭,这意味着程序不能正确复位,因为 LED 不闪烁

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

    您是否有可测试的多个电路板?

    以下是代码的工作方式(我已使用 LP 对其进行了测试)。 我使用未修改的看门狗示例(同时测试了 RTOS 和 nortos 版本)

    如果从调试器运行:

    • 红色 LED 将切换、直至按下按钮。
    • 按下按钮时、调试器断开与电路板的接触、并且切换停止。

    独立运行时:

    • 红色 LED 将切换、直至按下按钮。
    • 按下按钮时、切换会停止一点点、然后再次开始切换。

    Siri