我在 LPC1769 上的串行通信有一些问题,计算机(Qt 开发的软件)和 LPC1769 之间的两种方式都有一些通信。从 LPC 到计算机的通信工作正常,但从计算机到 LPC 的通信不正常。
我只能从发送的缓冲区接收前两个字节。
void UART1_Init(void)
{
PCONP |= (1<<4); // UART1 ON
PCLKSEL0 &= ~(0x11 << 8);
PCLKSEL0 |= (0x1 << 8);
U1LCR |= 1 << 7; // 0x80 line control register (DLAB=1)
U1DLM = 0x00; //0x001A = 26
U1DLL = 0x1A; //DLM. DLL . DLL 4Mhz
U1LCR &= 0x7f; //DLAB=0 8bits no parity
U1FCR |= 0x01;
SET_PINSEL(PIN_TX1,PINSEL_FUNC1);
SET_PINSEL(PIN_RX1,PINSEL_FUNC1);
ISER0 = 1<<6; // interruptions UART1.
U1IER = 0x03;
}
void UART1_IRQHandler(void)
{
uint32_t IIR;
uint8_t IIRenCruso, IIRpendiente;
uint8_t temp, lsr;
do
{
IIR = U1IIR;
IIRpendiente = IIR & 0x01;
IIRenCruso = ( IIR >> 1 ) & 0x07;
switch(IIRenCruso)
{
case 3:
lsr = U0LSR;
if ( lsr & (0x2|0x4|0x8|0x16|0x128) )
{
temp = U0RBR;
return;
}
case 2: //Recieve data available (RDA)
pushRx(U1RBR);
break;
case 1: //THRE Interrupt
temp = popTx();
if(temp != 0xff)
U1THR = temp;
else{
f_fin_tx = 1;
vaciarBuff('T');
}
break;
default:
break;
}
} while( ! ( IIRpendiente & 0x01 ) );
}