При включенном контроле потока когда взводится RTS, невозможно освободить место в буфере его чтением, поскольку постоянно возникает прерывание RBR. Из за этого получается замкнутый круг, в буфер не положить потому что он полон, из буфера не прочитать потому что постоянно в прерывании висим.
Код
switch (UartIntId & 0xF)
{
case UART_RX_ERROR_INTERRUPT_ID: // Receive Line Status
case UART_RX_TIMEOUT_INTERRUPT_ID: // Character Time-out Indicator
case UART_RX_TRIGGER_INTERRUPT_ID: // Receive Data Available
// Read the line state of the UART
tmp = regs->LSR;
do
{
if(tmp & UART_LSR_OE)
{
// Overrun Error
pUartInfo->Data.UartStatus.overrun = 1;
}
if (tmp & UART_LSR_BI)
{
// Break Indicator
pUartInfo->Data.UartStatus.break_ind = 1;
}
else if (tmp & UART_LSR_FE)
{
// Framing Error
pUartInfo->Data.UartStatus.framing=1;
}
else if (tmp & UART_LSR_PE)
{
// Parity Error
pUartInfo->Data.UartStatus.parity = 1;
}
// Push a new data into the receiver buffer
if(ISRRxFreeSize()>0)
{
Data = regs->RBR;
PutRxByte(Data);
}
else
{
pUartInfo->Data.UartStatus.overflow = 1;
break;
}
// Read the line state of the UART
tmp = regs->LSR;
}
while(tmp & UART_LSR_RDR); // Is the hardware FIFO is empty?
.......
VICADDRESS=0; //reset VIC
return;
Что не так делаю, подскажите?
Сообщение отредактировал G_K - Mar 26 2011, 18:12