/*
 * uart.c
 *
 * Created: 04.10.2018 11:32:14
 *  Author: Ebert
 */ 
#include "uart.h"



/*************************************************************************
Function: uart_init()
Purpose:  initialize uart
Input:    none
Returns:  none
**************************************************************************/
void uart_init(void)   
{
   UBRR0H = UBRRH_VALUE;
   UBRR0L = UBRRL_VALUE;
   /* evtl. verkuerzt falls Register aufeinanderfolgen (vgl. Datenblatt)
      UBRR = UBRR_VALUE;
   */
#if USE_2X
   /* U2X-Modus erforderlich */
   UCSR0A |= (1 << U2X0);
#else
   /* U2X-Modus nicht erforderlich */
   UCSR0A &= ~(1 << U2X0);
#endif 


   UCSR0B = (1<<TXEN0)|(1<<RXEN0);  // UART TX und RX einschalten
   UCSR0C = (1<<UCSZ00)|(1<<UCSZ01);  // Asynchron 8N1

}


/*************************************************************************
Function: uart_putc()
Purpose:  write byte to ringbuffer for transmitting via UART
Input:    byte to be transmitted
Returns:  none
**************************************************************************/
int uart_putc(unsigned char c)
{
	while (!(UCSR0A & (1<<UDRE0)))  /* warten bis Senden moeglich */
	{
	}

	UDR0 = c;                      /* sende Zeichen */
	return 0;

}/* uart_putc */


/*************************************************************************
Function: uart_puts()
Purpose:  transmit string to UART
Input:    string to be transmitted
Returns:  none
**************************************************************************/
void uart_puts(const char *s )
{
	while (*s)
	uart_putc(*s++);

	}/* uart_puts */
	
void uart_puti (int i)							// sende Ganzzahl (int) ueber UART
{
	char s[7];									// Pufferspeicher f?r die umgewandelte Zahl (int, uint oder float)
	itoa( i, s, 10 );							// 10 fuer Dezimalsystem
	uart_puts(s);
}