我把一个UART的例子移植到M4上了,显示屏有显示了,串口测试结果:按复位键上位机能收到数据,但是上位机发数据,显示屏上没有显示,用示波仪测量相应的RX/TX端口都有数据的波形变化。调试程序时发现UARTIntHandler(void)中断服务函数没响应(STARTUP里面已经注册好串口的中断处理了,UART0的IO也定义和配置好了,接收超时中断和接收中断都使能了),
以下是中断处理函数:
void
UARTIntHandler(void)
{
unsigned long ulStatus;
//
// 获取中断状态
//
ulStatus = UARTIntStatus(UART0_BASE, true);
//
// 清中断
//
UARTIntClear(UART0_BASE, ulStatus);
//
// 读FIFO到空
//
while(UARTCharsAvail(UART0_BASE))
{
*pbuff++=UARTCharGetNonBlocking(UART0_BASE); //放入RecBuff中
RecNum++; //接收数据个数加1
}
if(ulStatus&UART_INT_RT)//接收超时时,去main里显示接收到内容
RecFlag=TRUE; //置超时标记
}
以下是显示函数:
while(1)
{
if(RecFlag) //当把RecFlag改为:(RecFlag==0)时,下面的代码才能运行,在中断设断断了没有停下来,说明中断服务函数未响应。
{
RecFlag=FALSE;
//显示接收到的字符
GrContextForegroundSet(&g_sContext,ClrBlack);
GrRectFill(&g_sContext, &sRect);
GrContextForegroundSet(&g_sContext, ClrWhite);
GrContextFontSet(&g_sContext, &g_sFontCm20);
GrStringDraw(&g_sContext, RecBuff,RecNum, 150, 165, 0);
//发送接收到的字符
UARTSend(RecBuff, RecNum);
//清本次接收到的数据和数据个数,准备下一次接收
RecNum=0;
pbuff=RecBuff;
}
OSTimeDlyHMSM(0,0,0,50);
}
请帮忙分析是什么原因。谢谢!