如题,现在需要做收发切换功能,需要tx完成回调测试过tls_uart_tx_sent_callback_register();和tls_uart_tx_callback_register();都是发送完前4个字节就触发了,不能使用
另外尝试使用 定时器tls_timer_start()发现设置时间与触发时间不一致,如设置300ns,在180ns左右就会触发回调
查看更多
发送完成回调是调用tls_uart_tx_sent_callback_register来注册,只有在发送完tls_uart_write设置的长度才会调用发送完成回调,不会四字节就触发,除非是只发送了四个字节。timer的定时单位只能是ms和us,没有ns。
发布 问题
分享 好友
手机 浏览
回到 顶部
逻辑分析仪截图:
初始化代码:
数据发送接口:tls_uart_write()
@ggggjh
`
static s16 tx_callback(struct tls_uart_port *port)
{
}
static void test54(void)
{
}`
@abcd
用你这段代码直接弄进去,115200下2字节在回调后输出
2000000下有14字节在回调后输出
@ggggjh 驱动里,是在把要发送的数据都放到硬件fifo里之后就认为发完了,调用了发送完成回调。硬件fifo里可能还有几个字节的缓冲没发。如果想要硬件fifo里也空了再调用,可以简单改下驱动代码,可以等fifo空了在调用回调。但这里只是fifo空了,因为硬件中断没有完成标志,只有fifo空的标志。另外就是,这样只是简单改了下,只能是调用一次发送,进一次完成中断回调,再调用下一次发送。如果不等发送完成中断回调被调用就连续多次调用发送接口,可能就达不到预期效果。
在tls_uart_tx_chars里改动如下: