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.

[参考译文] MSP432E401Y:以太网每15秒中断一次

Guru**** 2537240 points
Other Parts Discussed in Thread: MSP432E401Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1115674/msp432e401y-ethernet-breaks-down-every-15-seconds

器件型号:MSP432E401Y

您好、论坛、

我们有一个带有 MSP432E401Y 的 PCB。 我们使用 CCS 10.0.0.00010和 simplelink_msp432e4_sdk_4_10_00_13。 应通过以太网进行通信。 PCB 通过开关连接到 PC。

启动程序后、一段时间后建立连接。 但它会中断、大约每15秒循环一次。 但通信会在几秒钟后持续进行。 开关的 LED 闪烁。 当我暂停调试器时、连接不会中断。

MSP 和 RJ45适配器之间的硬件与 MSPP432E401Y Launchpad 类似。 我们还有另外两个版本的 PCB、它在哪里工作。 我还没有发现任何差异。

我的想法是调试软件。 某种情况会导致以太网永久暂停或重新启动连接。 这不是 MSP 的重启、因为初始化时断点处没有停止。

什么可能导致连接中断?

如何在中断处设置断点?

文件 startup_msp432E401y.c 中有一个中断矢量、但该文件呈灰色显示、因此我假设该文件未被使用。

或者、如何找出处理了哪个中断? "RTOS 对象"视图显示了五个不同的中断地址、但我无法从"Disassembly"中看到在那里处理了哪些中断。

寄存器中的 ISRNUM 位域。 CCS 不显示 ISRNUM 字段、但显示 EXCEOPTION 字段。 与 slau723a.pdf 相比、这些位的位置是相同的。

但是、如何在中断时停止调试器呢? 在中、可以在文件 Hwi_asm_sv7M 内设置断点、但我不确定调试器是否会在这些断点处停止。 对于.asmfunc 和.endasmfunc、调试器应将汇编代码的部分解释为 C 代码、但我不确定它是否起作用。

感谢您的帮助。

BR Guenther

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

    MSP432E 向 PC 发送一个带有时间戳的 http 页面。 时间戳通过 Simplelink 函数 Clock_getTicks()进行更新,该函数可在中找到
    simplelink/source/ti/posix/tirtos/clock.c

    连接中断后、计时器不会从旧值继续、它从开始重新开始。

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

    听起来好像每15秒重置一次微控制器、因此整个程序再次启动。 您是否可以启用看门狗或是否有执行复位的断言处理程序?

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

    在每秒执行一次的函数中添加 Watchdog_clear()后,它就会起作用。

    但是、如果看门狗计时器达到零、会发生什么情况? 我认为 progam 将从一开始就开始、并在初始化时停在断点处。 但它没有。 因此、我不知道看门狗计时器是问题所在。

    谢谢、致以诚挚的问候

    Guenther

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

    是的、这很奇怪。 我还希望它在每次复位后的 main()开始时停止。 该自动断点可能有一些不同之处。 出于兴趣,如果您在 main()中的某个位置设置手动硬件断点,那么在启动 BIOS 之前,该断点是否会捕获每次复位?

    您应该能够通过检查寄存器- SYSCTL -[0...99]- SYSCTL_RESC 来查看最后一次复位的原因。

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

    我删除了 Watchdog_clear 并在函数 Board_initGeneral (查看 httpserver 示例)(即 BIOS_start()之前)处设置了断点。 看门狗计时器应立即重启。

    但这是一个 SW 断点、我不确定如何设置硬件断点。 有关我必须添加的帮助
    GEL_HWBreakPtAdd(“main”);
    但是、我应该在哪里放置代码而不会出现编译错误?

    我还在_c_int00 ()处添加了一个 SW 断点、其中每个程序应在进入 main 函数之前开始。 软复位(Control Shift R)后、调试器停止该位置、相关位置属于 boot.asm。 但是、在看门狗复位后、调试器不会在这里停止...

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

    是的、看门狗复位会断开调试器的连接。 您可以通过右键单击 Debug 窗口中的探测器来重新连接(我似乎必须执行两次!)。 然后、您可以在 SYSCTL_RESC 中看到设置为复位原因的看门狗标志、但这似乎并不是很有帮助。

    调试后、您应该能够通过右键单击一行代码来设置硬件断点。 上下文菜单包含 Breakpoints>、后者提供了更多选项。