我看了好几遍datasheet,试了好多遍,终于发现是例程初始化中开启了THRE中断,把它禁止后就能稳定的进入中断了。但又出现了新的问题,我在中断程序中把FIFO中的数据读出来,并设定标志,在主程序中调用显示子程序,将收到的数据显示出来后,延时一段再由主机发送1个“0xa0”,如此循环。但如果延时时间长些就显示不出前8个子节的数了。主要程序如下,请高手分析下!谢谢!<br /><br />int main()<br />{<br /> ...<br /> while (1)<br /> {<br /> UART0_SendData(0xa0);<br /> if (rcv_new0)// 检查接收标志,若接收到字符串则再将其发送回去<br /> { <br /> rcv_new0=0;<br /> buf_h = rcv_buf0[6]>>4;<br /> buf_l = rcv_buf0[6]&0x0F;<br /> LCD_Disp_Zm_l(1,2 ,48,numdot_l[buf_h]);<br /> LCD_Disp_Zm_l(2,2 , 0,numdot_l[buf_l]);<br /> DelayNS(65);<br /> }<br /> }<br />}<br /><br /><br />void DelayNS (uint32 dly)<br />{<br /> uint32 i;<br /> for ( ; dly>0; dly--) for (i=0; i<50000; i++);<br />}<br /><br />__irq __arm void IRQ_UART0(void)<br />{<br /> uint8 i = 0;<br /> if ((U0IIR & 0x0F) == 0x04)// 判断是否RDA中断<br /> {<br /> rcv_new0=1; // 设置接收到新的数据标志<br /> for (i=0; i<8; i++) rcv_buf0 = U0RBR;// 读取FIFO的数据,并清除中断<br /> VICVectAddr = 0x00; // 中断处理结束<br /> }<br />}<br />
|