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.

[参考译文] RM57L843:SCI 多次缓冲

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1388563/rm57l843-sci-multi-buffered

器件型号:RM57L843

工具与软件:

您好!

我的问题与 SCI 的多次缓冲模式有关。

如果 SCI 被配置成具有8个8位缓冲器的多次缓冲模式、是否能够接收一个字节?

RDY 寄存器在多次缓冲模式下的工作方式是否像队列一样? 也就是说、如果读取 RD 寄存器、RDY 寄存器中的数据是否会被移至寄存器(y-1)?

此致

Marcio

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

    尊敬的 Marcio:

    在回应中对经销商道歉。

    [报价 userid="213328" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1388563/rm57l843-sci-multi-buffered ]]如果 SCI 配置为具有8个8位缓冲区的多缓冲模式、能够接收一个字节?[/QUOT]

    可以、使用多缓冲模式可以接收单字节。

    为此、您需要选择 SCI 格式寄存器中的长度为0、如下方突出显示。

    在多缓冲模式下 RDY 寄存器是否像队列一样工作? 也就是说、如果读取 RD 寄存器、RDY 寄存器中的数据是否会移至寄存器(y-1)?[/QUOT]

    不、它不像队列那样工作。 数据不会在 RDY 寄存器之间移入。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish。  

    感谢您的答复。  

    如果我将 SCIFORMAT 的 LENGTH 字段设置为0、那么当一个字节被复制到 RD[0]时、SCI 将设置 SCIFLR 的 RXRDY 位、并且不会使用 RD[1]到 RD[7]。 是这样吗?

    我想检测 SCI 是否接收到1个字节、但仍然希望 SCI 在 RD[0]中缓冲最多8个字节到 RD[7]、以便我的软件可以使用轮询方法来接收字节、而不会丢失115200bps 的数据。 有可能吗?

    此致、

    Marcio。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="213328" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1388563/rm57l843-sci-multi-buffered/5313983 #5313983"]如果我将 SCIFORMAT 的 length 字段设置为0、那么当一个字节复制到 RD[0]时、SCI 将设置 SCIFLR 的 RXRDY 位、而不使用 RD[1]到 RD[7]。 正确吗?

    您是对的!

    [报价 userid="213328" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1388563/rm57l843-sci-multi-buffered/5313983 #5313983"]我想要检测 SCI 接收到1个字节、但仍然希望 SCI 将 RD[0]中最多8个字节缓冲到 RD[7]、以便我的软件可以使用轮询方法接收字节而不丢失115200bps。 是否可能?

    不、这是不可能的!

    如下所示、只有在3位计数器匹配后才会设置 RXRDY 标志、这意味着我们在缓冲区中接收到长度字节数后。

    所以、它不能用作队列。 这些多缓冲模式的主要目的是通过降低 CPU 负载来接收数据帧。 我的意思是、在某些情况下、我们不需要处理每个字节、我们可以只处理数据帧而不是每个字节、在这些情况下会 很有用。

    但是、115200波特率不会出现过载问题、因为 SCI 模块默认具有双缓冲。

    如果您以115200波特率运行、要接收1字节、需要~80us、但 CPU 可以在高达330MHz 的频率下运行

    这样、在出现溢出错误之前、CPU 可以轻松地在80us 内处理数据。

    如果仍然需要一些队列、可以做一件事。 您可以使用 DMA、例如、您可以选择一个 DMA 通道、并将源设置为 SCIRD 寄存器、将目标设置为一些8缓冲阵列。  

    现在、在 DMA 中有两种类型的中断块传输完成(BTC)和半块传输完成(HBC)中断。 BTC 将在整个传输块完成后触发、在本例中、在接收到8个字节后、但 HBC 将在4个字节后设置。 因此、您可以使用此 HBC 中断、并且您可以在整个块被 SCI 的 DMA 填充之前处理数据。

    ——
    谢谢、此致、
    Jagadish。

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

    您好 Jagadish。  

    非常感谢您的答复。  

    我不熟悉 DMA。 是否可以使用 DMA 仅将数据从 SCIRD 传输到缓冲区(例如16字节)、然后不使用中断、通过软件轮询 DMA 并查看接收的字节是否为1个或多个字节。 如果是、您是否有一个示例?

    谢谢你。

    Marcio。

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

    尊敬的 Marcio:

    我没有这方面的任何示例、

    然而、DMA 中还存在帧传输中断、并且将在单个帧传输(而不是半块传输或全块传输)后设置该中断。

    我想你可以使用这个、但是具有挑战性的部分是识别通过 DMA 传输的字节数。 只需尝试完全通过 DMA、并尝试根据您的要求构建应用。

    如果您在任何地方卡住、我都会尝试为您提供帮助。

    ——
    谢谢、此致、
    Jagadish。