两个串口,分别调试没什么问题,一起跑的时候大部分时间也没什么问题;<br />如果两个波特率设置的相同,优先级低的会丢码;<br />波特率差别较大的时候不明显。<br /><br />目前怀疑是两个串口中断有冲突,但改成嵌套方式还是不行;<br />听到有人说需要分时保护,不是很明白,希望大家帮助一下,谢谢!<br /><br />两个中断的程序基本是一样的,uart1设为高优先级,会屏蔽uart0的中断<br />串口中断里面是缓冲队列操作<br /><br /><br />void IRQ_UART0(void)<br />{<br /> uchar iir;<br /><br /> uint32 bak;<br /> <br /> bak = VICIntEnable; // 备份当前VICIntEnable的值<br /> VICIntEnClr = (1 << 6) | (1 << 13) | (1 << 5);// | (1 << 14); <br /> // 禁止当前优先级中断及低优先级中断<br /> VICVectAddr = 0x00; // 清除中断逻辑,以便VIC可以响应更高优先级IRQ中断<br /> EnableIRQ();<br /><br /> iir = U0IIR;<br /> <br /> switch (iir & 0x0e)<br /> {<br /> case 0x04:<br /> {<br /> *RcvWrite0 = U0RBR;<br /> <br /> if(RcvWrite0 == (RcvBuf0 + SerialRCV0 - 1))<br /> {<br /> RcvWrite0 = RcvBuf0; <br /> }<br /> else <br /> {<br /> RcvWrite0++;<br /> }<br /> <br /> RcvNum0++; <br /> } break;<br /> <br /> case 0x02:<br /> {<br /> if(SendNum0 == 0)<br /> {<br /> SignSending0 = 0; // Send Finish <br /> }<br /> else <br /> {<br /> U0THR = *SendRead0;<br /> <br /> if(SendRead0 == (SendBuf0 + SerialSEND0 - 1))<br /> {<br /> SendRead0 = SendBuf0; <br /> }<br /> else <br /> {<br /> SendRead0++;<br /> }<br /> <br /> SendNum0--;<br /> } <br /> } break;<br /><br /> default: break; <br /> }<br /> <br /> VICIntEnable = bak; <br />} |
|