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.

[参考译文] MSP430F5529:MCU 挂起、不由看门狗复位

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1524664/msp430f5529-mcu-hang-up-and-not-reset-by-watchdog

器件型号:MSP430F5529

工具/软件:

我使用 Code Constainer Studio V12.7 进行代码编译。 而使用 MSP430F5529 微控制器时、我的当前工程的闪存/FRAM 使用量为 42740 字节。 RAM 使用量为 4279 字节。 在特定情况下、微控制器 与调试器失去同步。 并且调试器显示“内部错误“。 在这种状态下、微控制器停止响应串行通信中断、看门狗复位不起作用、甚至停止获取计时器溢出中断。 如果我在当前调试会话中使用挂起选项、微控制器将通过切换一个 GPIO 引脚开始工作、我可以看到这种情况。 微控制器似乎卡在低功耗模式中。 通过调试器暂停指令、它会再次唤醒。 尽管我不确定微控制器会单步进入哪种状态、因为我始终在工作模式下使用微控制器。 我不知道该怎么说。 请帮助我确定问题、并建议一些解决问题的建议。 下面是我迄今为止执行的活动、但没有结果。

1.卡住时、任何低功耗模式的_BIC_SR_REGISTER_ON_EXIT (LPMx_BITS) 指令无法正常工作。

2.即使它没有响应唤醒信号,如通过中断(如果它卡在任何低功耗模式)例程输入引脚上的外部事件。

3.如果在主序列中插入任何断点,则执行始终不会卡住,硬件平稳运行。 还有一种类似的观察结果:如果在实时调试会话时卡住、则会与调试器失去同步、但如果我在 CCS 上点击暂停选项 (V12.7)、则微控制器会恢复。

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

    尊敬的 Partha:

    • 您能否连接到调试器并暂停它、以便查看 MCU 在代码执行中的哪个位置卡住?
    • 如果器件未响应外部 ISR、那么我认为器件可能卡在通过 ISR 进行的低功耗模式调用中、或者至少器件处于更高优先级的中断中。
    • 看起来您正达到某种竞态条件或 LPM 边沿转换。 您说您仅使用活动模式、但也在第 1 点说。 LPM 指令无法正常工作。 您最初没有睡眠指示吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.  在点击该特定情况之前、如果暂停调试器、它会正常暂停而不会卡住。  

    2. 我将对其进行测试并告诉您。

    3. 最初我想是否将进入任何低功耗模式、因此我添加了一些退出指令以从低功耗模式唤醒。 后来我特意添加了进入睡眠模式的指令。 但在这两种情况下、行为是相同的。 它停留在某个地方,永远不会回来。

    只是为了通知您、这种情况是通过串行通信接收 8 字节数据而触发的。 我观察到、即使它正在正确接收所有 8 个字节、我下一次在复位微控制器后可以看到这些字节。

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

    尊敬的 Partha:

    我预计这里的数据量不会成为一个问题、但被困在 ISR 中可能是一个原因。 您的 ISR 是否相对较短并且不存在潜在的锁定条件(例如 while 循环或可能无法终止的循环)。

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

    感谢您发送编修。

    编号 我 在该工程中有两个大型中断例程。 第一个是 TIMER0_A0_ISR、每 625uS 和另一个 USCI_A0_ISR 中断调用一次。

    根据您的建议、我将内部例程从串行中断中减少并将其带到主例程。 串行接收中断内只剩下几行。 此外、通过丢弃此处的计算来查看它是否仍然卡住、从而减少计时器溢出中断。 现在的代码量非常小。 令人惊讶的是、它仍然卡在某个位置、甚至无法响应外部中断。 更可悲的是调试器失去了与微控制器的同步。

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

    尊敬的 Partha:

    您是否能够在发生故障后连接到器件。 让调试器设置“halt on connect“。

    我们的目标是连接到器件、以便了解它在代码中的位置。 (或栈指针和程序计数器的执行位置)。