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.

[参考译文] F28M35H52C-Q1:复位原因

Guru**** 2391275 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1480763/f28m35h52c-q1-reset-cause

器件型号:F28M35H52C-Q1
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我不熟悉嵌入式编程、但我正在尝试跟踪重置的原因。

请您对此提供帮助。

当一个软复位发生并且应用程序重新启动时、复位原因由 API 调用`SysCtlResetCauseGet ()`报告为多个事件、返回24。

该值24是`SYSCTL_CAUSE_SW`和`SYSCTL_CAUSE_WDOG`的组合。

在冷启动条件下、我接收到`SYSCTL_CAUSE_WDOG`。

在这两种情况下、`SYSCTL_CAUSE_WDOG`始终存在。

我尚未在代码中实现看门狗。 但我仍然获得 SYSCTL_CAUSE_WDOG。

了解复位原因的正确方法是什么。


这是 API 所说的。

//
//下面的值可以传递到 SysCtlResetCauseClear ()
// API 或由 SysCtlResetCauseGet () API 返回。
//
#define SYSCTL_CAUSE_SW 0x00000010 //软件复位
#define SYSCTL_CAUSE_WDOG 0x00000008 //看门狗复位
#define SYSCTL_CAUSE_POR 0x00000002 //上电复位

这是我的函数

空 GetResetCAse (空)

//检索当前复位原因
uint32_t resetCauses = SysCtlResetCauseGet ();

IF (resetCauses > 0)

//计算活动原因的数量(设置位)
Int activeCauses = 0;

IF (resetCauses 和 SYSCTL_CAUSE_EXT)

printf ("检测到外部重置\n");

activeCauses++;
}
IF (resetCause 和 SYSCTL_CAUSE_WDOG)

printf ("检测到看门狗重置\n");

activeCauses++;
}
IF (resetCause 和 SYSCTL_CAUSE_SW)

printf ("检测到软件重置\n");

activeCauses++;
}
IF (resetCause 和 SYSCTL_CAUSE_POR)

printf ("检测到开机重置\n");

activeCauses++;
}

//确定多个原因是否处于活动状态
如果(ACTIVEQUES > 1)

printf ("检测到未知或多个重置原因\n");
}

printf ("重置导致%d\n"、resetCauses);

//处理后清除复位原因寄存器
SysCtlResetCauseClear (resetCause);

}

}

谢谢!

Satish

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

    大家好、Satish、

    是的、只需读取 RESC 寄存器就可以知道复位原因。 请参阅手册中的寄存器说明。

    Unknown 说:
    我没有在我的代码中实施看门狗。 但我仍然得到 SYSCTL_CAUSE_WDOG。[/QUOT]

    是否启用了看门狗? 冷启动是什么意思?  

    谢谢

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

    Prarthan、您好!

    感谢您的答复。  


    在本例中、看门狗未启用。  

    在器件运行时、 切断电源并再次启动。  

     打开电源后、引导加载程序加载应用程序、并 查看 SYSCTL_CAUSE_WDOG

    对于软复位、 需要获取多个事件的原因是什么? 我期望 SYSCTL_CAUSE_SW。

    但我看到了`原因 SYSCTL_CAUSE_SW`和`SYSCTL_CAUSE_WDOG`。

    谢谢

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

    大家好、Satish、

    如果您看到 RESC 寄存器中的看门狗位已设置、那么看门狗确实会在计时器到期后触发复位。

    在上面您要说明您正在降低功耗、这不是软复位、这是下电上电场景、或者您可能要在这里解释两种不同的场景。

    但是无论如何,当 ROM 代码看到如下所示的异常时,它可以设置 WDT 并触发重置以进行处理,如果这种情况下,您可能需要检查 BootROM 执行状态位:  

    您是否还可以使用 c2000ware 中的简单 GPIO 切换示例尝试对闪存加电启动、并检查 RESC 寄存器。

    谢谢

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

    Prarthan、您好!

    在提供的 mboot 说明中、mboot 触发看门狗复位的唯一原因是发生保险丝错误。  我认为在我的情况下不会发生这种情况、因为我只是 进行电源循环。

    我只想知道重启的原因。

    鉴于 mboot 代码会清除 POR 和 XRS 位、但不会清除看门狗、 我如何区分实际的看门狗跳闸(一旦我启用它)和外部或上电复位。  

    考虑到 mboot 干扰、您如何建议区分 POR (或 XRS)和看门狗。  是否有其他可提供额外有用信息的寄存器?

    谢谢!

    Satish

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

    大家好、Satish、

    没有 RESC 寄存器是知道复位原因的唯一方法。

    鉴于 mboot 代码清除了 POR 和 XRS 位而不是看门狗、我如何区分实际的看门狗跳闸 (一旦启用)和外部或上电复位。  [报价]

    引导代码仅在 POR 时清除 POR 位、在 XRSn 类型复位时清除 XRSn。 寄存器中的其他源保持不变、以便用户进行调试

    您还可以使用 c2000ware 中的简单 GPIO 切换示例、尝试对引导至闪存加电、或许并检查 RESC 寄存器。

    您能尝试以上操作吗?

    谢谢

    [/quote]