📄 uart_handler.c
字号:
#include "ub4020evb.h"
#include "sep4020.h"
#include "intc.h"
#include "uart.h"
//********************UART0中断处理函数******************//
void Uart0IntHandle(void)
{
int a = ReadReg(UART0_IIR);
switch ((a &0X0E) >> 1) //判断bit【3:1】中断源标号
{
case 3:
RlsIsrUart0(); //接收数据状态中断
return ;
break;
case 2:
RdaIsrUart0(); //接收FIFO中的数据达到触发级中断
return ;
break;
case 6:
TmoIsrUart0(); //超时中断
return ;
break;
case 1:
ThrIsrUart0(); //传输FIFO中断
return ;
break;
case 0:
MdsIsrUart0(); //状态发生变化中断
return ;
break;
default:
return ;
}
}
void RlsIsrUart0(void) //用于返回接收数据状态中断的硬件错误
{
U32 i;
i = ReadReg(UART0_LSR);
}
void RdaIsrUart0(void) //用来实现读取接收FIFO中的数据,并把接收的数据打印出来
{
U32 i;
U8 a[9];
for(i=0; i<8; i++)
a[i] = read_reg(UART0_RXFIFO); //读取接收FIFO里的数据
a[8] = '\0';
Prints((char *)a,0x10005000);
return;
}
void TmoIsrUart0(void) //用来实现超时中断
{
// volatile U8 a[2]={0,0};
U32 i;
volatile U32 a;
// S8 *s;
// s = "timer out now!!\n";
for(i=0; i<8; i++)
a = ReadReg(UART0_RXFIFO);
Prints("timer out now!!\n",0x10005000);
return;
}
void ThrIsrUart0(void) //用来把要发送的数据放入传输FIFO
{
U32 i;
i = ReadReg(UART0_IIR);
}
void MdsIsrUart0(void) //用来返回modem状态发生变化中断的硬件错误
{
U32 i;
i = ReadReg(UART0_MSR);
}
//********************UART1中断处理函数******************//
void Uart1IntHandle(void)
{
int a = ReadReg(UART1_IIR);
switch ((a &0X0E) >> 1) //判断bit【3:1】中断源标号
{
case 3:
RlsIsrUart1(); //接收数据状态中断
return ;
break;
case 2:
RdaIsrUart1(); //接收FIFO中的数据达到触发级中断
return ;
break;
case 6:
TmoIsrUart1(); //超时中断
return ;
break;
case 1:
ThrIsrUart1(); //传输FIFO中断
return ;
break;
case 0:
MdsIsrUart1(); //状态发生变化中断
return ;
break;
default:
return ;
}
}
void RlsIsrUart1(void) //用于返回接收数据状态中断的硬件错误
{
U32 i;
i = ReadReg(UART1_LSR);
}
void RdaIsrUart1(void) //用来实现读取接收FIFO中的数据,并把接收的数据打印出来
{
U32 i;
U8 a[9];
for(i=0; i<8; i++)
a[i] = read_reg(UART1_RXFIFO); //读取接收FIFO里的数据
a[8] = '\0';
Prints((char *)a,0x10006000);
return;
}
void TmoIsrUart1(void) //用来实现超时中断
{
U32 i;
volatile U32 a;
for(i=0; i<8; i++)
a = ReadReg(UART1_RXFIFO);
Prints("timer out now!!\n",0x10006000);
return;
}
void ThrIsrUart1(void) //用来把要发送的数据放入传输FIFO
{
U32 i;
i = ReadReg(UART1_IIR);
}
void MdsIsrUart1(void) //用来返回modem状态发生变化中断的硬件错误
{
U32 i;
i = ReadReg(UART1_MSR);
}
//********************UART2中断处理函数******************//
void Uart2IntHandle(void)
{
int a = ReadReg(UART2_IIR);
switch ((a &0X0E) >> 1) //判断bit【3:1】中断源标号
{
case 3:
RlsIsrUart2(); //接收数据状态中断
return ;
break;
case 2:
RdaIsrUart2(); //接收FIFO中的数据达到触发级中断
return ;
break;
case 6:
TmoIsrUart2(); //超时中断
return ;
break;
case 1:
ThrIsrUart2(); //传输FIFO中断
return ;
break;
case 0:
MdsIsrUart2(); //状态发生变化中断
return ;
break;
default:
return ;
}
}
void RlsIsrUart2(void) //用于返回接收数据状态中断的硬件错误
{
U32 i;
i = ReadReg(UART2_LSR);
}
void RdaIsrUart2(void) //用来实现读取接收FIFO中的数据,并把接收的数据打印出来
{
U32 i;
U8 a[9];
for(i=0; i<8; i++)
a[i] = read_reg(UART2_RXFIFO); //读取接收FIFO里的数据
a[8] = '\0';
Prints((char *)a,0x10007000);
return;
}
void TmoIsrUart2(void) //用来实现超时中断
{
U32 i;
volatile U32 a;
for(i=0; i<8; i++)
a = ReadReg(UART2_RXFIFO);
Prints("timer out now!!\n",0x10007000);
return;
}
void ThrIsrUart2(void) //用来把要发送的数据放入传输FIFO
{
U32 i;
i = ReadReg(UART2_IIR);
}
void MdsIsrUart2(void) //用来返回modem状态发生变化中断的硬件错误
{
U32 i;
i = ReadReg(UART2_MSR);
}
//********************UART3中断处理函数******************//
void Uart3IntHandle(void)
{
int a = ReadReg(UART3_IIR);
switch ((a &0X0E) >> 1) //判断bit【3:1】中断源标号
{
case 3:
RlsIsrUart3(); //接收数据状态中断
return ;
break;
case 2:
RdaIsrUart3(); //接收FIFO中的数据达到触发级中断
return ;
break;
case 6:
TmoIsrUart3(); //超时中断
return ;
break;
case 1:
ThrIsrUart3(); //传输FIFO中断
return ;
break;
case 0:
MdsIsrUart3(); //状态发生变化中断
return ;
break;
default:
return ;
}
}
void RlsIsrUart3(void) //用于返回接收数据状态中断的硬件错误
{
U32 i;
i = ReadReg(UART3_LSR);
}
void RdaIsrUart3(void) //用来实现读取接收FIFO中的数据,并把接收的数据打印出来
{
U32 i;
U8 a[9];
for(i=0; i<8; i++)
a[i] = read_reg(UART3_RXFIFO); //读取接收FIFO里的数据
a[8] = '\0';
Prints((char *)a,0x10008000);
return;
}
void TmoIsrUart3(void) //用来实现超时中断
{
// volatile U8 a[2]={0,0};
U32 i;
volatile U32 a;
// S8 *s;
// s = "timer out now!!\n";
for(i=0; i<8; i++)
a = ReadReg(UART3_RXFIFO);
Prints("timer out now!!\n",0x10008000);
return;
}
void ThrIsrUart3(void) //用来把要发送的数据放入传输FIFO
{
U32 i;
i = ReadReg(UART3_IIR);
}
void MdsIsrUart3(void) //用来返回modem状态发生变化中断的硬件错误
{
U32 i;
i = ReadReg(UART3_MSR);
}
/*
void EntUart0(void) //UART0通道使能
{
mask_irq(INT_UART0);
Uart0IntHandle();
unmask_irq(INT_UART0);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -