Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed

/****************************************************************************
UART INITIALIZATION

This Program enables you to send data from the ATmega32 serial port to
the PC so that the data can be read on hyperterminal. This is very
useful for debugging purposes when the development system has no
display of its own.

To send data through the UART printf() is used.

uart.c and uart.h must be included in the main project, and the function
uart_init() called to enable serial port output.

In order to print floating point values, you will need to add the line
"-Wl,-u,vfprintf -lprintf_flt -lm" to AVR Studio4 linker options by going to
Project->Configuration Options->Custom Options

Read the "Detailed Description" section of
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html for
more detail.

*******************************************************************************/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include "uart.h"

int put_uart_char(char c, FILE *fd)
{
  while (!(UCSRA & _BV(UDRE)));  //Wait for transmit buffer to become empty.
  UDR = c; //Write the character to the UART.
  return 0;
}

void uart_init(void)
{
  //UART Init

  UCSRB |= (1<<TXEN);  // UART TX einschalten
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1
 
  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;


 
  //Call fdevopen. This is what binds printf to put_uart_char. The first
  //parameter is the address of our function that will output a single
  //character, the second parameter is an optional parameter that is
  //used for get functions, ie. receiving a character from the UART.
  //This is the function that uses malloc.
 
  fdevopen(&put_uart_char, NULL);
 
  //Enable the interrupts globally.
 
  SREG |= _BV(SREG_I);
}