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.

[参考译文] LAUNCHXL-F280039C:SCIA 增强型 RXFIFO、RXBUFF 读取不会弹出 FIFO

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1616829/launchxl-f280039c-scia-enhanced-rxfifo-rxbuff-reads-do-not-pop-the-fifo

器件型号: LAUNCHXL-F280039C

您好团队:

使用 driverlib 阻塞 或非 FIFO 模式对 SCIA 接收器进行数天测试、快速和慢速数据速率 (115200 - 1200)。 出现相同的结果、在中断模式下、没有数据从 FIFO 弹出到接收缓冲区、或者在两个启动焊盘 (TXD) 之间的握手中针对选择数据字(“F")“)、(“L")“)、(“H")“)轮询 RX 缓冲区并将其放入 RXD。

然而、对于任何溢出、RX 缓冲器 8 位寄存器将被清零。 当针对任何传输方法进行配置后、C 代码无法从 SPIA RX 缓冲区或 FIFFO 中挑选十六进制或 ASCII 字。 似乎有某种勘误表、循环的 C 代码都无法使用任何方法将 FIFO 递增到 RX 缓冲区中。 当前门有数据包时、UART RX 接收器溢出、之后中断才被启用;当波特率高速时、在没有填充级别下可以控制它。

RX FIFO 设计从 10 位 x49c 更改为 8 位 x39c、并且仍然存在各种 OVF 问题。 我们无法禁用 FIFO 以停止 OVF 进入 RX 接收器问题、以及 MCU 类中断模式下明显的器件故障或轮询 SCIA RXBUF。 是的、有清除 OVF 的权变措施、但禁用 FIFO 或中断的简单方法不会在 POR 时初始化接收寄存器之前或 POR 后(如果来自外部世界的数据包信号)阻止接收寄存器溢出!

您能否解释一下为什么简单的 for 循环在没有显式分块、轮询 x39c 或中断 RXFIFO 级别的情况下、会弹出来自 x49c 器件中 RXFIFO 的 RX 接收器、而无法解析或填充 C 数组缓冲区? 我们减慢了数据包速率 1200 波特、1 秒间隔(小于 12 字节)并且 RX 接收器 CCS 调试显示数据存在、但 C 代码 (char) 或 (uint16_t) 在这两种类型缓冲器的数据数组中多次堆叠相同的字节?  供参考:scib x39c 是 TXFFIFO ISR 用另一个 21µs ISR 写入嵌套循环、并在同一上下文中正常工作。 奇怪的是、SCIA 阻塞 FIFO 或 NonFIFO 模式会减慢 SCIB TXFIFO ISR、因此这些阻塞模式无法在 SCIA 中使用。  

因此、我们轮询 SCIA FIFO 模式接收缓冲区:十六进制捕获还有来自主机的另外两次数据包传输、以下代码嗅探中未显示。

为什么循环在读取 RX 接收缓冲区后不能 POP FIFO?   

   

  

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

    您好、

    该专家目前正在为一天。 请等待他们返回后的回复。  

    此致、
    Aj Favela.  

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

    尊敬的 AJ:

    似乎 RXFIFO 缺少时钟源 、而依靠传入的串行 RXD 将 FIFO-15 推送到 FIFO-0。 这根本不会做 SCI 卖点中详述的事情! 已注意到 LaunchXL-39c 上的 SCI 行为 PZ 器件未在勘误表 PDF 中记录。

     也许图中缺少 FIFO 时钟源? 如果 CPU 依赖其他串行 RX 数据将 FIFO 栈从 0 –16 推入 RX 缓冲区、则它将无法通过 C 代码轮询 RX 缓冲区同步读取! 当通过 C 代码轮询 RX 缓冲区以获取数据时、必须将最小 RXFIFO 数据选通或时钟输入到 CPU 累加器中! 没有 FIFO 时钟源;无法针对 C 代码中的循环执行内联实时 RX 数据读取! 至少在此 X39c PZ 器件中、SCIA 模块中可能有勘误表?

     然而、尽管我们只通过 SCIB RX 单个 3–4 字节命令、但 SCIB TX RX FIFO 中断似乎效果良好。 数据通过 TM4C1294 MCU 以现在为 115200 的各种波特率发送到 SCIA RXFIFO。 RX 缓冲区不再溢出、字符输入、但 CPU 仅在数据数组缓冲区中处理少量(如果有)锁存字节、才会将这些字节处理到累加器中。  

     我注意到同样的不良 RXFIFIO 行为 x49c 印度对 ISR 处理程序的小型写入需要发送虚拟小印度以在中断时推送 FIFO 堆栈。 奇怪的是、在 B2B 读取 FIFO 栈期间、RX 接收器由 C 代码读取后、x39c SCIA 就绪标志不会切换为高电平(上面的已满 16 个字节、甚至 8 个字节)、用于循环读取 RX 缓冲区。 将每个 for 循环的唤醒位清除也无助于 RXRDY 标志、也没有启用中断。

     在未阻止的 FIFO 读取的情况下、RXRDY 信号是否被视为中断标志?    

    •接收器 (RX) 和主要寄存器(图 25-2 的下半部分):–RXSHF 寄存器—接收器移位寄存器。 从 SCIRXD 引脚移入数据、一次移动一位–SCIRXBUF—接收器数据缓冲寄存器。 包含由 CPU 读取的数据。 来自远程处理器的数据被加载到寄存器 RXSHF 中、然后加载到寄存器 SCIRXBUF 和 SCIRXEMU 中

      

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

    SCIA 的测试代码片段在 SCIB TXFIFO 上下文中运行。 这意味着 SCIA RXFIFO ASCII RX 数据被同化、在 SCIB 函数 TXD 处理程序内传输、并与对 SPIB TXFIFO 连续数据的其他调用一同传输到串行 HID(LCD 面板)。 小工具。

      添加代码插入函数出错、无法将最终代码窗口写入帖子! SCIA RXFIFO 外设无法正常工作、因为文本说明了即使未启用 RXFIFO 中断、也应将条件标志状态 RXRDY 置为有效。  

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

    尊敬的 Genatco:

    让我在下周回复您。

    此致、

    Delaney

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

    尊敬的 Delaney:

    x49c 和 x39c 中的器件似乎在对 CPU 的地址总线控制方面与 SCIA 有问题。 我们必须在 x49c 和 x39c 上使用 SCIB、同样的原因是 FIFO 中断函数失败。 我不清楚 x49c 是否是 PZ 器件、但我们注意到当 C 代码尝试读取 RXBUF 寄存器并在任一外设中启用 FIFO 时、x39c PZ 器件 SPIA RXFIFO 的行为与 SCIA 类似。

    我们在代码中放置了一个数据监测器、用于读取 RXBUFF 的循环中读取 SCIA RXFIFO、并将 TXFIFFO 设置为阻断 FF、如下面的循环数据捕获所述。 以下捕获是所有 ASCII、每个 ASCII 字符串的末尾都有一个十六进制 0xFF 结束符。 当循环结束出现问题时、SCIA TXFIFO 将继续发送一个 1 字符串、波特率为 9600 - 115200。  

    去年 11 月、我们从 TI store 购买了两款 LaunchXL-39c 器件、两者都有 PZ 器件、但这对于实验类型根本不会做、我们需要两个 UART 的完整功能。 当 SCIB TX/RX-FIFO ISR 继续正常运行时、SCIA RXFIFO 中断完全失败。 我们能否用不带 PZ 后缀的器件替换这些 LaunchXL-39c?   

    BTW:插入代码窗口仍然无法正常工作、单击“确定“或输入键不会发生任何情况。

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

    尊敬的 Genatco:

    我还没有机会调查您的问题、请期待收到延迟的回复。

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Odly、在 B2B 读取 FIFO 栈期间通过 C 代码读取 RX 接收器后、x39c SCIA 就绪标志不会切换为高电平。上面有 16 个字节、甚至 8 个字节用于循环读取 RX 缓冲区。 清除每个 for 循环的唤醒位顶部并不有助于 RXRDY 标志、也没有启用中断。[/quot]

    进一步测试时、仅当禁用 SCIA 增强型 FFIFO 模式时、RXRDY 条件标志才置为有效。 TRM 文本说明即使未启用中断、也存在 RXRDY 条件标志。 任何在增强 FIFO 模式下的 RX 仿真寄存器如何将 0xFF/255 的流推送到 SCIB 文本小工具。 奇怪的是、两个小数小工具会过滤掉 0xFF、但确实会在一个或两个数字 (21) 的时间显示、但会出现位错误。 LaunchXL-x39c 的所有其他 SCIB TXFIFO ISR 小工具以浮点精度显示正确的整数。

     如果在 RXFFIO 增强型 ISR 模式下禁用 RXENA 位、则不应导致快速 RX 缓冲区 OVF 条件锁定 ISR 条件标志、并在 POR 事件之后在嵌套的较高优先级组中启用 FIFO ISR 后从外部存在信号时将 RX 接收寄存器锁定。 RXENA 位无法停止 OVF 是一个勘误条件、需要将其输入到 PZ 硅的 PDF 文档中! 也许会发生外设竞争条件、但在 FIFO 配置后禁用 RXENA 位应停止 RX 接收器 OVF、并且此后 ISR 条件标志不应被锁定! 无论哪种方式增强 FFIO、RXENA 位都不能用作 TRM 文本、指明它应该如此。

    禁用 FIFO 应该清除 POR 上的 RXENA 位并禁用 RX 接收缓冲器。 尽管看似也应该禁用 RX 移位寄存器、但请关闭 RX 门!

     SCI UART 是否缺少在其被禁用时停止将数据位移入 FFIO 的架构?

     在切换 SCIA FIFO 以将 ASCII(非 ISR)文本字符串输出到同一小工具时、小工具文本框会接收 (FFFFF)、并发送所有 FIFO 数字的闪烁、然后返回到所有 F。 在 CCS 调试中、RX 仿真寄存器似乎停留在 0xFF 状态的频率高于进入 RX 接收缓冲区的实际 ASCII 字符。 0xFF 是一个字符串终止字符、通过 ARM Cortex MCU 向 C2000 发送更新。

    为什么 RX 仿真寄存器位最终在 CPU 累加器中成为锁存的 1 流?

    SCIA 增强型 RXFIFO 模式由 RX 仿真寄存器 F 执行! 我们看不到这些 F 的小部件,因为它们不是 ASCII 代码! F 的全 1 从 RX 缓冲区处理程序中打印出来、如上面的几次捕获所示。   

    当 CPU 为 16/32 位寄存器时、TI 和其他制造商为何采用工程 8 位 FIFO? 尤其是对于 C2000 寄存器的 16 位字限制。

    通过过滤掉所有 FF、我能够得到在 HMI 中显示 4 个 ASCII RXFIFO 字符。 奇怪的是、我们看到第一个字符随机重复将该值移动一个十进制数、即使没有将其传输到 SCIA 移位寄存器也是如此。 RX 缓冲区中的随机双字节似乎没有什么可以纠正。 发生这种情况时、未设置 FIFO 错误标志 (OE、FE、OVF)。

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

    尊敬的 Genatco:

    以下 是一些快速评论:

    • SCI FIFO 的宽度为 8 位、因为 UART 标准协议本质上 最多只能达到 8 个数据位。
    • 确保在 CCS 窗口中打开 Continuous refresh 选项、否则您将在寄存器中看到奇怪/意外的值。
    • 了解 SCIPRI 中的 SCI 仿真模式设置以及程序中暂停代码的位置。

    此致、

    Delaney

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

    是的、在过去 10 年使用 CCS 调试技术时、唯一的方法是持续刷新。

    SCI FIFO 为 8 位宽、因为 UART 标准协议本质上 最多只能达到 8 个数据位

    双字节移位(16 位)是一种硬件限制、8、1、None 可通过修改器件进行 16、1 和 None! TI 或许可以向 IEEE 提交更改请求、因为已经过去更新 8 位串行传输块、并且仍然包含 16 位数据移入/移出 16 位 FIFO。 这是评论的要点,在超过 30 年的 8 位串行传输限制和非常沮丧巨人没有采取领先的 16 位 FIFO 在每个串行外设, SCI.SPI、I2C、FSI ...

    问题是、我们 (AI) 目前无法在多个 MCU 之间按 ASCII 代码以 8 位宽的管道传输 16 位宽整数。 此外、I2C、SPI 具有相同的 8 位限制、不能通过绕回环路测试主/从模式来用整数绕回 16 位字。  

    了解 SCIPRI 中的 SCI 仿真模式设置以及程序中暂停代码的位置。

    我的 ASCII 代码 SCIA FIFO 轮询在 MCU 之间使用 6 个字节、但小工具无法解码十进制值。 这三个小部件都配置为文本字符串(现在)、奇怪的是风扇速度代码正常工作。 然而、在将其他 6 个字节传输到 LCD 小工具的同时、无法从 FIFO RX 缓冲区轮询以 ASCII 格式传输的其他 10 个字节。 结果是风扇速度小工具更新速度相当快(9600 波特率)、但无论通过阻塞设置 RXFIFO 级别(接近于空)如何、两个温度小工具的 10 字节 2 个小工具都是空白的。   

    但是、仅当嵌套的 ADCC1 ISR 1.3 不触发时、SCIA 阻塞 RXFIFO 才会将 SCIB TXFIFO ISR 减慢到 LCD 小工具。 当我们测试 SCIA 对 CPU 启用的 RXINT FIFO 中断时、IFR-9.1(内核标志)被锁定置位。 FIFO 从不切换 CPU-RXINT、只有在 PIE 寄存器中、当存在 RXERROR 时才会切换 IFR9.1、即使 OVF 条件标志多次被清除后(假设在 RXISR 处理程序中置为有效)也是如此。 结果是没有数据从未进入 CPU 累加器、因为 PIE IFR9.1 永远不会进入 CPU。

    为什么 SCIA FIFO 会切换 RXRDY 标志并立即触发 RXERROR 标志、而不会在启用 FIFO 模块的情况下升高 CPU RXINT 标志? 我几周前只看到 FIFO RXINT 标志触发、然后进入轮询模式。 SCIA RXISR 会检查状态并清除任何接收错误、但当它已在 PIE 中注册时、似乎没有将 SCIA RXISR 输入到 CPU 中。  

    我们是否需要在 SCIB-9.4 TXISR 中嵌套 SCIA- 9.1 寄存 式 RXISR、优先考虑 ADCC1 IER1.3、以便 SCIA-RXISR 甚至触发?

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

    尊敬的 Genatco:

    在我调查您的问题时、请允许我延迟回复。  

    此致、

    Delaney

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

    尊敬的 Delaney:

     我能够使 SCIA RXFIFO 的非阻塞轮询能够与 ID 协议 ACII 字节配合使用、但必须使用 CPUTM0 在 1ms 间隔内减慢发送到 SC!B-TXFIFO 的输入数据。 奇怪的是、当启用了 FIFO 中断时、RXRDY 标志仅通过 RXERROR 置为有效。 否则、使用 ADCC1 IER1.3 第 1 组的 SCIB TXFIFO 嵌套中断将在没有 CPUTM0 的情况下随机锁定。 嵌套 ADCC1 中断在包含 3 个 PWM 发生器栅极驱动器的 21µs 中进行循环时发生接触。 我希望获得 SCIA RXFIFO 中断、以便也与 ADCC1.3-INT 嵌套、如下文所述;

     重试为相同的数据使用 SCIA RXFIFO 中断、但当数据位于 RX 接收寄存器中时、只有 RXERR、OE、FE 标志会继续置为有效。 当达到 RXFIFOFILL 级别中断(已启用)时、SCIA RXFIFO INT 标志在启用后从不置为有效。 我使用了不同的 RXFIFO 填充级别中断、似乎没有任何内容会将中断标志置为有效。   

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

    尊敬的 Genatco:

    很高兴听到您能够使用轮询功能。 当我有机会进一步调查您的问题时、我将会更新。

    此致、

    Delaney