There is an easy solution: Let the component handle its interrupts.
When the Rx and Tx buffers set to something larger than the internal FIFO size (let's say: 80 bytes) some internal routines will support sending and receiving data using interrupt handlers.
You can check the completeness of the transfers using UART_GetRxBufferSize() or GetTxBufferSize() APIs. Returned is always the actual number of bytes residing in the buffer.
When RxBufferSize() returns != 0 you can retrieve the bytes with the appropriate API.
TxBufferSize() == 0 indicates no more bytes remain to be sent.
Thanks for your fast response Bob!
But when using rs485, i must to enable rx mode in transceiver just at the end of the UART shift register transmision, thus, polling RxBufferSize() is not enough for a proper operation. I would like to busy check both UART_DONE and UART_TX_FIFO_EMPTY register to be sure that the transmision was succeed.
Could this be correct?
/* Busy wait to transmit data from buffer to tx shift register */
shile( ( UART_GetTxInterruptSource & UART_INTR_TX_EMPTY ) == 0 );
/* Busy wait to transmit all shifted data */
while( ( UART_GetTxInterruptSource & UART_INTR_TX_UART_DONE ) == 0 );
/* Renable rs485 Rx mode */
Thanks for your attention!
1 of 1 people found this helpful
Your code will work when you use UART_GetTxInterruptSource() (parentheses needed).
Additionally you will need to reset the interrupt cause at end of your handler using UART_ClearTxInterruptSource().
I finally got through interrupts! Thank for your reply!