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.

[参考译文] LP-MSPM0G3519:MCAN_TXBTO 在从断点恢复代码后不更新。

Guru**** 2556970 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1500558/lp-mspm0g3519-mcan_txbto-does-not-update-after-resuming-the-code-from-breakpoint

器件型号:LP-MSPM0G3519


工具/软件:

您好团队:

我们集成了 CAN-FD 和“MCAL MSPM0_00.02.05.0_Internal“。

我们观察到 CANFD-TX 和 CANFD-RX 在运行时工作正常。
但是、如果我们应用断点、执行在断点处停止、或者我们停止执行一段时间、然后重新运行代码、
CANFD-TX 停止工作。 (我们观察到这未能减小 freeHwObjectCount、导致 CAN 驱动程序处于繁忙状态)

当代码运行正常而没有断点时、我们观察到寄存器 MCAN_TXBTO 正确更新、表示发生了 Tx 缓冲区传输。
代码执行在断点停止时的行为不确定。
恢复代码时、MCAN_TXBTO 不会更新、将值保留为 0。
此外、错误计数器开始递增、最终通信停止。

注意:我们已经使用 Trace32 和 CCS-XDS110 调试器观察到了这种行为。

如果您对此问题有任何见解或解决方案、我们将不胜感激。

此致、

Kiran

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

    尊敬的 Kiran:

    看起来像、如果 Tx 缓冲区传输通过断点发生、则不会更新 TXBTO 寄存器。 我将进行测试以检查是否符合预期。

    B.R.

    Sal

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

    尊敬的 Kiran:

    我已经使用 TXBUF 和断点测试了 SDK 版本、看起来它在我的测试中可以正常工作。 我将咨询 MCAL 团队、了解这里的任何建议。

    我想与您核实的一件事是:

    当代码运行良好而没有断点时、我们会观察到寄存器 MCAN_TXBTO 正确更新、表示发生了 Tx 缓冲区传输。

    您是使用不同的 TXBUF 发送消息、还是使用相同的 TXBUF 发送消息、然后发现消息没有相应地更改?

    此外、什么是 TXBCF 位状态:

    B.R.

    Sal

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

    您好 Sal、

    感谢您的答复!

    我们正在处理“MCAL MSPM0_MSPM0_00.02.05.0_Internal“。 SDK 版本是否具有相同的含义?

    我们要传输一条消息、为此、我们完成了以下配置:

    我们尝试使用从 0 到 1 的不同“CanHwObjectCount"值“值;但是、结果是相同的。

    我们在 TXBCF 寄存器中看不到任何更新。 请查看下面的屏幕截图。

    运行时中的 TX 寄存器状态(断点之前,传输正常工作时)

     断点后的 TX 寄存器状态、重新运行场景(传输停止)

    如果您需要任何其他详细信息、敬请告知。

    此致、

    Kiran

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

    在上面的消息中,我的意思是说“我们尝试了不同的“CanHwObjectCount"值“值,从 1 到 8 ;然而,结果是相同的。“

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

    尊敬的 Kiran:

    感谢您提供的信息、我们的 MCAL 团队进行了验证。 我们会在有进展时向您提供反馈。

    B.R.

    Sal

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

    您好 Sal、

     

    MCAL 团队是否对此问题进行了任何更新?

     

    我们还将在最后检查问题、并与您分享一些观察结果和疑问。

     

    请在下面找到寄存器的屏幕截图、以供您参考。

    • 正常运行期间寄存器的状态:传输工作时。

    • 停止执行时寄存器的状态。

    • 停止执行后重新运行代码期间寄存器的状态。

     

    我们尝试手动将 CANFD0_MCAN_CCCR.INIT 位更改为 0

    并将空闲对象计数“CCS Can_DriverObj.canTxMessageObj[0].freeHwObjectCount”值更改为可配置值。 变速箱再次启动。

     

    您能否解释一下当我们使用断点或简单中断命令停止执行时、为什么 CANFD0_MCAN_CCCR.CSR 和 CANFD0_MCAN_CCCR.INIT 位会发生变化?

     

    此致、

    Kiran

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

    尊敬的 Kiran:

    感谢您的提醒、目前团队没有意见。

    让我检查并与团队讨论。

    B.R.

    Sal

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

    您好 Sal、

    MCAL 团队是否对此问题进行了任何更新?

    B.R.

    Kiran

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

    尊敬的 Kiran:

    很抱歉晚回复。 这几天我是 OOO。

    检查  CANFD0_MCAN_CCCR.CSR 时、您能否检查以下寄存器值:

    请检查 MCANSS_CTRL.DBGSUSP_FREE 位、可能有些代码会将其设置为“0"。“。

    B.R.

    Sal

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

    您好 Sal、

     

    感谢您的答复。

    启用 MCANSS_CTRL.DBGSUSP_FREE 后问题会得到解决。 我们已对静态文件 (Can_Mcan) 进行了所需的更改

     

    在 Can_Mcan.c 文件的 can_mcanInit 函数中、代码启用 initParams->emulationEnable。

     

    但是、MCAN_EMU_ENABLE 的宏定义为 MCAN_MCANSS_CTRL_EMUEN_DISABLE。

     

     

    因此、位 MCANSS_CTRL.DBGSUSP_FREE 的值保持为零。

     

    我将宏定义更改为 MCAN_MCANSS_CTRL_EMUEN_ENABLE、然后使用中断命令测试了代码。 此问题不再存在。

    目前、我们将在我们这边实施这一变革 请告诉我们您将如何为我们提供此修复。

    您是要为我们提供启用/禁用 MCANSS_CTRL.DBGSUSP_FREE 位的配置参数、还是会在静态代码中默认启用它?

     

    此致、

    Kiran

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

    尊敬的 Kiran:

    感谢您的反馈。

    我将设置一个内部跟踪线程并进行修复。

    我将在这里向您更新任何进一步的评论。

    B.R.

    Sal

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

    尊敬的 Kiran:

    顺便说一下、是否有任何配置可以选择和设置  

    initParams->emulationEnable =(uint32_t) MCAN_EMU_DISABLE?

    据我所知、当启用调试仿真模式时、这意味着用户希望使用暂停模式、因此需要进行设置

    “DBGSUSP_FREE"为“为零。

    然后、看起来 MCAL 在这里具有正确的宏定义。

    B.R.

    Sal  

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

    您好 Sal、

    感谢您的回答。

    在当前配置中、没有用于启用或禁用调试挂起模式的参数。

    如果 MCAL 具有“DBGSUSP_FREE"的“的正确宏定义、
    然后、我认为静态代码中需要一些额外的实现、以在从停止状态恢复执行后重新启用 MCAN 时钟并将 MCAN 设置为正常模式。
    我们已经看到、当使用断点或简单的中断命令停止执行时、CANFD0_MCAN_CCCR.INIT 变为 1。

    B.R.
    Kiran

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

    您好 Sal、

    有关上述主题的任何更新。

    此致、

    Kiran

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

    尊敬的 Kiran:

    很抱歉、我是 OOO。

    我将在下周初查看。

    B.R.

    Sal

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

    尊敬的 Kiran:

    我得到内部团队确认、这将在下一个版本中修复。

    B.R.

    Sal

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

    尊敬的 Sal:

    感谢您的更新。 已注意到该修复计划在下一个版本中进行。  

    此致、

    Kiran