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.

[参考译文] TMS320C5517:关于 McBSP#39;s 数据读取寄存器挂起的问题

Guru**** 2914580 points

Other Parts Discussed in Thread: SPRC133

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/654853/tms320c5517-on-the-problem-of-mcbsp-s-data-read-register-hanging

器件型号:TMS320C5517
主题中讨论的其他器件:SPRC133

您好!

我面临着 McBSP 的 DRR 寄存器在 C5517挂起的问题。
我使用 C5517 EVM 和 CSL 库(SPRC133)重现了此问题。

在运行下面的 DLB 示例项目后、在使用 CCS 持续刷新 DRR 寄存器时、DRR 寄存器会不定期挂起。
我使用了一个附加文件、我修改了该文件以无限循环读取/写入。
e2e.ti.com/.../csl_5F00_mcbsp_5F00_internalLB.c

C:\ti\c55_lp\c55_CSL_3.08\ccs_v6.x_examples\McBSP\McBSP_InternalLB


除了下面的数字环路之外、这个问题也出现在示例项目中、因此它似乎是 C5517中固有的一个错误。

C:\ti\c55_lp\c55_CSL_3.08\ccs_v6.x_examples\McBSP\CSL_McBSP_Interrupt_example

您是否知道此问题的根本原因和解决方案?


此致、
H.U

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

    我已通知软件团队。 他们将直接在此处发布反馈。

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

    您好、H.U.U.、

    我能够再现您通过在 CCS 中启用 McBSP 寄存器的持续刷新报告的 McBSP 接收器问题。 通过在持续刷新 McBSP 寄存器的同时运行您提供的程序几秒钟后停止执行、我观察到接收器 DRRL 和 DRRU 寄存器不再更新。 此外、在问题开始发生后、我观察到接收移位寄存器(RSR)满状态被设定为1 (正常工作时为0)、并且接收器就绪状态位被设定为1 (正常工作时为0 -执行被一个断点暂停)。

    但是、我能够通过两种方式防止此问题发生...

    1)我在 McBSP_write32 ()上保留了一个断点、并运行到该断点(在每个断点之前只执行一个循环迭代。 在这种情况下、我没有观察到任何接收器锁定。 已启用连续刷新。

    2) 2)我禁用了 McASP 寄存器的持续刷新、并在没有启用任何断点的情况下运行了几秒钟。 之后、接收器仍在内部回送模式下从发送器接收数据。

    JTAG 仿真具有侵入性、可能会破坏 McBSP 和 I2S 等流外设。 根本原因可能与 JTAG 仿真器读取 McBSP 寄存器和清零 RRDY 位相关、然后软件才能检测并对其执行操作。 通常、当 CPU 或 DMA 控制器读取 DRR 时、RRDY 被停用... 请参阅第8.2.6.1节" TRM 的接收操作"中的机制。

    TRM 有一个标题为8.2.17仿真注意事项的部分、讨论了两种 McBSP 仿真模式的使用:软停止和自由运行。 在软停止中、当一个仿真挂起事件发生时、发送器在当前字完成后停止。 接收器不受影响。 在自由运行模式下、当一个仿真挂起事件发生时、发送器和接收器继续运行。

    我尝试单独启用每种模式、但在运行内部环回测试而没有断点的情况下持续刷新 McBSP 寄存器时、仍然会出现上述接收器问题。

    除了寄存器持续刷新之外、客户是否遇到过任何 McBSP 接收器问题?

    使用 McBSP 时、我会避免使用 CCS 的持续刷新功能。 相反、我会使用运行时软件调试技术、例如将数据记录在缓冲区中、以便在暂停执行(在断点处)时可以使用 CCS 回读。

    请告诉我。

    此致、
    标记

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

    Mark、您好!

    感谢你的答复。

    即使客户电路板是独立运行的(当然不使用 JTAG)、也会发生此问题。
    在客户系统中、DSP 内核以 McBSP 的接收中断读取接收到的数据作为正常操作。
    但是、在某些时间段内、不必要的接收数据被输入到其系统中的 McBSP 中。
    在此期间、McBSP 的接收中断被禁用、接收到的数据被丢弃、然后在主循环处理期间、DRR 寄存器始终被读取、以便执行状态检查和虚拟读取。
    我们认为、由于此处 DRR 寄存器的读取时间不取决于接收中断、因此可以认为读取和写入访问与使用连续刷新案例同时发生。

    换言之、这个问题在不使用持续刷新的情况下发生、并且取决于 McBSP 的用例。
    我们认为 DRR 寄存器挂起是一个严重缺陷。
    请阐明此问题的根本原因、并提供解决方法、并在文档中进一步指定。
    因为、如果这个问题出现、正常的错误处理将不会解决这个问题、并且需要 McBSP 模块复位。

    此致、
    H.U

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

    H.U-San、您好!

    我将此问题的解决方案发布到 E2E、供其他人查看...

    McBSP DRRU/L 寄存器在 McBSP:RRDY 标志被置位前不得被读取。

    正确的序列:检查 SPCR 中的 RRDY 标志、如果设置为1、则读取数据接收寄存器(DRR)。 读取 DRRU/L 寄存器会清除 RRDY 标志。

    TRM 8.2.6 McBSP 标准操作中记录了 McBSP 的推荐用法:

    此致、
    标记