嗨
我正在尝试为UART实施硬件流控制。我注意到CTS和RTS引脚很低。
是否有任何代码示例可用于如何为硬件流控制初始化UART?我已经完成了GPIO配置,还有什么可以做的吗?我没有找到如何启用硬件流控制,以及影响的内容。
作为一个附加问题:
在AN-B-026中,在“使用UART CTS信号唤醒DA14580”一节中,我注意到CTS默认为低,然后切换为高和低。这是否意味着它的活性很高,如果我想用它来唤醒我?如果它是活跃的高以便被用作唤醒,我如何配置它保持接收与硬件流控制的数据,这需要CTS是活跃的低
设备:
嗨ankitdaf,
您可以使用DSPS的例子来实现UART流程控制,请检查这个项目作为参考。
当您使用唤醒过程进行操作时,引脚不必用作唤醒引脚,您将其重新配置为UART的CTS引脚。当CTS线路低时,就可以在CTS变高时发送数据,您应该停止发射器。
谢谢mt_dialog.
谢谢你的建议,试试吧。
我已经打过电话了:
uart2_read((uint8_t *)uart2_rx_buffer, 1, uart2_read_completion_cb);//读取一个字符
并实现了uart2_read_completion_cb函数。
我已经配置了gpio到他们的RTS和CTS功能,他们正在被调用,感谢GPIO0 IRQn。然而,基于DSPS示例,我可以看到信令仅用于控制BLE数据流。
我想要了解的是,是否存在能够处理CTS变低的内在机制(以及可能调用的中断),以及是否有可能使用它去触发RTS信号?我目前正在手动处理这个通过设置GPIO不活跃。所有这些看起来都是手工操作的,目前,这些大头针的作用就像gpio。,没有太多的使用定义引脚为RTSN和CTSN,所以我想知道我是否错过了一些东西。
谢谢
嗨ankitdaf,
不确定你的意思,uart2_Handler回调将被调用,一旦你在UART FIFO中有数据(取决于你在硬件中设置了多少数据将触发中断)。在DSPS的例子580 CTS引脚也被称为通过GPIO0 IRQn和580 RTS是由UART的硬件处理取决于你的FIFO设置(多少字节将接受前流掉)。中断从UART中的FIFO状态触发,当CTS被切换时,没有中断被调用。当CTS上升时,uart发射器只是暂停向另一边发送数据,因为CTS被切换,uart不会引起中断。
谢谢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,如果这对你们来说不是太多的工作
感谢您的耐心等待
嗨ankitdaf,
1.我不确定如果我得到这个,你可以设置1个字节的UART的FIFO深度水平和启用自动流量控制如果你这样做你会发现您的RTS信号将设置为高每次你得到一个字节FIFO。你可以通过使用DSPS的例子来测试这个,只设置UART_IIR_FCR_REG为0x7,这将触发一个中断,当你收到一个字节在你的FIFO,如果检查与逻辑分析器,你会看到RTS切换接收一个字符。如果你用DSPS测试这一点,你会看到你的RTS将切换每8个字符,因为DSPS设置的FIFO是1/2满。
2.关于该函数的信息没有文档记录,检查数据表中的寄存器地址,这里有每个位所做的描述。
3.如上所述在DSP中,硬件操作UART的发送/接收,并且当CTS将被UART的另一侧切换时,应用程序没有指示,因此为了让我们的应用程序指示我们使用正常的IRQ以发信号通知应用流量关闭信号时应发出到BLE链路的另一侧。
4.如上所述,来自外部处理器的CTS的断言或反断言不会触发任何UART中断。如果您在UART_IIR_FCR_REG上检查数据表的UART部分,可用的UART中断是由特定寄存器指示的。
关于应用说明,数据表包括大多数必要的信息。
谢谢mt_dialog.