Два независимых буфера для RX и TX.
К примеру, в LPC1768 кажется нет индикатора заполненности TX буфера. Как и в LPC21xx, LPC111x. Так что забиваются по полному освобождению сразу 16 байт.
В RX прерывании, если стоит уровень срабатывания 14, то можно вычитывать из RBR сразу 14 раз подряд, анализируя младший бит LSR.
Пример обработчика
Код
void UART0_IRQHandler()
{
switch(U0IIR & 0x0f)
{ uInt lsr;
default:
U0LSR;
U0RBR;
break;
case 0x02: //THRE interrupt
proc_tx(&uart0);
break;
case 0x0C: //timeout
case 0x06: //Rx line status error
case 0x04: //Receive data available
while ((lsr = U0LSR) & 0x01) proc_rx(&uart0, U0RBR, lsr & 0x9e);
break;
}
NVIC_ClearPendingIRQ(UART_IRQn);
}
//uart0 - структура с данными