ZHCUAN6E October 2022 – May 2025 MSPM0L1105 , MSPM0L1106 , MSPM0L1116 , MSPM0L1117 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
可通过硬件完成流量控制,以下各节介绍了实现方法。
在 UART 模式(CTL0.MODE 设置为 0)下,通过将 RTS 输出连接到接收器件上的 CTS 输入,并将接收器件上的 RTS 输出连接到 CTS 输入来完成两个器件之间的硬件流量控制。RTS 输出信号为低电平有效,CTS 输入对于发送请求预计会有一个低电平信号,如图 21-9 所示。
CTS 输入控制发送器,器件 0 和器件 1 发送器只有在其 CTS 输入为低电平有效时才能发送数据。启用 RTS 流量控制后,RTS 输出信号指示接收 FIFO 的状态。例如,在达到器件 0 的预编程 RX FIFO 水线位之前,器件 1 的 CTS 保持低电平有效,表明器件 0 的接收 FIFO 没有空间来存储额外的字符。
UART.CTL0 寄存器中的 CTSEN 和 RTSEN 位指定流量控制模式,如表 21-4 所示。
| CTSEN | RTSEN | 说明 |
|---|---|---|
| 1 | 1 | 启用 RTS 与 CTS 流量控制 |
| 1 | 0 | 仅启用 CTS 流量控制 |
| 0 | 1 | 仅启用 RTS 流量控制 |
| 0 | 0 | 禁用 RTS 和 CTS 流量控制 |
当 RTSEN 设置为 1 时,将忽略 CTL0.RTS 位的值,RTS 输出信号由硬件触发电平生成,如下所述。当 RTSEN 位清零时,RTS 信号输出由 CTL0.RTS 位控制以进行软件控制。
RTS 流量控制:
RTS 流量控制逻辑链接到可编程接收 FIFO 水线位,可以使用 UARTx.IFLS 寄存器对其进行配置。启用 RTS 流量控制后,RTS 将有效(低电平),直到接收 FIFO 填充至水线位。当达到接收 FIFO 水线位时,RTS 信号无效(高电平),表明没有更多空间来接收更多数据。预计数据传输将在发送当前字符后停止。当从接收 FIFO 中读出数据时,RTS 信号会重新有效(低电平),以便填充至水线位以下。如果禁用了 RTS 流量控制并且 UART 仍然启用,则会接收到数据,直到接收 FIFO 填满,或者不再有数据发送到接收 FIFO。
因为将最后接收到的字符放入 FIFO 而达到 FIFO 水线位时,RTS 信号无效。这意味着在背对背传输时,发送者可能已经开始了另一个字符传输。因此,在这种情况下,应将水线位设置为低一级,以确保可以接收所有数据并将其放入 FIFO。
CTS 流量控制:
如果启用了 CTS 流量控制,则发送器在发送下一个字节之前会检查 CTS 信号。如果 CTS 信号有效(低电平),则会发送字节,否则不会发送。当 CTS 有效(低电平)且发送 FIFO 不为空时,将继续发送数据。如果发送 FIFO 为空且 CTS 信号有效(低电平),则不发送数据。如果 CTS 信号无效(高电平)且启用了 CTS 流量控制,则完成当前字符传输后才会停止传输。如果禁用了 CTS 流量控制并启用了 UART,则将继续发送数据,直到发送 FIFO 为空。