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/MSP-FET:使用 MSP-FET 通过 TImerA 调试 MSP432项目会破坏单步执行代码的能力

Guru**** 2535150 points
Other Parts Discussed in Thread: MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/568357/ccs-msp-fet-using-msp-fet-to-debug-msp432-project-using-timera-breaks-ability-to-step-through-code

器件型号:MSP-FET
主题中讨论的其他器件: MSP432P401R

工具/软件:Code Composer Studio

大家好、

我一直在为 PCB 编辑当前的 MSP432代码。 该代码在红色评估板上运行良好。 但是、在我们用于 PCB 设计的 MSP-FET 上、当我单步执行代码时、在我通过线路以启用任一 TimerA 中断后、代码将立即进入 TimerA 的 ISR、并将永久进入和退出。 当我运行到下一个断点时、它将不会产生任何问题、但当我再次步入该中断时、它会返回到该中断中。

我已经尝试在多台计算机、MSP-FET、工作区以及使用 CCSv6与 CCSv7解决此问题、但我得出结论、这是 MSP-FET 调试器的错误。 如果我运行到断点、或者如果我在具有 XDS110调试器的评估板上运行代码、代码将按原样工作、但到目前为止、我无法使用 MSP-FET 通过使用 ISR 的 TimerA 模块单步执行项目。

我现在可以使用 SysTick 模块解决这一问题、它不会给我带来这些问题、但我更愿意在将来将 TimerA 模块与 ISR 一起使用。  

谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否正在使用 www.ti.com/.../msp-fet-432adptr
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我是。 如果没有 MSP-FET-432适配器、它也可以执行相同的操作。

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

    您好!


    在单步执行代码时、TimerA 时钟在后台运行。

    为了避免出现您所看到的行为、您需要写入 SYSCTL 中的 SYS_PERIALT_CTL 寄存 器(有关详细信息、请参阅《技术参考手册》)。

    使其正常工作的最简单方法是使用 CCS 中的内置功能。 当您处于调试会话中时、请执行以下步骤:

    • Scripts -> MSP432 Debug Clock Control
    • 冻结 TimerA 模块

    您需要选择哪个 TimerA 模块、具体取决于您的目标代码。 例如、"Freeze_T16_0"会暂停 TimerA0模块。

    谢谢、

    Bob

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

    这很好地解决了问题、谢谢!

    我还看到它正在更改的寄存器、并在 main.c 顶部附近添加了一条语句、内容为:

    SYSCTL->PERIHALT_CTL |= SYSCTL_PERIHALT_CTL_HALT_T16_0;

    这可确保每次代码运行时都抑制这种情况。 它现在正在工作、但您是否认为这会在将来对我造成伤害?

    此外、如果在不通过代码进行调试的情况下运行该 ISR、抑制该 ISR 是否会产生任何有害影响?  

    谢谢、

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

    只有当 CPU 暂停时、写入外设停止寄存器才会冻结模块。

    因此、如果您不是通过代码进行调试、我想 CPU 将始终持续运行(除非您的代码使 CPU 暂停)。

    确切地说、您不会抑制 ISR、您会暂停模块、因此 TimerA 不会在 CPU 暂停时继续运行。
    这意味着、如果你单步执行的时间足够长、你最终将进入 ISR。

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

    我发现了与 MSP-FET 相同的问题。 选中“禁用源步进”后,您可以看到“属性”->“调试”->“程序/内存”加载选项->“禁用中断”->“禁用源步进禁用”。 我想知道该设置对 MSP-FET 无效、而 XDS110有效。 XDS110没有此问题、但如果您取消检查 XDS110的此设置、XDS110将会导致相同的问题。

    我找到了有关 MSP-FET 此问题的权变措施。 当步进时、清除 IRQn 的 NVIC 中断使能位、向 ICERn 寄存器写入1并执行1步、从而在 ISERn 寄存器中产生0。 要重新使能、请向 ISERn 寄存器写入1并执行1个步骤、从而在 ISERn 寄存器中产生1个步骤。 我附加了一个禁用 TA0的情况、IRQn=8。

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

    我现在要尝试这个。 我在上一篇文章中发现了这种方法、Bob 的文章只是随机工作、一段时间后、似乎又重新出现了这些中断触发的问题。

    在调试时、您认为我应该在程序开始时关闭所有 ICER0/ICER1位吗?

    了解其他人也是很好的。 我仍然不认为调试设置也对 MSP-FET 执行任何操作。

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

    您好 Lunatic911、
    当您需要步进调试时、在步进调试的起始点设置一个断点、并查看 ISERn 中的中断使能位、重写 ICERn 中的所有位。 此时、所有中断都被禁用。 但会执行挂起的中断。 我认为您可以在 LaunchPad reV-C 或 B 板上安全地使用 XDS110仿真器。 请参阅 MSP-EXP432P401R UG slau597b、2.3.4使用具有不同目标的 XDS110-ET 调试探针。
    此致、
    山口和国

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

    只是想让您知道、我听从了您的建议、在 LaunchPad 上使用了 XDS110仿真器、并将其发送到 MSPFET-Adptr、然后将其发送到适配器电缆、我需要将其连接到 MSPFET-Adptr 的另一侧。 从那时起、我就能够在 PCB 上进行调试了。

    感谢你的帮助。 但 TI 应该意识到 MSP-FET 和 MSP432存在相当严重的错误。 上面提到的前面的修复只是随机的临时修复。 我将在评估板上使用 XDS110仿真器、直到有针对 MSP-FET 的修复。

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

    您好 Lunatic911、

     

    我找到了如何在使用 MSP-FET 和 CCSv7_1的步进调试中短暂停止中断。

    下面、时钟控制脚本可以冻结(禁用中断)并继续(启用)所有模块。

     

    我已通过示例 msp432p401r_ta0_01.c 确认这些行为

    如果这可以解决您的问题、请单击验证答案。