Problem with using pure C code to program default UART (UART0) in Arduino Mega Can I code default serial port in Arduino Mega (USART0, I assume) in pure C? I mean to set up it and configure directly by ATmega's registers?

I'm asking because I'm trying to do it and I have a problem. Below is code which I use and Arduino doesn't transfer anything...

#include &lt;avr/io.h&gt;

#define F_CPU 16000000
#define BAUD_RATE 9600 
#define MY_UBRR (F_CPU+BAUD_RATE*8UL)/(16UL*BAUD_RATE)-1


void setup() {

    UART_Init(MY_UBRR);
}

void loop() {
    UART_Transmit('a');

 }

void UART_Init(unsigned char ubrr)
{
   UBRR0H = (unsigned char)(ubrr &gt;&gt; 8);
   UBRR0L = (unsigned char)ubrr;
   UCSR0B = (1&lt;&lt;RXEN0) | (1&lt;&lt;TXEN0);
   UCSR0C = (1&lt;&lt;USBS0) | (1&lt;&lt;UCSZ00);
}

 void UART_Transmit(unsigned char data)
 {
    while(!(UCSR0A &amp; (1&lt;&lt;UDRE0)))
    UDR0 = data;
 }


That code I created following the datasheet for ATmega 2560. It has been compiled and programmed but doesn't work at all...

Please give me any advice. It's important for me use just C code in that case.
I suggest to use existing code and copy that or use that.

This is the Arduino HardwareSerial : HardwareSerial.cpp
You can find more code at avrfreaks.net. Click on "Projects", search for "uart" and "usart" and try to find code that is compatible with the ATmega2560. Some projects have buffers and many functions, others are very simple.

The result might not be compatible with other Arduino code (for example with interrupts). Why do you not want to use the Arduino Serial library ?