Цитата(Цырен @ Sep 12 2007, 17:26)

Там тоже после установки в ноль RTLS не устанавливается, а, как прежде принимает значение 0х3.
FCR нельзя прочитать, это Write Only регистр, о чем тут уже 3 раза сказали.. То что вы видете под отладкой 0x3 - взято из другого регистра.
Цитата
Кто делал обработчик прерываний по приходу одного байта в UART, отзовитесь!!!
Ведь это такая распространенная задача, странно, что никто не сталкивался с подобной проблемой.
Я делал, TX fifo 14, RX fifo - 1. Никаких проблем не было.
Пример:
Код
#define UART_INTID_RXTH 0x04
#define UART_INTID_TXTH 0x02
void UART0VectoredIRQ (void) __irq
{
int status = U0IIR & 0xF;
if (status == UART_INTID_RXTH)
{
int ch = U0RBR;
hc_RxFlowControl( ch );
}
else if (status == UART_INTID_TXTH)
{
uart_con.TxQue0.busy = 0;
#ifdef UART_INTERRUPT_DRIVEN_DISPATCHER
uart_Dispatch();
#endif
}
VICVectAddr = 0; //Dummy write to signal end of interrupt
}
void uart_Init(void)
{
PINSEL0 |= 0x00050005; // Enable both UARTS RxDx and TxDx
U0LCR = 0x83; // DLAB + 8 bits, no Parity, 1 Stop bit
U0DLL = PCLK / (115200 * 16);// 115200 Baud Rate, 16 static divisor
U0DLM = 0;
U0LCR = 0x03; // DLAB = 0
U0IER = 0x03; // Rx interrupt/Tx interrupt
U0FCR = (1 << FCR_FIFO_EN)|(1 << FCR_TX_FIFO_RESET)|(FCR_RX_TRIGGER_LVL0);
VICVectCntl1 = _VICVectEN | isrUART0; //select a priority slot for a given interrupt
VICVectAddr1 = (unsigned)UART0VectoredIRQ; //pass the address of the IRQ into the VIC slot
VICIntEnable |= _vUART0; //enable interrupts from UART0 (bit6)
}