2020-01-01 17:56发布
Capture_0019.jpg (34.16 KB, 下载次数: 0)
下载附件
2016-7-20 15:18 上传
fzkqi 发表于 2016-7-16 21:36 楼主下次百度一下就有的就不要在论坛发了好吧。什么大杂烩的都在论坛问,没看出楼主有个确定的学习方向,东 ...
最多设置5个标签!
假定A、B两设备通信,A设备的RTS 连接B设备的CTS ;A设备的CTS 连接B设备的RTS 。
前一路信号控制B设备的发送,后一路信号控制A设备的发送。
对B设备的发送(A设备接收)来说,
如果A设备接收缓冲快满的时发出RTS 信号(意思通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送;
一段时间后A设备接收缓冲有了空余,发出RTS 信号,指示B设备开始发送数据。
A设备发(B设备接收)类似。
上述功能也能在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。
A设备一旦接收到B设备发送过来的Xoff,立刻停止发 送;
反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。
同理,B设备也类似,从而实现收发双方的速度匹配。
设备A如果发送数据速度超过设备B读取的速度,设备B的FIFO的数据就会溢出。
如果有一根线,B通过电平状态,告诉A ;我的FIFO已经满了,不要再发了。
这样A就能看情况给B发数据了。
硬
件流控制
硬件流控制是一个公用握手协议,用于使能UART接收器来防止当接收缓冲器溢出时,对应的发送器依旧发送数据。
接收器产生称为请求发送的RTS输出信号,当接收缓冲器填满并超过门限时,将使该信号无效。
发送器接收称为清除发送的CTS输入信号,当CTS无效时就停止发送。
当然,仍然会完成当前处理字的发送。
对于双向数据流,硬件连接如图所示。
Capture_0019.jpg (34.16 KB, 下载次数: 0)
下载附件
2016-7-20 15:18 上传
在工业设备中,RTS和CTS信号通常低电平有效(低电平时发送)。
通过设定UARTx_MCR寄存器中的FCPOL位可改变信号极性,使RTS和CTS变为高电平有效(高电平时发送)。
接收器RTS产生
UARTx_MCR寄存器中的ARTS位可使能自动产生RTS信号。
如果ARTS=0,则RTS输出信号的状态由MRTS位控制。
若ARTS=1,RTS输出说明接收缓冲器的状态。
与控制中断时序的RFIT位类似,接收FIFO RTS门限值位(RFRT)控制RTS信号的有效性。
与中断不同,RTS信号的有效和无效都有滞后现象。
当接收缓冲器中有两个(RFRT=0)或者四个(RFRT=1)字节,且检测到第三或者第五个开始位时,则RTS信号无效。
由于UARTx_RBR的读操作,当接收缓冲区低于两个(RFRT=0)或四个(RFRT=1)字节的门限时,则RTS将再次有效。
由于在端口复用级也必须使能RTS信号,给该信号加上拉电阻(当FCPOL=1时上拉)有利于防止处理器复位周期中的浮动。
同样,TX输出端的上拉电阻也可以避免处理器复位周期中的浮动。
发送器监测CTS
在UARTx_MCR寄存器中有个新的称为ACTS的位,当置位时,使能自动CTS监测。
一旦发送器检测到CTS输入引脚的电平被撤销,就完成当前TSR移位寄存器中的字发送。
然而,它会阻止UARTx_THR寄存器中当前的字发送给TSR寄存器,直到CTS再次有效为止。
另外,在UARTx_MCR中还有一个新的称为CTS的位,表示CTS输入信号是否有效。
此外,还有一个与CTS位相关联的SCTS位,W1C软件操作可对该位清零。
如果使能了EDDSI位,无论SDTS是否为1,都会产生所谓的调制解调器状态中断,并作为UART状态中断的信号量。
与CTS输入引脚相似,软件可以暂停发送。该过程可以通过设定UARTx_MCR寄存器中的XOFF位而立即实现。
在自回环模式(LOOP_ENA=1),接收器的RTS输出直接由内部回送到发送器的CTS输出。
推荐百度要被关小黑屋的,最新版规
一周热门 更多>