From cabfd8ed21d43eab067bace33302d47067473e46 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Sun, 4 Jan 2015 13:37:28 -0500 Subject: [PATCH] Fixed flush so that it actually is sure to flush all outstanding data. --- hardware/arduino/sam/cores/arduino/UARTClass.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hardware/arduino/sam/cores/arduino/UARTClass.cpp b/hardware/arduino/sam/cores/arduino/UARTClass.cpp index b6a0629da..0dc74fa2f 100644 --- a/hardware/arduino/sam/cores/arduino/UARTClass.cpp +++ b/hardware/arduino/sam/cores/arduino/UARTClass.cpp @@ -79,14 +79,12 @@ void UARTClass::end( void ) // clear any received data _rx_buffer->_iHead = _rx_buffer->_iTail ; - while (_tx_buffer->_iHead != _tx_buffer->_iTail); //wait for transmit data to be sent + // Wait for any outstanding data to be sent + flush(); // Disable UART interrupt in NVIC NVIC_DisableIRQ( _dwIrq ) ; - // Wait for any outstanding data to be sent - flush(); - pmc_disable_periph_clk( _dwId ) ; } @@ -134,6 +132,7 @@ int UARTClass::read( void ) void UARTClass::flush( void ) { + while (_tx_buffer->_iHead != _tx_buffer->_iTail); //wait for transmit data to be sent // Wait for transmission to complete while ((_pUart->UART_SR & UART_SR_TXRDY) != UART_SR_TXRDY) ;