谢谢帮原子哥帮顶,目前知道的情况是:当主机在接受状态,接收到其中一个从机的信号后,本身的status中的RX_DR位置1 ,如果在主机切换到发送状态之前,又有从机从机发来信号,主机会将发来的数据存到寄存器中,并且本身的status中的RX_DR位重新置1。这时,如果切换到发送状态发送数据并且发送完成,status中寄存器TX_OK(忘了怎么写了,就是0x20)位置1.而此时,接收标志位在之前已经置1 ,读取status值时,会出现两个中断位为1,低4位为0的情况。这时,程序进行至if(sta &TX_OK),就会发现,虽然有两个标志位,且后四位代表power_up的位均为0,但是条件仍然成立,仍会返回正确的值。这种情况会对我们后面的传输过程有很大影响,我们测试发现,这种情况有可能使我们的程序跑死。目前的解决方法是:增加if语句的严谨性,将if(sta &TX_OK)扩充为:if((sta &TX_OK) &&((sta &RX_DR)==0)&&((sta &MAX_TX)==0)&&(sta &0x20)),简单来说就是只有一个中断标志位时,且power_up位正常为1时,程序才能进行下去。还没有想到更好的办法
谢谢帮原子哥帮顶,目前知道的情况是:当主机在接受状态,接收到其中一个从机的信号后,本身的status中的RX_DR位置1 ,如果在主机切换到发送状态之前,又有从机从机发来信号,主机会将发来的数据存到寄存器中,并且本身的status中的RX_DR位重新置1。这时,如果切换到发送状态发送数据并且发送完成,status中寄存器TX_OK(忘了怎么写了,就是0x20)位置1.而此时,接收标志位在之前已经置1 ,读取status值时,会出现两个中断位为1,低4位为0的情况。这时,程序进行至if(sta &TX_OK),就会发现,虽然有两个标志位,且后四位代表power_up的位均为0,但是条件仍然成立,仍会返回正确的值。这种情况会对我们后面的传输过程有很大影响,我们测试发现,这种情况有可能使我们的程序跑死。目前的解决方法是:增加if语句的严谨性,将if(sta &TX_OK)扩充为:if((sta &TX_OK) &&((sta &RX_DR)==0)&&((sta &MAX_TX)==0)&&(sta &0x20)),简单来说就是只有一个中断标志位时,且power_up位正常为1时,程序才能进行下去。还没有想到更好的办法
举报