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.

[参考译文] TMS320F28035:SCI 中断驱动程序 SciaRegs.SCIRXST.bit.FE 错误

Guru**** 2603695 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/678422/tms320f28035-sci-interrupt-driver-sciaregs-scirxst-bit-fe-error

器件型号:TMS320F28035

您好!  

我已经为公司项目编写了随附的串行驱动程序、用于中断驱动的串行数据通信。

除以下情况外、驱动程序在加电、发送和接收我预期的数据后按预期工作。

当向应用的 RX 线路发送串行数据的外部器件发生意外断电并停止发送数据时、我的驱动程序会得到 一 个 SciaRegs.SCIRXST.bit.FE 故障(请参阅第576行)。

(这大概是因为 RX 线在一个字节的中间停止。)

根据数据表(SPRUGH1C 第29页)、当发生这种情况时、需要清除 SW 复位。

因此,我的应用程序再次调用 sci_drv_init()(第97行)以执行此操作。

但是、当外部串行数据源重新上电时、由于某种原因、串行外设永远不会再次触发接收中断功能(请参阅第839行)。

我无法确定出现此故障的原因。 我已经调试过、是的、外部数据源再次传输、并且字节在线路上。

我已调试串行驱动程序仍然能够向外发送字节。

我调试过串行驱动程序认为 RX 中断已启用(在 SCI Init 调用之后)。

我已经调试过、串行驱动程序从未在 SCI Init 调用之后使 Drv_Rx_ISR_Call_Ctr 递增。

因此、我对 RX 为什么在 SciaRegs.SCIRXST.bit.FE 之后停止工作以及使用 SCI Init 调用进行软件复位感到很损失。

如果有任何建议,我将不胜感激!

Neal O'Hara

e2e.ti.com/.../1732.sci_5F00_drv.ce2e.ti.com/.../4456.sci_5F00_drv.h

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

    请仔细检查软件复位后、RX 中断使能位启用的代码。 此外、请检查 SCI 接收器状态寄存器(SCIRXST)中的 SCI 接收器就绪标志(RXRDY 位)是否被置位。 接收器置位该位、如果 RX/BK INT ENA 位设置为1、则产生接收器中断。 请注意、RXRDY 位通过读取 SCIRXBUF 寄存器、有效的软件复位或系统复位清零。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    Ken 您好、

    '请仔细检查软件复位后、RX 中断使能位被启用的代码。'

    我将按照 SPRUGH1C 第21页的图表进行操作。
    我正在使用 FIFO、所以我在253行上启用 RXFFIENA、在165行上启用 SCIFFENA。

    "另外、请检查 SCI 接收器状态寄存器(SCIRXST)中的 SCI 接收器就绪标志(RXRDY 位)是否被置位。 "

    请注意、我正在使用 FIFO。
    根据 SPRUGH1C、这意味着 RXFFIL 应该触发 PIE 中断。
    在外部 RX 数据源关闭之前、这可以正常工作。
    我的问题是、尽管在外部 RX 数据源断电/上电后 RX 线上有字节、但 RXFFIL 永远不会再次触发中断。


    很抱歉、这似乎无法解决我的问题。

    当外部 RX 数据源异常粉末、导致 SciaRegs.SCIRXST.bit.FE 错误时、我正在寻找有关 SCI 外设导致问题(或如何调试)的建议、 即使在软件复位之后、RX 线上似乎也不会恢复运行(即使 TX 线仍然正常工作)?
    感谢您的任何建议、

    Neal O'Hara

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

    Neal、

    一些想法。

    • 复位后是否有任何错误标志?
      • 如果您在帧的中间复位 SCI 模块、您可以立即重新触发 FE。
    • 您的 RX 中断设置是否正确?
      • 很明显、在复位之前没有问题、但可能有一些代码单步执行配置。 我建议您验证 PIE 表以及完整的中断使能链。 (在第6.1.1节"中断操作序列"中进行了说明。 图76"概述:使用 PIE 块的中断复用"应该有所帮助)
    • SCI 复位时、是否正确确认了 RX 中断?
      • 如果您无法重新进入 ISR、则应始终检查它是否已正确确认。(如果我记住正确、则是 INT9)

    此致、
    Cody  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Cody、
    感谢您的建议。
    在第一个 FE 错误之后、SCI 寄存器中没有错误标志、但这可能是由于缺少 RX FIFO ISR 发生。
    我已经努力使 ISR 被堆叠、PIE 也被重置。
    不幸的是、这些变化本身并没有产生太大的影响。

    还有一个问题。 在 RX 总线仍然处于关闭状态时复位 RX 寄存器/ISR 与在总线恢复时执行它是否有区别?
    目前、我正在尝试前一种、但我正在努力在缺少数据时添加周期复位、以查看"总线再次活动"期间的刷新是否有效。

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

    Neal、

    在 RX 模块被禁用时复位 ISR 不应该是一个问题(只要 RX 标志被清除)。 复位 SCI 寄存器可能很重要、您要复位哪些寄存器?

    您能否在复位前后截取 SCI 配置寄存器的屏幕截图? 您可能忘记重新启用 RXENA 或其他功能了?

    此致、
    Cody  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    事实证明、一旦外部串行数据源再次通电、使用 SW Reset 重置串行驱动器是我们发现的正确设置接收中断的唯一方法。

    感谢大家的建议。