Что-то не понимаю, в чём дело. LPC2214/00
Если настраиваю UART1 на прерывание по Receive Data Available и при этом RX Trigger Level в U1FCR отличается от 0 (то есть граница срабатывания прерывания больше 1), обработчик не вызывается

Настройка UART1
CODE
#define LCR_DLAB 7
#define UART_FIFO_TRIGGER_4 1
#define FCR_RX_TRIGGER_LEVEL 6
U1LCR = (1 << LCR_DLAB) + 3;
U1DLL = ((PCLK / 16) / 9600) % 256;
U1DLM = ((PCLK / 16) / 9600) / 256;
U1LCR = 3;
U1FCR = (UART_FIFO_TRIGGER_4 << FCR_RX_TRIGGER_LEVEL) + 1;
U1IER = 0;
Включение прерываний
CODE
#define IER_RBR 0
#define VIC_SRC_UART1 7
VICVectAddr0 = (U32)UART1ReceiveInterruptHandler;
VICVectCntl0 = 0x20 | VIC_SRC_UART1;
VICIntEnable = 1 << VIC_SRC_UART1;
U1IER = 1 << IER_RBR;
На всяк случай обработчик
CODE
//
__irq void UART1ReceiveInterruptHandler(void)
{
int lsr;
//
IO2CLR = LED_2;
//
++UART1IrqCallCount;
//
UART1RecvBytesFIFO[UART1RecvBytesFIFONdx].length = 0;
UART1RecvBytesFIFO[UART1RecvBytesFIFONdx].errBmp = 0;
//
for ( lsr = U1LSR; (1 << LSR_RDR) & lsr; lsr = U1LSR )
{
//
UART1RecvBytesFIFO[UART1RecvBytesFIFONdx].bytes[UART1RecvBytesFIFO[UART1RecvByte
sFIFONdx].length] = U1RBR;
//
if ( ((1 << LSR_FE) | (1 << LSR_BI)) & lsr )
UART1RecvBytesFIFO[UART1RecvBytesFIFONdx].errBmp |= 1 << UART1RecvBytesFIFO[UART1RecvBytesFIFONdx].length++;
}
//
isr_mbx_send( UART1RecvQueue, (void *)(UART1RecvBytesFIFONdx++) );
//
if ( UART1RecvBytesFIFONdx >= szUARTRecvBytesFIFONdx )
UART1RecvBytesFIFONdx = 0;
//
U1IIR;
//
VICVectAddr = 0;
//
IO2SET = LED_2;
}
Для примера принимается 9 байтов, они есть в FIFO (я их после таймаута выгребаю по установленному флагу U1LSR.RDR), а прерывание не дёргается.