我的串口进了中断就出不来了
代码如下:
unsigned char UART0_Init(unsigned long baud)
{
unsigned long bak;
PINSEL0 = (PINSEL0 & 0xfff0ffff)|0x00050005; //选择管脚为UART1
/**设置串口波特率**/
U0LCR = 0x83;
bak = (Fpclk /16)/baud;
U0DLM = bak >>8;
U0DLL = bak & 0xff;
U0LCR = 0x03;
U0FCR = 0x81;
U0IER = IER_RBR | IER_THRE | IER_RLS ; /* Enable UART0 interrupt */ //
VICIntSelect = 0x00000000; //设置所有通道为IRQ中断
VICVectCntl0 = 0x20|0x06; //UART0分配到IRQ slot0,即具有最高优先级
VICVectAddr0 = (unsigned long)IRQ_UART0; //设置UART的向量地址
VICIntEnable = 1<<0x06; //使能UART中断 return(1);
}
/*串口0中断处理函数*/
void IRQ_UART0 (void) __irq
{
unsigned char i;
IOCLR0=0x40000000;
if((U0IIR & 0x0E) == 0x0C||(U0IIR & 0x0E) == 0x04||(U0LSR & 0x080)!=0) //如果我这里不加(U0LSR & 0x080)!=0的话,它进不了if语句执行,U0LSR & 0x080)!=0表明串口传输有帧错误。怎样能使它无帧传输的错误,而且它进了中断就死在里面了,跳不出去了,真是郁闷啊。 {
IOCLR0=0x20000000;
rcv_new0 = 1; //设置接收到新的数据标志
}
for(i = 0; i < 8; i ++) //FIFO使能时设为8字节长度
{//IOCLR0=0x20000000;
rcv_buf0[i] = U0RBR; //读取FIFO的数据,并清除中断
if(rcv_buf0[i]=='\n')break;
}
VICVectAddr = 0x00; //中断处理结束,更新硬件优先级
return;
}
int main()
{ GPIOInit();
while(1)
{
IOSET0=0x20000000;
if(rcv_new0 == 1) //若串口0接收到数据,则rcv_new0 =1
{
rcv_new0 = 0;
UART0_SendBuf(); // 将串口0的数据发出去
}
}
}
大家看红字,问题主要在那边,看我的串口初始化有没有漏掉什么地方。不然它怎么不响应if((U0IIR & 0x0E) == 0x0C||(U0IIR & 0x0E) == 0x04)这个条件呢?而且也跳不出中断。我用的lpc2148的ARM