USART ISR keeps repeating 4 times
It appears that the design of your code is such that when a byte is received in the UART, you wish to dispose of that byte and respond by transmitting a "t".

The UART shares a common receive/transmit buffer register. Since your UART receive routine is interrupt driven, you should immediately read the received character before putting the response in the buffer otherwise you will retrigger the receive interrupt when you exit. 

There is also no reason to have the 'while' code in the uart_flush routine since you know there is a character in the buffer based on the fact that an interrupt brought you to this point. Just read the buffer register.

Here is a simplified version of a corrected ISR without the functions:

ISR(USART_RX_vect) {
     unsigned char dummy;
     dummy = UDR0;                     // dump the rcvr buffer
     while (!( UCSR0A &amp; (1&lt;&lt;UDRE0)));  // wait until the register is free                     
     UDR0 = data;                      // load xmt data in the register
}