UART RTS CTS硬件流控制和唤醒

6个员额/ 0个新员额
最后发表
ankitdaf
离线
最后看到:2年8个月前
加入:2015-09-03 20:14
UART RTS CTS硬件流控制和唤醒

我正在尝试为UART实现硬件流控制。我注意到CTS和RTS引脚低电平活跃。
是否有代码示例可用于如何初始化硬件流控制的UART ?我已经完成了GPIO的配置,还有什么需要做的吗?我不知道如何启用硬件流控制,以及它会产生什么影响。

作为附加问题:
在AN-B-026中,在“使用UART CTS信号唤醒DA14580”一节中,我注意到CTS默认是低电平,然后切换为高电平和低电平。这是否意味着,如果我想用它来提神的话,它是活性高的?如果它是活跃的高为了被用作唤醒,我如何配置它以保持接收数据与硬件流控制,这需要CTS是活跃的低

设备:
MT_dialog
离线
最后看到:1个月1个星期前
工作人员
加入:2015-06-08 34
嗨ankitdaf,

嗨ankitdaf,

您可以使用DSPS示例实现UART流量控制,请检查此项目作为参考。

当您完成了唤醒过程的操作,并且该引脚不必用作唤醒引脚时,您可以将其重新配置为UART的CTS引脚。当CTS线路低,你可以发送数据,一旦CTS高,你应该停止发射机。

由于MT_dialog

ankitdaf
离线
最后看到:2年8个月前
加入:2015-09-03 20:14
谢谢你的建议

谢谢你的建议,试试吧。

我已经打过电话了:

"uart2_read((uint8_t *)uart2_rx_buffer, 1, uart2_read_completion_cb);//读取一个字符"

并实现了uart2_read_completion_cb函数。

我已经配置了GPIOs的RTS和CTS功能,他们正在被调用感谢GPIO0 IRQn。但是,基于DSPS的例子,我可以看出,信令只用于控制BLE数据流。

我试图理解的是,是否有内置机制来处理CTS下降(以及可能调用的中断),以及是否有可能使用它来触发RTS信号?我目前正在通过将GPIO设置为非活动来手动处理这个问题。所有这些看起来都很手动,目前,引脚基本上是作为gpio。在美国,定义引脚为RTSN和CTSN并没有多大用处,所以我想知道我是否遗漏了什么。

谢谢

MT_dialog
离线
最后看到:1个月1个星期前
工作人员
加入:2015-06-08 34
嗨ankitdaf,

嗨ankitdaf,

不确定您的意思,uart2_Handler回调函数将被调用,只要您在UART FIFO中有数据(取决于您在硬件中设置了多少将触发中断的数据)。在DSPS示例中,580个CTS引脚也通过GPIO0 IRQn被调用,580个RTS由UART的硬件处理,这取决于FIFO的设置(在流关闭前将接受多少字节)。中断从UART中的FIFO状态触发,当切换CTS时没有调用中断。当CTS上升uart发射机只是暂停发送数据到另一边,没有中断由uart引起,因为CTS切换。

由于MT_dialog

ankitdaf
离线
最后看到:2年8个月前
加入:2015-09-03 20:14
嗨MT_dialog

嗨MT_dialog

谢谢您的回复。这让我比以前更困惑了。让我试着重新表达我的问题。

1.我尝试使用RTS和CTS功能。我如何在一个从另一个处理器接收一个字节消息的应用程序中实现这一点?我不需要传输任何数据,只需要接收。

2.有一个方法uart_mcr_pack和uart2_mcr_pack,其中提到了autorts、autoct和rts。这个方法和寄存器到底是做什么的?我没有找到相关文件。

3.DSPS应用程序没有多大帮助,因为它似乎在BLE上传递流控制信号。

4.通过GPIO0_IRQn调用CTS的具体目的是什么?我可以使用CTS引脚,通过外部处理器将它拉高或低,以使580触发器/不触发器Uart2_read回调?切换CTS引脚是否会影响处理程序是否被调用?

请帮帮我!

附注:也许在这方面的应用笔记会有帮助,只是为了记录什么类型的硬件控制可用于UARTs,如果这对你们来说不是太多的工作

谢谢您的耐心

MT_dialog
离线
最后看到:1个月1个星期前
工作人员
加入:2015-06-08 34
嗨ankitdaf,

嗨ankitdaf,

1.我不确定如果我得到这个,你可以设置1个字节的UART的FIFO深度水平和启用自动流量控制如果你这样做你会发现您的RTS信号将设置为高每次你得到一个字节FIFO。您可以通过使用DSPS示例来测试这一点,只需将UART_IIR_FCR_REG设置为0x7,这将在您的FIFO中接收到一个字节时触发一个中断,如果使用逻辑分析仪进行检查,您将看到RTS切换时接收到一个字符。如果你用DSPS测试这个,你会看到你的RTS每8个字符切换一次,因为FIFO的DSPS设置是满的1/2。

2.关于函数的信息没有文档化,在数据表中检入寄存器地址,其中有对每个位做什么的描述。

3.如上所述,在DSPS中,硬件操作UART的传输/接收,没有任何迹象表明应用程序何时CTS将被UART的另一端切换,因此,为了让我们的应用程序有这个指示,我们使用了一个正常的IRQ,以便在应该向BLE链路的另一端发出流量关闭信号时向应用程序发出信号。

4.如上所述,从外部处理器断言或解除断言CTS不会触发任何UART中断。如果在UART_IIR_FCR_REG上检查数据表的UART部分,可用的UART中断就是由特定寄存器指示的中断。

关于应用程序说明,数据表包含了大部分必要的信息。

由于MT_dialog