/******************************************************************************* * Function Name: UART_SpiUartClearRxBuffer ******************************************************************************** * * Summary: * Clear the receive buffer and RX FIFO. * * Parameters: * None * * Return: * None * *******************************************************************************/ void UART_SpiUartClearRxBuffer(void) { #if(UART_INTERNAL_RX_SW_BUFFER_CONST) uint32 intSourceMask; #endif /* (UART_INTERNAL_RX_SW_BUFFER_CONST) */ #if(UART_CHECK_RX_SW_BUFFER) { intSourceMask = UART_SpiUartDisableIntRx(); UART_CLEAR_RX_FIFO; /* Flush RX software buffer */ UART_rxBufferHead = UART_rxBufferTail; UART_rxBufferOverflow = 0u; /* End RX transfer */ UART_ClearRxInterruptSource(UART_INTR_RX_ALL); UART_SpiUartEnableIntRx(intSourceMask); } #else { UART_CLEAR_RX_FIFO; } #endif }
/******************************************************************************* * Function Name: UART_SpiUartClearRxBuffer ******************************************************************************** * * Summary: * Clears the receive buffer and RX FIFO. * * Parameters: * None * * Return: * None * *******************************************************************************/ void UART_SpiUartClearRxBuffer(void) { #if (UART_CHECK_RX_SW_BUFFER) { /* Lock from component interruption */ UART_DisableInt(); /* Flush RX software buffer */ UART_rxBufferHead = UART_rxBufferTail; UART_rxBufferOverflow = 0u; UART_CLEAR_RX_FIFO; UART_ClearRxInterruptSource(UART_INTR_RX_ALL); #if (UART_CHECK_UART_RTS_CONTROL_FLOW) { /* Enable RX Not Empty interrupt source to continue receiving * data into software buffer. */ UART_INTR_RX_MASK_REG |= UART_INTR_RX_NOT_EMPTY; } #endif /* Release lock */ UART_EnableInt(); } #else { UART_CLEAR_RX_FIFO; } #endif }
/******************************************************************************* * Function Name: UART_UartGetByte ******************************************************************************** * * Summary: * Retrieves the next data element from the receive buffer, returns the * received byte and error condition. * - The RX software buffer is disabled: returns the data element retrieved * from the RX FIFO. Undefined data will be returned if the RX FIFO is * empty. * - The RX software buffer is enabled: returns data element from the * software receive buffer. * * Parameters: * None * * Return: * Bits 7-0 contain the next data element from the receive buffer and * other bits contain the error condition. * * Side Effects: * The errors bits may not correspond with reading characters due to RX FIFO * and software buffer usage. * RX software buffer is disabled: The internal software buffer overflow * is not returned as status by this function. * Check SCB_rxBufferOverflow to capture that error condition. * *******************************************************************************/ uint32 UART_UartGetByte(void) { uint32 rxData; uint32 tmpStatus; #if (UART_CHECK_RX_SW_BUFFER) { UART_DisableInt(); } #endif if (0u != UART_SpiUartGetRxBufferSize()) { /* Enables interrupt to receive more bytes: at least one byte is in * buffer. */ #if (UART_CHECK_RX_SW_BUFFER) { UART_EnableInt(); } #endif /* Get received byte */ rxData = UART_SpiUartReadRxData(); } else { /* Reads a byte directly from RX FIFO: underflow is raised in the case * of empty. Otherwise the first received byte will be read. */ rxData = UART_RX_FIFO_RD_REG; /* Enables interrupt to receive more bytes. * The RX_NOT_EMPTY interrupt is cleared by the interrupt routine * in case the byte was received and read by code above. */ #if (UART_CHECK_RX_SW_BUFFER) { UART_EnableInt(); } #endif } /* Get and clear RX error mask */ tmpStatus = (UART_GetRxInterruptSource() & UART_INTR_RX_ERR); UART_ClearRxInterruptSource(UART_INTR_RX_ERR); /* Puts together data and error status: * MP mode and accept address: 9th bit is set to notify mark. */ rxData |= ((uint32) (tmpStatus << 8u)); return (rxData); }
/******************************************************************************* * Function Name: UART_UartGetChar ******************************************************************************** * * Summary: * Retrieves the next data element from the receive buffer. * This function is designed for ASCII characters and returns a char * where 1 to 255 are valid characters and 0 indicates an error occurred or * no data present. * - The RX software buffer is disabled: returns the data element * retrieved from the RX FIFO. * Undefined data will be returned if the RX FIFO is empty. * - The RX software buffer is enabled: returns the data element from * the software receive buffer. * * Parameters: * None * * Return: * The next data element from the receive buffer. * ASCII character values from 1 to 255 are valid. * A returned zero signifies an error condition or no data available. * * Side Effects: * The errors bits may not correspond with reading characters due to RX FIFO * and software buffer usage. * RX software buffer is enabled: The internal software buffer overflow * does not treat as an error condition. * Check SCB_rxBufferOverflow to capture that error condition. * *******************************************************************************/ uint32 UART_UartGetChar(void) { uint32 rxData = 0u; /* Reads data only if there is data to read */ if (0u != UART_SpiUartGetRxBufferSize()) { rxData = UART_SpiUartReadRxData(); } if (UART_CHECK_INTR_RX(UART_INTR_RX_ERR)) { rxData = 0u; /* Error occurred: returns zero */ UART_ClearRxInterruptSource(UART_INTR_RX_ERR); } return (rxData); }