我试图创建一个负责使用UART1从串行读取的任务。我发现在调用ad_uart_read几次之后,最终ad_uart_read()将永远阻塞。我使用USB到TTL适配器,可以使用逻辑分析仪探测它,因此我知道消息在线路上发出,但ad_uart_read()仍然没有返回。
通过添加打印,我知道ad_uart_read()在这一行阻塞:
OS_EVENT_WAIT(设备- > bus_data - > event_read,超时);
关于如何配置UARTs的一些细节(UART1用于通信,UART2用于打印)
c:
Static const gpio_config gpio_cfg[] = {
HW_GPIO_PINCONFIG(HW_GPIO_PORT_1, HW_GPIO_PIN_3, OUTPUT, UART2_TX, false),输出说明
HW_GPIO_PINCONFIG(HW_GPIO_PORT_2, HW_GPIO_PIN_3, INPUT, UART2_RX, false),
HW_GPIO_PINCONFIG(HW_GPIO_PORT_3,HW_GPIO_PIN_2, OUTPUT, UART_TX, false),
HW_GPIO_PINCONFIG(HW_GPIO_PORT_3, HW_GPIO_PIN_3, INPUT, UART_RX, false),
HW_GPIO_PINCONFIG_END
};
..
hw_gpio_configure (gpio_cfg);
在custom_config_qspi.h:
#定义CONFIG_RETARGET
#定义CONFIG_RETARGET_UART HW_UART2
#定义dg_configUART_ADAPTER (1)
/ / # define dg_configUART_SOFTWARE_FIFO (1)
#定义dg_configUART_RX_CIRCULAR_DMA (1)
#定义dg_configUART1_RX_CIRCULAR_DMA_BUF_SIZE (100)
/ / # define dg_configUART1_SOFTWARE_FIFO_SIZE (100)
注意,我已经尝试在使用软件FIFO和DMA之间切换,无论哪种方式,我都得到了相同的行为。
在platform_device.h:
hw_uart_bus (uart1, serial1, hw_uart_baudrate_19200, hw_uart_databits_8, hw_uart_parity_none,
hw_uart_stopbits_1,1,1, hw_dma_channel_1, hw_dma_channel_0,0,0)
hw_uart_bus (uart2, serial2, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none, hw_uart_bus, serial2, hw_uart_baudrate_115200, hw_uart_databits_8, hw_uart_parity_none,
hw_uart_stopbits_1,0,1, hw_dma_channel_3, hw_dma_channel_2, 0,0)
在mytask.c:
ad_uart_init ();
uart_device uart = ad_uart_open(SERIAL1);
(,) {
Int len = ad_uart_read()
...
}
嗨ainwood87,
我相信你所经历的问题是由长时间睡眠引起的。当您使用扩展睡眠时,设备将不会通过UART Rx引脚上的流量自动唤醒。只有使用CTS引脚的UART2才支持这种从睡眠中唤醒的功能。UART1不支持任何流控制,因此不使用比特就无法从睡眠中唤醒。我们通过测试您发布的代码来复制您的问题,我们得出的结论是,代码停止的原因是睡眠配置问题。它是强烈建议改变缓冲区大小,以便是一个小于dma循环缓冲区大小。
建议:
谢谢,PM_Dialog
嗨,对话框中,
你能解释一下如何配置板使用CTS引脚吗?这是我需要手动分配到GPIO引脚,还是内置到USB连接?
嗨,对话框中,
您提到FIFO大小应该比DMA循环缓冲区大小小1。然而,当我尝试在启用这两个选项的情况下编译时,我得到以下警告:
UART2不能同时使用软件FIFO和循环DMA FIFO
这似乎与你的建议相矛盾。
嗨ainwood87,
根据DA14680数据表,UART2使用16字节深度的FIFO实现硬件流控制,所以您不能将其配置为软件UART。只有UART1支持软件实现。对于完整的UART功能,您应该在标题(J15)中添加RTS - P1_5和CTS - P1_6之间的跳线。强烈建议你去看看5.3.4 HCI / UART报头(J15)段落的«DA1468x/DA1510x PRODevelopment kit UM-B-060»用户手册文档。注意,CTS引脚与K1按钮通过跳线J8复用。然后,你应该在peripher_init()函数中配置CTS引脚,如下所示:
hw_gpio_configure_pin (HW_GPIO_PORT_1,HW_GPIO_PIN_6,HW_GPIO_MODE_INPUT_PULLUP,
HW_GPIO_FUNC_UART2_CTSN1);
谢谢,PM_Dialog