Der USART kann einen Interrupt auslösen, wenn er ein Zeichen empfangen hat:
http://www.rn-wissen.de/index.php/UA...Mit_Interrupts
http://www.tschallener.net/AVR/intr_usart.pdf

Der RP6 verwendet das offensichtlich schon in seiner Lib:
Code:
/**
 * UART receive ISR.
 * Handles reception to circular buffer.
 */
ISR(USART_RXC_vect)
{	
	static volatile uint8_t dummy;
	if(((uint8_t)(write_size - read_size)) < UART_RECEIVE_BUFFER_SIZE) {
		uart_receive_buffer[write_pos++] = UDR;
		write_size++;
		if(write_pos > UART_RECEIVE_BUFFER_SIZE) 
			write_pos = 0;
	}
	else {	
		dummy = UDR;
		uart_status = UART_BUFFER_OVERFLOW;
	}
}
(Aus RP6uart.c)

In RP6RobotBaseLib.c wird in initRobotBase() der entsprechende Receive-Interrupt freigegeben:

UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);