📄 uart_irq.h
字号:
if (pline2 < plast2)
{
memcpy(p3,buf2+plast2,1024-plast2);
p3 += (1024-plast2);
memcpy(p3,buf2,pline2);
p3 += pline2;
}
flag = 1;
plast2 = pline2;
}
else
pline2++;
}
else
pline2++;
if(pline2>1023)
pline2 = 0;
}
else
{
break;
}
default:
break;
}
}
rx_ready2 = 1;
VICVectAddr = 0x00;
}
/*********************************************************************************************************
** 函数名称 :IRQ_UART3Recv
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/
void __irq IRQ_UART3Recv(void)
{
uint32 i = 0;
uint32 IIR = 0;
// UART0接收中断处理
while (((IIR = U3IIR) & 0x01) == 0) // 若尚有中断待处理
{
switch (IIR & 0x0e)
{
// RDA中断处理入口
case 0x04:
//tc=3;
*(buf4+pline4)= U3RBR;
if(*(buf4+pline4)==0x0a)
{
if(tx_busy3==0)
{
pline4++;
flag3 = 0;
if (pline4 > plast4)
{
memcpy(p5,buf4+plast4,pline4-plast4);
p5 += (pline4-plast4);
pline5 += (pline4-plast4);
}
if (pline4 < plast4)
{
memcpy(p5,buf4+plast4,1024-plast4);
p5 += (1024-plast4);
pline5 += (1024-plast4);
memcpy(p5,buf4,pline4);
p5 += pline4;
pline5 += pline4;
}
flag3 = 1;
plast4 = pline4;
}
else
pline4++;
}
else
pline4++;
if(pline4>1023)
pline4 = 0;
if(pline5 > 900)
{
memset(buf5,0,1024);
p5 = buf5;
pline5 = 0;
}
break;
// CTI中断处理入口
case 0x0c:
U3Rcv_New = 1;
if( *(p4+pline4) != '\0')
{
//tc=3;
*(buf4+pline4)= U3RBR;
if(*(buf4+pline4)==0x0a)
{
if(tx_busy3==0)
{
pline4++;
flag3 = 0;
if (pline4 > plast4)
{
memcpy(p5,buf4+plast4,pline4-plast4);
p5 += (pline4-plast4);
}
if (pline4 < plast4)
{
memcpy(p5,buf4+plast4,1024-plast4);
p5 += (1024-plast4);
memcpy(p5,buf4,pline4);
p5 += pline4;
}
flag3 = 1;
plast4 = pline4;
}
else
pline4++;
}
else
pline4++;
if(pline4>1023)
pline4 = 0;
}
else
//rx_ready3 = 1;
break;
default:
//rx_ready3 = 1;
break;
}
}
rx_ready3 = 1;
VICVectAddr = 0x00;
}
/*********************************************************************************************************
** 函数名称 :UART1_RecvByte
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/
char UART1_RecvByte(char rcv_data)
{
// char rcv_data;
while((U1LSR&0x01)==0); //查询数据是否接收完毕
rcv_data = U0RBR;
return(rcv_data);
}
/*********************************************************************************************************
** 函数名称 :IRQ_UART1Recv
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/
void __irq IRQ_UART1Recv(void)
{
uint32 i = 0;
uint32 IIR = 0;
// UART0接收中断处理
while (((IIR = U1IIR) & 0x01) == 0) // 若尚有中断待处理
{
switch (IIR & 0x0e)
{
// RDA中断处理入口
case 0x04:
tc = 5;
*(buf0+pline0)= U1RBR;
if (*(buf0+pline0)==0x0a)
{
if(tx_busy1 == 0)
{
pline0++;
flag0 = 0;
if(pline0 > plast0)
{
memcpy(p1,buf0+plast0,pline0-plast0);
p1 += (pline0-plast0);
pline1 += (pline0-plast0);
}
if(pline0 < plast0)
{
memcpy(p1,buf0+plast0,1024-plast0);
p1 += (1024-plast0);
pline1 += (1024-plast0);
memcpy(p1,buf0,pline0);
p1 += pline0;
pline1 += pline0;
}
flag0 = 1;
plast0 = pline0;
}
else
pline0++;
}
else
pline0++;
if(pline0 > 1023)
pline0 = 0;
if(pline1 > 900)
{
memset(buf1,0,1024);
pline1 = 0;
p1 = buf1;
}
break;
// CTI中断处理入口
case 0x0c:
tc=5;
if(*(buf0+pline0) != '\0')
{
*(buf0+pline0)= U1RBR;
if (*(buf0+pline0)==0x0a)
{
if(tx_busy1 == 0)
{
pline0++;
flag0 = 0;
if(pline0 > plast0)
{
memcpy(p1,buf0+plast0,pline0-plast0);
p1 += (pline0-plast0);
}
if(pline0 < plast0)
{
memcpy(p1,buf0+plast0,1024-plast0);
p1 += (1024-plast0);
memcpy(p1,buf0,pline0);
p1 += pline0;
}
flag0 = 1;
plast0 = pline0;
}
else
pline0++;
}
else
pline0++;
if(pline0 > 1023)
pline0 = 0;
}
else
break;
default:
break;
}
}
rx_ready0 = 1;
VICVectAddr = 0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -