如題,現在需要做收發切換功能,需要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裡改動如下: