使用轮询机制进行SPI通信时数据丢失

时间:2014-10-18 19:52:47

标签: c driver signal-processing spi

我正在通过SPI编码2个DSP之间的通信。启动代码非常简单,DSP-1正在发送而DSP-2正在接收(当然,DSP-1也接收但我不关心到目前为止,反之亦然,DSP-2)

工作正常。正确发送和接收了一千个16位数据。

但是,当我在DSP-1(主站)端添加随机延迟时,我发现DSP-2开始丢失一些数据。令我感到困惑的是,我没有改变DSP-2方面的任何接收,而且我经常轮询。

所以,为什么发送方的延迟可能会影响接收方呢? (我仔细检查了DSP1确实发送了正确的序列。)

而我正在考虑转换为中断机制,是否会为所有人解决这类问题?

我的DSP2的轮询代码是:

for(;;)  //my main program for receving
{
  spi_xmit(data);  //For sending, not care so far

  while(SpiaRegs.SPIFFRX.bit.RXFFST == 0) {} //polling

  while(SpiaRegs.SPIFFRX.bit.RXFFST != 0) 
  {
    rdata[seq] = SpiaRegs.SPIRXBUF;
    seq++;
  } 

  if(seq>1000) break;
  }

0 个答案:

没有答案