The follow issue i have deal with it for a long time, but i cannot complete it.
Description: On imx6sx i send the packet which is about 6 bytes and then, after sending over, I send next packet about 2ms later. The amazing things happened, the tx interrupt is triggered, but the dma callback is invoked 4ms later, that is to say, the date will be sent out almostly 4ms after tx interrupt.
and the following packets are the same as above, if i increase the send interval, it will be ok. and tx interrupt is triggered, the tx callback will be invoked immediately.
I am looking forward to your reply, thank you very much at first.
Hello,
Perhaps the problem concerns with the fact, that DMA transfer data in bursts, DMA cannot transfer less data, than burst length.
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Its so good to receive your answer. I agree with you that the DMA burst size is the reason possibly, and, i try to modify the burst size before,and it doesn't work. I will check the actual parameter of the burst size and capture the wave on the line.
Thanks a lot.
Hi,
The burst size of half of UART FIFO is good choice.
Regards,
Yuri.
OK, now our DMA configuration is the same as the link below:
http://lxr.free-electrons.com/source/drivers/tty/serial/imx.c
open it, you can search the keyword 'burst'.
and you said the burst size is the half of Uart FIFO. you mean tx dst_maxburst or rx src_maxburst?
or I need set the rx src_maxburst is the half of Uart FIFO, and set the tx dst_maxburst is the same as the Uart FIFO?
thanks for your reply.
Hi,
I mean both tx dst_maxburst and rx src_maxburst.
Regrads,
Yuri.
Sorry for reply so late, recently i focus on the other task.
I look up the Uart chapter of imx6sx, and find the Rx/Tx FIFO is 32Bytes. As you advice, the half-of FIFO is 16Bytes.
and ss you said before"Perhaps the problem concerns with the fact, that DMA transfer data in bursts, DMA cannot transfer less data, than burst length."
So DMA transfers the data should less than 16Bytes, and now I send/receive the data usually less than 16Bytes, do you mean i should not use the DMA, maybe interrupt mode without DMA will be better?
Hi,
yes, often UART is needed to be used in so called debug / interractive mode, without DMA.
Regards,
Yuri.