Hello Pau,
If you look at KSDK examples, you will see some uart examples for FRDM-K64F (C:\Freescale\KSDK_1.3.0\examples\frdmk64f\driver_examples\uart) and in every example, you can see how these uart functions are used in order to achieve blocking communication, non-blocking or also using DMA.
For example, in uart_non_blocking project, you can see that UART_DRV_SendData is used to write data to terminal:
const uint8_t bufferData1[] = "\r\nType characters from keyboard, the board will receive and then echo them to terminal screen\r\n";
// Inform user of what to do
byteCountBuff = sizeof(bufferData1);
UART_DRV_SendData(BOARD_DEBUG_UART_INSTANCE, bufferData1, byteCountBuff);
// Wait until transmission is finished
while (kStatus_UART_TxBusy == UART_DRV_GetTransmitStatus(BOARD_DEBUG_UART_INSTANCE, NULL)){}
And for receiving data, it is used:
// Call received API
UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u);
while (kStatus_UART_RxBusy == UART_DRV_GetReceiveStatus(BOARD_DEBUG_UART_INSTANCE, NULL)){}
For more details, you can analyze further these examples.
I hope this can help you!
Best Regards,
Isaac