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