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.

[参考译文] TMS320F28062:SCI RXENA 被禁用(设置为0)-然而 SCIRXSTA 被更新为一个错误状态-我认为这是一个错误

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/640111/tms320f28062-sci-rxena-is-disabled-set-to-0---yet-scirxsta-is-updated-to-an-error-state---i-think-this-is-a-bug

器件型号:TMS320F28062

您好!

我在 F28062上看到了这个问题。

请参阅图片。   我已经收集了一些 SCI A 相关寄存器的值、我正在尝试实现一个半双工485系统。

这是从机软件、因此它主要接收消息。   收到消息后、我希望在通过 Tx 线路传输响应之前关闭 Rx。

从 pdf 中可以看出、我将 SCICTL1A 寄存器从35设置为34。   35 = 0x23 (位0是 RXENA、所以在这里它是打开的)。  34 = 0x22 (这里 RXENA 关闭)。   

但是、当 SCICTL1A 设置为34时、状态寄存器(SCIRXST)会更新以显示错误。  寄存器值从2变为178 (0x02变为0xB2)。

RMS320x2806x 控制器的技术参考手册读出、当 RXENA=0时、它"防止接收到的字符传输到 SCIRXEMU 和 SCIRXBUF 接收器缓冲器"。   它还指示 SCIRXST 寄存器"每次将一个完整的字符传输到接收器缓冲区(SCIRXEMU 和 SCIRXBUF)时、状态标志都会更新"。

这是固件中的错误吗?

这是我的代码中的错误吗?   如果我没有正确关闭 SCI Rx、请帮助我了解关闭 Rx 还需要做些什么、以便不会将错误写入状态寄存器。

注:我尝试插入图片和文件以说明我找到的内容。   我无法查看我是否在该帖子的预览中成功上传了我的图片。   如果图片未显示、我将尝试将其附加到响应。

谢谢!

e2e.ti.com/.../RxStatusUpdatedWhenRxIsNotEnabled.pdf

e2e.ti.com/.../RxStatusUpdatedWhenRxIsNotEnabled.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    安妮、
    如何确保在 SCIRX 处于传输过程中时不禁用它? 在 SW 的较高层上是否有任何其他同步机制?

    您是否还在引脚复用级别禁用 SCI RX 引脚(使引脚成为 GPIO 输入而不是将其配置为 SCIRX 引脚)?

    从 SCIRXSTA = 178 (B2)的值来看、似乎检测到了中断并且检测到了帧错误。 从 SCIRXENA 的描述中可以看到移位寄存器仍然在汇编字符。

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

    您好 Santosh -

    由于我们已经努力识别此问题一段时间、因此我们减少了应用代码并简化了通信总线另一侧的代码、因此这是一个非常简单的测试。   我正在处理的应用程序代码适用于系统中的"从器件"。  我们使用状态图来浏览接收、解析和响应消息的过程。

    我们使用两个不同的芯片来运行测试。  "主器件"芯片的代码非常简单。  当用户单击按钮时、它会发送一条6字节的消息。  消息以0x03结尾。   之后、在用户单击按钮之前、不会再发送额外的字节。  我们正在监控 Rx 和 Tx 线路、以验证是否未发送额外的字节。

    我的应用程序代码使用简单的状态图来控制接收、解析和响应任务。   一旦"从器件"接收到以0x03结尾的6个字节、并且我们已经从缓冲区中读取了所有字节、应用程序就会知道已接收到"消息结束"。   此时、它将 RXENA 设置为0。   由于发送消息的"主"代码非常简单、因此我们知道 RX 线上没有任何其他可能导致问题的东西。

    正如我在最初的帖子中简要提到的、我正在研究半双工485的实现方案。  我们使用的是 TI 485芯片 SN65176 B。 在发送响应之前、我必须设置 RE 和 DE 线路以在从器件的485芯片上传输。  当我们关闭接收电路时、Rx 线路变为低电平。  此时、我们看到寄存器中设置了 Rx 错误。   但是、这就是我们关闭 RXENA 位的原因。  我们知道、Rx 线路变为低电平将导致错误。  因此、我们禁用 Rx、这样当485芯片切换到 Tx 时、它不会注意 Rx 线路变为低电平。

    所以... 操作顺序为:

    1 -从器件被初始化以接收数据、主器件发送以0x03结尾的6个字节

    2 -从器件看到 Rx 缓冲器不为空、读取全部6个字节

    3 -当从器件看到0x03时、它会设置"消息结束"标志

    4 -从机禁用 RXENA 位

    5 -从器件将485芯片设置为发送- Rx 线路变为低电平(正如您在图中看到的、错误被设置)

    但是-根据《技术参考手册》、此时状态寄存器显然不应更新。  当 RXENA 位被关闭时、Rx 线路被保持在高电平并且 RX 队列为空。

    我们没有将 GPIO28设置回它的 GPIO 多路复用器设置、因为从技术参考中可以看出这是不必要的。  

    我们通过使用 SCICTL1A 重置 SCI (将其设置为0x03、然后返回0x23)暂时解决了这个问题、但再说一次... 除非我不理解技术参考、否则这不是必需的。

    我删除了原始图片中的一些数据、以便更轻松地识别问题。  这次我已经将整个图片与所有数据行连接起来、包括消息结束位、缓冲器空标志、传输标志等

    谢谢!

    e2e.ti.com/.../RxStatusUpdatedWhenRxIsNotEnabled_5F00_more.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    安妮、
    感谢您提供相关信息。 我现在对它的理解更好。

    从示波器图中可以看到、SCI RX 引脚变为低电平会导致 SCI 检测到错误、数据帧中的起始位为"0"。
    您是否可以尝试一件事情、更改 SCI RX 引脚多路复用器配置、使其在 SCI RXENA 关闭之前成为 GPIO 输入。

    此致
    Santosh Athuru