Hallo,

Code:
   UCSRB |= 1<<(TXEN);                 // UART TX einschalten
    UCSRC |= 1<<(URSEL)|(3<<UCSZ0);     // Asynchron 8N1

   UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;

   DDRA = 0xff;         // Test LEDs
   PORTA = 0xff;
Das gehört nicht in die Endlosschleife. Die Einstellungen brauchen nur einmal durchlaufen werden.
Der Fehler ist aber etwas komplizierter.
Code:
   UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;

   UCSRB |= 1<<(TXEN);                 // UART TX einschalten
    UCSRC |= 1<<(URSEL)|(3<<UCSZ0);     // Asynchron 8N1
So sollte es klappen.

Im Datenblatt steht bei der Beschreibung des Bit URSEL vom Register UCSRC:
The UBRRH Register shares the same I/O location as the UCSRC Register...


Sollte das dann noch nicht funktionieren, schau einmal, ob du eine Optimierung im Compiler eingestellt hast.

Gruß

Jens