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.

[参考译文] TL16C752D:我尝试通过读取 LSR 来使用 RX/TX FIFO。

Guru**** 2392545 points
Other Parts Discussed in Thread: TL16C752D

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/769323/tl16c752d-i-am-trying-to-use-the-rx-tx-fifos-by-reading-the-lsr

器件型号:TL16C752D

您好!

我正在尝试 使用轮询功能来使用 TL16C752D RX/TX FIFO。 我只读取 THR/RHR 状态的 LSR。 RX 部分工作正常。 它处于 TX 模式、我在该模式下观察 LSR 空。 目前、FIFO 水平设置为0、似乎工作了一段时间、然后当 TX FIFO 满时、FIFO 看起来会卡住。

我是否应该轮询 LSR 以外的内容?

也许我应该设置中断(我们没有连接中断)并轮询 IIR?

我已将 UART 设置为以115200波特运行、并且正在将该 UART 与独立处理器板(兔)上的 UART 之间的292字节数据包进行流处理。 它可以正常运行一段时间、但随后我开始超时

从兔子那里。

社区对此有什么想法?

感谢您的帮助、

Reif Heck

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

    当 TX FIFO 已满时、写入 THR 的一些字符将丢失-这是否会导致您的应用程序中的超时?

    如果您给 FIFO 一些时间来传输它的所有数据、那么它最终是否会变空? 如果是、正常运行是否恢复? (如果不是、您需要做些什么来清除问题并解决超时问题?)

    正如您所建议的、在尝试了解问题的性质时、启用中断和轮询 IIR 可能会提供一些有用的数据。

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


    "我是否应该轮询 LSR 以外的内容?"
    您不需要、因为 LSR 位0应告诉您数据何时准备好读取、位5告诉您 THR 为空。

    您可以尝试的另一种方法是在 FCR 中设置 TX/RX 触发电平、然后轮询 FIFORdy 寄存器。

    "也许我应该设置中断(我们没有连接中断)并轮询 IIR?"
    如果您设置 INT、那么您实际上可以检查器件 INT 引脚的逻辑电平、而不是轮询 IIR、除非您都没有 GPI。

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

    尊敬的 Max:

    感谢你的答复。

    我忘记了说、我使用 XON1 (0x7E)/XOFF1 (0x7F)作为接收端的开始和结束数据包分隔符。 如果我启用触发级别设置为0的 Rx FIFO、我能够全天从发送端接收数据包、而不会出现任何问题。 最大接收数据包大小为20字节。

    最大/最小 TX 数据包大小为292/14字节。 因此、我将设置 AFR 寄存器中的485EN、485LG 和 RCVEN 位。 发送大于60字节的响应时、我只使用485LG 位。

    小于60字节的数据包大小的流处理没有问题。 最终超时的是292字节数据包。

    我可以尝试启用并轮询 IIR。

    再次感谢、

    参考

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

    我只是想尝试您的替代方法。 我将让您和 Max 知道结果如何。

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

    最大值、

    根据数据表、TxReady/RxReady 信号是否仅适用于 DMA? 我将它们连接到处理器 GPIO 引脚。 时序图显示了在 FIFO/非 FIFO 模式期间的这些信号。

    谢谢!

    参考

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

    您好、如果

    您应该能够为您的应用使用 TXRDY'/RXRDY'线(根据之前的帖子)来检查 TX/RX FIFO 是否已到达其触发点。 设置 DMA=0只会使 TXRDY/RXRDY 在一个字节上触发(类似于先前所做的仅轮询 LSR)、而 DMA=1只会使 TXRDY/RXRDY 引脚在 FCR 中设置的触发电平上触发。

    谢谢、

    -Bobby

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

    谢谢 Bobby、

    数据表对这一点有点困惑。 那么、为了使用这个、DMA = 1允许我为 FIFO 使用 TxReady/RxReady 信号? 我一定会尝试一下。

    再次感谢、

    参考

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

    您好、Bobby、

    我决定在没有 FIFO 或中断的情况下尝试它、只是为了了解它的工作原理。

    我的状态机中的步骤为:

    • RX 数据包状态:当 nRxReady 变为低电平时、我读取数据、直到看到结束分隔符(0x7F)。 我也会发送此消息并转至验证数据包状态
    • 验证数据包状态:我验证接收到的数据包并获取响应数据包。 然后、我转到 Tx 数据包状态。
    • TX 数据包状态:当 nTxReady 变为低电平时、我发送数据、直到看到结束分隔符(0x7F)。 我也发送这个。 然后、我返回到 RX 数据包状态

    我的问题是:

    • 如果我没有启用中断或 FIFO、能否使用 nTxReady/nRxReady。 我看不到任何其他方法来告诉我是否可以接收/发送?
    • 我是否必须手动控制收发器的 DTR?
    • 是否需要启用 RCVEN 和485EN 才能执行此操作?

    谢谢 Bobby、

    参考

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

    尊敬的 Max:

    我决定在没有 FIFO 或中断的情况下尝试它、只是为了了解它的工作原理。

    我的状态机中的步骤为:

    • RX 数据包状态:当 nRxReady 变为低电平时、我读取数据、直到看到结束分隔符(0x7F)。 我也会发送此消息并转至验证数据包状态
    • 验证数据包状态:我验证接收到的数据包并获取响应数据包。 然后、我转到 Tx 数据包状态。
    • TX 数据包状态:当 nTxReady 变为低电平时、我发送数据、直到看到结束分隔符(0x7F)。 我也发送这个。 然后、我返回到 RX 数据包状态

    我的问题是:

    • 如果我没有启用中断或 FIFO、能否使用 nTxReady/nRxReady。 我看不到任何其他方法来告诉我是否可以接收/发送?
    • 我是否必须手动控制收发器的 DTR?
    • 是否需要启用 RCVEN 和485EN 才能执行此操作?

    谢谢 Max、

    参考

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

    "如果我没有启用中断或 FIFO、能否使用 nTxReady/nRxReady。 我看不到任何其他方法来告诉我是否可以接收/发送?"
    是的、无论您是设置中断还是设置 FIFO、TXRDY 和 RXRDY 引脚都是输出(基本上、无论您是否希望中断、它们都会切换)。

    根据您描述的步骤、传输时需要做的是检查 TXRDY 是否为低电平:如果为低电平、则可以发送一个字节的数据。 如果 TXRDY 位为高电平、则表示需要等待字节完成传输。 重复此操作、直到发送结束分隔符0x7F。 (无法等待 TXRDY 变为低电平、意味着您可能会覆盖先前事务中的 THR 数据)

    对于 RXRDY、只需在 RXRDY 为低电平时读取。

    "我是否必须手动控制收发器的 DTR?"
    是的、您需要对 MCR 位0执行写操作以控制 DTR 线路。

    "是否需要启用 RCVEN 和485EN 才能执行此操作?"

    我假设当您说"这"时、它是控制 DTR 的参考。 如果是这样、则无需 RCVEN 或485EN 即可手动控制 DTR。

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

    您好、Bobby、

    感谢您的回复!

    很抱歉、我在数据表中遇到困难。

    我一直在尝试使 RX/TX 在没有 FIFO 或中断的情况下工作。 我想回到下面的基础部分:

    我的状态机中的步骤为:

    • RX 数据包状态:当 nRxReady 变为低电平时、我读取数据、直到看到结束分隔符(0x7F)。 我也会发送此消息并转至验证数据包状态
    • 验证数据包状态:我验证接收到的数据包并获取响应数据包。 然后、我转到 Tx 数据包状态。
    • TX 数据包状态:当 nTxReady 变为低电平时、我发送数据、直到看到结束分隔符(0x7F)。 我也发送这个。 然后、我返回到 RX 数据包状态

    我的问题是:

    • 如果我没有启用中断或 FIFO、能否使用 nTxReady/nRxReady。 我看不到任何其他方法来告诉我是否可以接收/发送?
    • 我是否需要任何使能功能来使用 nTxReady/nRxReady (如 RCVEN 和485EN)?
    • 在本例中、我是否必须手动控制收发器的 DTR? 我知道当485EN 启用时、DTR 会自动受到控制。

    这让我感到疯狂、我已经仔细检查了数据表以了解这一点。 也许您可以指出可能会触发 AHA 的问题!

    谢谢 Bobby、

    参考

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

    "Rx 数据包状态:当 nRxReady 变为低电平时、我读取数据、直到看到结束分隔符(0x7F)。 我也会发送此消息并转至验证数据包状态
    验证数据包状态:我验证接收到的数据包并获取响应数据包。 然后、我转到 Tx 数据包状态
    "
    我在这里看不到任何问题。

    "TX 数据包状态:当 nTxReady 变为低电平时、我发送数据、直到看到结束分隔符(0x7F)。 我也发送这个。 然后、我返回到 RX 数据包状态"
    每次发送一个字节的数据时、您都需要检查 TXRDY。 基本上、当 TXRDY 位为低电平时、您可以发送一个字节的数据、因为在设置中、您正在禁用 FIFO。 TXRDY 变为低电平后、您可以发送下一个数据字节(每次将一个字节加载到 THR 中、TXRDY 将变为高电平、您需要等待它再次变为低电平)。

    只要您不尝试一次发送所有数据(等待 TXRDY 变为低电平、然后再发送另一个字节)、您的 Tx 数据包状态就会很好、因为您可能会意外溢出 THR。

    "如果我没有启用中断或 FIFO、能否使用 nTxReady/nRxReady。 我看不到任何其他方法来告诉我是否可以接收/发送?"
    是的。

    "我是否需要任何使能功能来使用 nTxReady/nRxReady (如 RCVEN 和485EN)?"


    "在本例中、我是否必须手动控制收发器的 DTR? 我知道、当485EN 启用时、DTR 会自动受到控制。"
    是的、如果接收器正在查看 DTR 线路、则可以。 如果 DTR 是接收器不需要查看的内容、则无需设置 DTR。 (我是说无需设置 DTR 即可发送或接收数据、与 TXRDY 和 RXRDY 无关)

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

    谢谢 Bobby、

    nDTR 线路仅控制收发器的 TX (DE)侧。 收发器的 RX (RE)侧接地(始终接通)。

    在我的 RxData/TxData 函数中、在接收/传输字节之前检查 rxReady/txReady。

    出于某种原因、在传输响应后、RHR 中似乎仍然有一个字节。 我是否需要读取 RHR 来清除这一点或清除 RxFifo?

    或者、您是否建议使用 nDTR 控制收发器的 DE/RE?

    谢谢、

    参考

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

    "出于某种原因、在我传输响应后、我的 RHR 中似乎仍然有一个字节。"
    您是否有意外启用的回送功能? (MCR 位4)

    "我是否需要读取 RHR 来清除此问题或清除 RxFifo?"
    发送一个位后会存储哪些数据?

    "您是否建议使用 nDTR 控制收发器的 DE/RE?"
    这只是首选方法、我会先尝试使用 TXRDY 和 RXRDY、如果您不会遇到任何凸点、只需使用此路由即可、否则您需要手动设置 DTR、这将需要额外的时间。

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

    您好、Bobby、

    未启用回路。 我检查以确保它在初始化期间为0。 我已经测试了环路、它的工作方式与斜坡类似。

    我现在在接收函数中进行检查、以查看是否还有字节。 我还没有测试过它。

    此系统的工作方式为:

    • 有一个传感器和一个控制器通过 RS485进行通信
    • 传感器仅坐在并等待来自控制器的命令数据包
    • 控制器发送命令数据包。
    • 传感器接收命令数据包并进行验证。
    • 验证命令数据包后、传感器会创建响应数据包。
    • 响应数据包被发送到控制器。
    • 控制器接收响应数据包并检查其是否正常。 如果是、控制器将响应。
    • 控制器向传感器发送另一个命令数据包。

    我看到的问题是、除非我设置了485EN 和 RCVEN、否则在第一个字节后我永远不会看到 rxReady。

    TI16C752D 在启动时初始化如下:

    EFR = 0x00

    IER = 0x00

    MCR = 0x00

    FCR = 0x00

    LCR = 0x03 (正常运行)

    AFR = 0x14 (485EN 和 RCVEN = 1)

    再次感谢 Bobby 的帮助、

    参考

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

    我使用此器件已经有一段时间了、因此我必须尝试查看是否可以在明天设置并运行、以便在这里进行一些测试并提供更好的支持。

    "我看到的问题是、除非我设置了485EN 和 RCVEN、否则在第一个字节后我永远不会看到 rxReady。"
    我本来可以在接收到第一个字节后宣誓触发 RXRDY。 我明天将对此进行实验。

    我将复制您的初始化设置、看看我是否得到相同的设置。

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

    谢谢 Bobby、

    我真的很感谢。 您可能无法显示我所做的错误。 ;~)

    再次感谢、

    参考

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

    希望在此处提供更新。 我的一位同事目前有我的电源、我正在努力在下午恢复供电。 今天下午4点半之前我还一直在开会、所以我在下午4点半之前就不能玩这个游戏了。 今天我将进行测试、并在我离开之前返回给您。

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

    谢谢 Bobby、

    我真的很感谢。

    参考

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

    出于某种原因、当向 THR 发送字节时、我甚至无法使 TXRDY 变为高电平。 一直在尝试调试它大约一个小时、但没有结果。 我将要求我们的设计团队了解哪些要求不符合切换 TXRDY 和 RXRDY 的要求。

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

    这是一段时间以来一直让我疯狂的事情。 ;~)

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

    您好、如果

    我终于能让 TXRDY 切换了… 因此、似乎有一项要求、即必须执行 IER 读取(我尚未尝试其他寄存器)、然后当您向 THR 发送数据时、TXRDY 将进行切换。

    我的步骤:

    初始化寄存器后:

              DEFAULT_IER = 0x00、

              DEFAULT_FCR = 0x00、

              DEFAULT_MCR = 0x00、

              DEFAULT_LCR = 0x07;

              DEFAULT_AFR = 0x14;

    然后我读取寄存器 IER (其0x00)。

    之后、我再次发送0xAA 两次:

    IOW 为紫色、我使用它来触发 o 示波器。 我看到 TXRDY 在这之后切换。 在不读取 IER 的情况下、TXRDY 保持锁存状态。

    谢谢、

    -Bobby

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

    您好、Bobby、

    哇! 我甚至不会猜到这一点! 我一直在仔细检查 TXRDY/RXRDY 行(我已将这些行连接到处理器上的 GPIO 引脚并读取它们)、并且看到 TXRDY 一直被锁存。

    这是一个很好的发现!

    因此、我将按如下方式初始化寄存器:

    DEFAULT_IER = 0x00、

    DEFAULT_FCR = 0x00、

    DEFAULT_MCR = 0x00、

    DEFAULT_LCR = 0x07;

    DEFAULT_AFR = 0x14;

    读取 TXRDY

    如果置位、则向 THR 写入一个字节

    然后读取寄存器 IER = 0x00

    然后读取 TXRDY

    如果置位、则向 THR 写入一个字节

    直到完成最后一个字节的发送

    我会尝试一下、并让您知道它是如何工作的。

    谢谢 Bobby、

    参考

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

    在初始化所有内容后、您可能应该执行 IER 的读取。

    之后、我认为您不需要再次阅读它。

    您应该能够从此处执行 TXRDY 检查并发送数据。

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

    谢谢 Bobby、

    甚至更好!

    我会尝试并告知您。

    参考

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

    现在、我将按如下方式初始化寄存器:

    DEFAULT_IER = 0x00、

    DEFAULT_FCR = 0x07、//启用和清除 FIFO

    DEFAULT_EFR = 0x02、// RX 比较 XON1 (0x7E)和 XOFF1 (0x7F)

    DEFAULT_MCR = 0x00、

    DEFAULT_LCR = 0x03;

    DEFAULT_AFR = 0x14;

    然后读取寄存器 IER = 0x00

    现在、我尝试以下操作:

    我正在传输一个包含39字节的数据包、其中包含起始(0x7E)和结束(0x7F)定界符、以响应控制器处理器发送的命令数据包(最大20字节)。 Command 数据包还具有相同的起始和结束分隔符。

    在接收时、UART 在看到起始定界符时开始接收、在看到结束定界符时结束。我在 RXRDY 上检索每个字节。 这种方法全天都能正常工作。

    然后、我处理该数据包、创建响应数据包、并在检查 TXRDY 之后发送每个字节。

    这一操作会持续一段时间、然后 TXRDY 将锁定为高电平或低电平、并且只能在我重新启动 UART 时复位。 我将使用 Saleae 逻辑分析仪查看这些信号。

    我只是使用 RXRDY/TXRDY 来控制接收和发送。

    是否有任何方法可以复位 TXRDY?

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

    '这一操作会持续一段时间、然后 TXRDY 将锁定为高电平或低电平、并且只有在我重新启动 UART 时才能复位。'
    您知道是什么触发了这种情况吗? 如果我能够可靠地使 TXRDY 锁存、那么我应该能够尝试查看是否有解决方法。 一个猜测是器件由于某种原因进入睡眠模式。 当您看到 TXRDY 锁存器时、是否能够读取 LCR (校验位6)?

    您可以尝试的另一项操作是清除 FIFO (FCR 位1和2)。

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

    您好、Bobby、

    在成功接收数据包并发送数据包后、我将清除 FIFO。

    LCR 的位6未置位。

    我让所有这些在状态机 中以连续 while 循环运行。 它由三个状态组成。 它们如下:

    • 接收命令数据包。 等待命令数据包。 使用 XON1 (0x7E)和 XOFF1 (0x7F)来控制接收。 转至验证数据包。 状态
    • 检验数据包。 验证命令数据包并创建响应数据包。 转至状态发送响应数据包
    • 发送响应数据包。 继续传输数据包、并在发送结束分隔符(0x7F)后停止。 返回到接收命令包。

    根据数据包大小、我成功运行了一段时间。

    我看到的是、我们陷入了第一个或最后一个状态。

    当我们卡在第一个状态时、它会一直等待 RXRDY。 我正在打印 LSR、看到它一直提供0x20、这意味着没有可用的 RX 数据、THR 为空(不是 TSR)

    当我们一直处于等待 TXRDY 的最后一个状态时、我将打印 LSR、它为0x01、表示 RX 数据可用。

    我的清零 FIFO 函数可让您选择要清零的 TX、RX 或两个 FIFO。

    我是否应该用它来清除 FIFO 来复位 TX/RX 就绪?

    谢谢 Bobby、

    参考

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

    您好、如果

    您每次发送的数据包是否相同? (例如、发送20个字节、表示第一个事务为0xAA、第二个事务为20个字节)

    您是否大致有时间看到这种情况发生? (例如10小时后)

    "我是否应该使用该位来清除 FIFO 以复位 TX/RX 就绪?"

    我的想法是、这应该会重置 RDY 引脚、但我还没有经历过这种行为、因此您可能需要对此进行验证。

    "当我们卡在第一个状态时、它会一直等待 RXRDY。 我正在打印 LSR、并看到它一直提供0x20、这意味着 RX 数据不可用、THR 为空(不是 TSR)"

    -您是否已检查 IIR? 可能还有其他意想不到的事情发生了。

    您的时钟频率和波特率是多少?

    我想知道我是否可以在我的结尾重新创建这个 如果我能弄清楚如何忠实地重现这个问题、我们就能弄清楚如何解决这个问题、也可以让我们的设计工程师运行仿真来指出确切的问题。

    谢谢、

    -Bobby

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

    您好、Bobby、

    我正在使用两个数据包:

    1. 接收(命令)数据包为13字节、包括起始(0x7E)和结束定界符(0x7F)。 它包含:
      • 命令长度
      • 命令
      • 数据
      • CRC
    1. 发送(响应)数据包为39字节、包括起始(0x7E)和结束定界符(0x7F)。 它包含:
      • 响应长度
      • 命令响应
      • 数据
      • CRC
    我将 XON1 (0x7E) XOFF1 (0x7F)用于接收。 如果我只是继续将数据从控制器发送到传感器上的 UART、则从不会看到 RXRDY 锁存为高电平或低电平
    可以接收一整天的数据。
    我使 FCR = 0x01 (FIFO 被启用)。 我在初始化时清除 FIFO。
    发送时、在发送一个字节之前、我检查 TXRDY 线。 传输完成后、我检查 LSR 以查看 THR 和 TSR 是否为空。 否则、我将清除 TX FIFO
    TXRDY 线将在2到5分钟内锁定高电平或低电平。
    由于我没有中断、因此我没有检查 IIR。 我会尝试这个。
    我们使用的时钟频率为18.432MHz
    波特率设置为115200 DLL = 0x0A DLH = 0x00 (我用逻辑分析仪检查了这一点)
    当我观察到正在接收/传输的数据时、一切正常、然后 TXRDY 将锁定为高电平或低电平。
    有时、当我清除 TX FIFO 时、LSR = 0x20。 我再次尝试清除 TX FIFO并且 LSR 仍然= 0x20。
     
    读取 LSR 而不是 TXRDY 似乎更可靠?
    感谢 Bobby 的帮助、
    参考
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bobby、

    我还忘记了、每16毫秒从控制器向传感器发送一次13字节命令数据包。

    参考

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

    感谢您提供更多信息。 我将尝试在下周进行一些设置、以运行一两天的代码、看看我是否可以锁存 TX/RX 就绪引脚。 我将在星期三/星期四向您介绍我的调查结果。 我怀疑这与导致这种情况的某种时间安排有关。

    根据您的经验、如果 TX/RX 就绪引脚被锁存、读取 LSR 似乎是更好的通信方法。

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

    谢谢 Bobby!

    我刚才在数据表中注意到的有关 FCR 设置的内容。

    我误读了位5:4是什么。 它们设置 TX FIFO 的触发级别。 如果我将这些位设置为00、则意味着 TX 触发电平设置为8个空格、而不是像 RX FIFO FCR 位7:6 (设置为00)那样设置为1个字符。 8个空格是否意味着8个字节? 如果是、这意味着当我尝试发送一个39字节响应数据包时、剩余1个空间(LSR = 0x20、这意味着 THR 为空、TSR 不为空)。 如果有8个空位需要填充、并且我有39个字节(39/8 = 4.875次通过 FIFO)、我是否应该发送一个虚拟字节(0x00)、使其通过 FIFO 40字节= 5次以将其清除? 还是使用清除 TX FIFO?

    参考

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

    "8个空格是否意味着8个字节?"
    是、但您是否使用 DMA 模式0 (FCR 位3设置为0)? 如果是这样、我希望这会将位5:4中设置的 TX 触发电平旁路为仅为1字节而不是8字节。

    "如果有8个空位需要填充"
    假设 DMA 模式设置为1。 因此、从有8个空间可填充以设置标志(TXRDY)的意义上讲、即使最后一个字节未被填充、它仍应通过 TXA 发送其他7个字节。 此设置基本上是一种始终指示 MCU 保持 TXRDY 为高电平以提高通信效率的方法(从不让 TX FIFO 低于8字节、但如果低于8字节、则填充 FIFO)。

    "我应该发送一个虚拟字节(0x00)、使其成为40字节= 5倍的 FIFO 来将其清除吗? 还是使用清除 TX FIFO?"
    这不是必需的。

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

    我明白你的意思。 但是、当我在观看 TXRDY 时遇到卡滞、我正在打印 LSR、它卡在0x20、这意味着 TSR 不为空。 我尝试清除 TX FIFO、但它不会更改为 LSR = 0x60、这意味着两者都是空的。

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

    您说数据卡滞、在这种情况下、TSR (一个将并行转换为串行的数字块)不执行其任务、因此没有数据被移入 TXA 线。

    这意味着在某个地方发生干扰。 我能想到的唯一可能导致这种情况的原因是时钟(XTAL1)停止。 当您看到此错误弹出时、您能否探测 XTAL 1并查看时钟是否卡住?

    "LSR = 0x60意味着两个都是空的、对吧?"
    正确、这就是我们应该看到的内容。 现在、我想发生某种错误、因此我有兴趣看看我是否可以重新创建这种错误。

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

    您好、Bobby、

    当我看到错误时、XTAL1不会停止。

    我可以全天接收数据包、而不会出现干扰。 RXRDY 的工作方式无可挑剔。

    当我们一直等待 TXRDY 时、我看到的是 LSR = 0x20、即使我清除了其中一个或两个 FIFO。

    奇怪!

    参考

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

    "我可以全天接收数据包、而不会出现任何干扰。 RXRDY 完美无瑕地工作。"
    只是为了确认、您说如果 TXRDY 已锁存、但您以任何方式发送数据(执行对 THR 的并行写入)、您仍会接收数据(您可以通过 TXA 传输)?

    此外、当我上周早些时候处理 TXRDY 引脚时、我还记得对未锁存的 IER 执行读取操作、我的 TXRDY 引脚未锁存。 如果您对 IER 执行其他读取操作、TXRDY 引脚是否解除锁定?

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

    否 我要做的就是将命令数据包从控制器发送到传感器 TI16C752D UART。 传感器上的状态机仅处于接收模式。 因此、我将仅使用 RXRDY 线进行该实验。 因此传感器 TI16C752D UART 可以永远接收来自控制器的数据包,并且始终接收到 Amen 的数据包;~)

    我尝试读取 IER 以查看它是否有助于 TXRDY。

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

    我刚刚尝试了两个实验。

    1.我只是在接收和验证命令数据包(13个字节)。 如果正常、我会创建一个响应数据包。 我在状态机中执行以下两项操作:

    接收命令数据包。
    检验命令包
    创建响应数据包。

    我只是不停地这样做、没有任何延迟或错误。

    2.我只是在发送一个响应数据包(39字节)。 控制器不会仅通过传输和使用逻辑分析仪查看它来接收它。

    我不断地这样做、没有任何延迟或错误、在我停止之前、它运行了一个小时。

    收发器 NRE 线路接地、因此始终处于接收模式。

    收发器 DE 线路由 DTRA 线路切换。

    我的问题是:

    由于 NRE 线路一直被启用、我们是否有可能在 RHR 中看到一个字节的噪声(LSR[0]= 1)? 这会使 TXRDY 变得混乱吗?

    当 LSR[0]= 1时、我将尝试读取该字节、并查看它是否是一个好字节。

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

    您好、Bobby、

    希望你有一个美好的周末和假期!

    昨天、2018年2月18日、我试图找出一种禁用接收的方法、而不是使用 nDTRA 线路来控制 RS485收发器的 NRE 和 DE 控制。

    然后、我查看了 AFR 的 RCVEN 位。 那么、我现在要做的是:

    • 在 RX 命令数据包状态中:
      • 一旦 Rx 数据包完成、设置 AFR 位 RCVEN = 0
      • 清除 RX FIFO
      • 转至验证和处理 Rx 数据包状态
    • 验证和处理 Rx 数据包状态
      • 如果成功、转至 TX 数据包状态
    • 在 TX 响应数据包状态中:
      • TX 直至完成
      • 设置 AFR 位 RCVEN = 1
      • 清除 TX FIFO
      • 返回到 RX 数据包状态

    我正在使用13字节 RX 命令数据包和39字节 TX 数据包成功完成此操作、它可以在超时很少的情况下永久运行。

    现在、我尝试使259字节的 TX 响应数据包可靠工作。

    我将对 RX 命令数据包使用上述方法。

    对于 TX 响应数据包、我将尝试以下操作:

    • 在“Verify and Process Command Packet (验证和处理命令包)”中,执行以下操作:
      • 检查响应长度
      • 如果响应长度大于 FIFO 大小、则设置 AFR 位485LG = 1 (用于发送大于 FIFO 大小的数据包)
      • 在 TXRDY 未就绪前、先填充 FIFO。
      • 等待 TXRDY 信号就绪
      • 执行此操作、直到剩余要发送的字节数< FIFO 大小
      • 设置 AFR 位485LG = 0
      • 发送、直至完成
      • 设置 AFR 位 RCVEN = 1
      • 清除 TX FIFO
      • 返回到 RX 命令数据包状态

    这是否是正确的方法?

    谢谢 Bobby、

    参考

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

    很高兴听到您的事情进展顺利。

    "这看起来是正确的方法吗?"
    设置 AFR 位485LG = 0
    发送、直至完成
    设置 AFR 位 RCVEN = 1
    >>我建议您在此添加一个小延迟,以确保在发送完所有内容之前不清除 TX FIFO <<
    清除 TX FIFO
    返回到 RX 命令数据包状态

    除此之外、我想说您的流程看起来不错。

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

    您好、Bobby、

    我现在尝试使用 TX FIFO。

    响应数据包大小现在为259个字节

    SO 259/60 = 4 (60字节块)

    4 * 60 = 240、259 - 240 =剩余19字节

    这意味着、当达到60字节触发限值时、我应该看到 nTXRDY 变为无效(高电平)?

    在逻辑分析仪中、我看到 nTXRDY 仅在17个字节后变为无效(高电平)、 然后在发送其他43个字节后变为低电平。 对于4 60个字节的块、这会发生4次、并且它也会传输其他19个字节。

    我看到的问题是、即使 LSR 显示 THR 和 TSR 都为空、数据包的最后3个字节仍被切断。 这种情况每次都会发生。

    由于这是一个大型块、我将寄存器设置如下:

    触发电平被设定为 TLR (0x0F)中的60字节。 我不使用 FCR 选择触发电平。

    AFR 位485EN = 1

    AFR 位485LG = 1

    AFR 位 RCVEN = 0

    FCR 位 DMA 模式= 1

    在设置之前、我一直等到我认为最后一个字节已经传输:

    AFR 位485LG = 0

    AFR 位 RCVEN = 1

    FCR 位 DMA 模式= 0

    无论我尝试什么、最后3个字节仍然被切断。

    对我错过的内容有什么想法吗?

    谢谢 Bobby、

    参考

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

    您好、如果

    "这意味着、当达到60字节触发限值时、我应该看到 nTXRDY 变为无效(高电平)?"

    如果您将 DMA 模式设置为1 (FCR 位3 = 1)、并且 TX 触发电平都设置为1 (FCR 位4和5 = 1)、则根据表8、在这种情况下、触发限值实际上将是56而不是60。 (未意识到您使用的是 TLR 寄存器)假设 TLR 不为零、这是正确的。

    "在逻辑分析仪中、仅17个字节后、我会看到 nTXRDY 变为无效(高电平)"

    是否确定将 TLR 设置为"F"? (位3:0 = 1111?) 确保您读取了 TLR、以确保您读取的值是您写入的值。 (该寄存器既是写寄存器、也是读寄存器)

    "对我遗漏的内容有什么想法吗?"

    它看起来不像是您错过了任何东西。

    如何验证最后3个字节未被传输? 您是否仅查看接收器、或者是否查看 TXA 线路是否正在正确传输? 我们应该尝试验证问题来自哪里(传输或接收)?

    谢谢、

    -Bobby

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

    您好、Bobby、

    是的、我是正、TLR 设置为0x0F。 我具有在初始化后读取所有 TL16C752D 寄存器的诊断功能、它们确实已正确设置。

    我正在使用逻辑分析仪查看 TX/RX 线以及 nTXRDY/nRXRDY 线。

    在 TX 数据包的末尾、nTXRDY 线保持低电平、并且数据包的最后三个字节丢失。 在我开始发送另一个数据包之前、nTXRDY 永远不会变为高电平。

    TXA 和 RXA 线路都在正确传输/接收、因为我可以通过逻辑分析仪看到数据包。

    为了使用60字节的 TX FIFO、DMA_MODE 应该等于1还是0?

    我很困惑!

    谢谢 Bobby、

    参考

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

    我以前从未在该器件中使用过 TLR 寄存器、我想我要为您提供支持、我需要了解我是否可以执行您正在执行的相同操作并获得相同的结果。 我明天会留出一些时间来查看是否可以重现您的结果。 (我也会尝试发送259个字节)。

    我怀疑通过将 TLR 寄存器编程为非零值、我们会在 TXRDY/RXRDY 信号方面取代 FCR 寄存器(基本上 DMA 模式此时无关紧要、但我对此并不是100%确定)。

    如果我能获得同样的结果、我将在明天一天结束时通知您。 此外、您能否提供初始化器件时所做的工作? (这样我就可以尝试准确地复制它)

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

    您好、Bobby、

    我想我可能已经找到了神奇的组合!

    对于一个小数据包(在本例中为39字节)、我设置:

    • AFR 位485LG = 0
    • FCR 位 DMAMode = 0

    对于一个大数据包(在本例中为259个字节)、我设置了:

    • AFR 位485LG = 1
    • FCR 位 DMAMode = 1

    看到结束分隔符(0x7F)后、我将执行以下操作:

    • 读取 LSR。
    • 如果 LSR = 0x60 (TSR 和 THR 为空)
      • 设置 AFR 位 RCVEN = 1
      • 返回到 RX 命令数据包状态
    • 如果 LSR!= 0x60
      • 转到等待 LSR = 0x60状态
      • 当 LSR = 0x60时
        • 设置 AFR 位 RCVEN = 1
        • 返回到 RX 命令数据包状态
    当我使用上述方法时、数据包不会被截断
    这对您来说有道理吗?
    谢谢 Bobby、
    参考
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、如果

    "一旦我看到结束分隔符(0x7F)、我将执行以下操作:

    读取 LSR。
    如果 LSR = 0x60 (TSR 和 THR 为空)
    设置 AFR 位 RCVEN = 1
    返回到 RX 命令数据包状态
    如果 LSR!= 0x60
    转到等待 LSR = 0x60状态
    当 LSR = 0x60时
    设置 AFR 位 RCVEN = 1
    返回到 RX 命令数据包状态"
    这对我来说是有道理的。 通过将 LSR 设置为等于0x60、您可以确保最后的字节实际上是从 TSR 中生成的、并将其添加到 TXA 中、这样就不会丢失任何字节。 我猜之前没有这样做、因此最后3个字节可能已经被清除得太早了。

    不幸的是、我今天无法测试 UART (我的板上还有很多其他支持票)。 您似乎找到了适用于您的应用的程序。

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

    您好、Bobby、

    它看起来正在工作、因此感谢您的帮助。

    我相信我们可以解决这个问题。

    再次感谢您、

    参考