Exemplo n.º 1
0
/*! \brief Put data (5-8 bit character).
 *
 *  Stores data byte in TX software buffer and enables DRE interrupt if there
 *  is free space in the TX software buffer.
 *
 *  \param usart_data The USART_data_t struct instance.
 *  \param data       The data to send.
 */
bool USART_TXBuffer_PutByte(USART_data_t * usart_data, uint8_t data)
{
	uint8_t tempCTRLA;
	uint8_t tempTX_Head;
	bool TXBuffer_FreeSpace;
	USART_Buffer_t * TXbufPtr;

	TXbufPtr = &usart_data->buffer;
	TXBuffer_FreeSpace = USART_TXBuffer_FreeSpace(usart_data);


	if(TXBuffer_FreeSpace)
	{
	  	tempTX_Head = TXbufPtr->TX_Head;
	  	TXbufPtr->TX[tempTX_Head]= data;
		/* Advance buffer head. */
		TXbufPtr->TX_Head = (tempTX_Head + 1) & USART_TX_BUFFER_MASK;

		/* Enable DRE interrupt. */
		tempCTRLA = usart_data->usart->CTRLA;
		tempCTRLA = (tempCTRLA & ~USART_DREINTLVL_gm) | usart_data->dreIntLevel;
		usart_data->usart->CTRLA = tempCTRLA;
	}
	return TXBuffer_FreeSpace;
}
Exemplo n.º 2
0
int usart_putchar (char c, FILE *stream)
{
    if (c == '\n') {
        usart_putchar ('\r', stream);
    }

    while (!USART_TXBuffer_FreeSpace (&usart_stdio_data));
    USART_TXBuffer_PutByte (&usart_stdio_data, c);
    return 0;
}
Exemplo n.º 3
0
/*! \brief Write a byte to the circular transmit buffer
 *
 *  \param  uart      pointer to UART datastructure with buffers
 *  \param  data      byte to be written
 *
 *  \return void
 */
void uart_putc(USART_data_t *uart, uint8_t data)
{
  if ( USART_TXBuffer_FreeSpace(uart) ) {
    USART_TXBuffer_PutByte(uart, data);
  }
}