工具与软件:
您好!
我的问题与 SCI 的多次缓冲模式有关。
如果 SCI 被配置成具有8个8位缓冲器的多次缓冲模式、是否能够接收一个字节?
RDY 寄存器在多次缓冲模式下的工作方式是否像队列一样? 也就是说、如果读取 RD 寄存器、RDY 寄存器中的数据是否会被移至寄存器(y-1)?
此致
Marcio
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.
工具与软件:
您好!
我的问题与 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"]我想要检测 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。