报歉楼主,昨天我没时间看贴。我只是帮你顶了一下。希望楼上解决问题以后公布问题所在。 "测试表明,当模块掉线以后,串口接收指示灯不再闪烁。而此时程序运行灯闪烁正常。 因为当模块掉线以后,如果我用镊子将LPC922的复位引脚碰一下GND,让LPC922复位的话,LPC922是可以重新通信的。" 我认为是单片机进入一种异常状态。 可能的情况有: 1、串行口的配置改变。看你掉线的频率,这个可能性较小。 2、串行口的程序进入一个死锁状态。就像所长说的那样。 看现象,因为发光二极管不闪。 在函数void recive_isr(void) interrupt 4中,只有ESR = 0; 会阻止进中断,使灯不闪。 这个函数中,如果接收到完整包,会禁止接收中断。 Flag.RxdEnd = 1; // 收到完整的一帧数据 Uart.RxdLen = Uart.RxdPoint; // ESR = 0; // 禁止接收中断 当然错误不在收函数里。我很怀疑因为某种错误,造成禁止中断后,执行不到开中断ESR = 1;的操作。 检查所有的开中断(ESR = 1;)条件,看在异常情况下,有没有死锁的可能。 ESR = 1; 在程序里共有4处,一个一个推敲吧。要考虑是在出现异常错误的情况。
|