Viola

用过ADUC845的SPI接口的请进

Viola 在 2013-1-21 建立的討論區
最後回覆由wangmigooo於2013-1-21提供

SPI主的程序大致是这样的:
uchar SendData[4] = {0xA1,0xA2,0xC3,0xC4};
SPICON = 0x33;     //Master , fcore/16, cpol="0",cpha=0
IEIP2 |= 0x01 ;    //Enable SPI interrupt
for(;;)
  {
   SPI_CS3 = 0;
   SPIDAT = SendData[temp];
   temp ++;
   if(temp>3) temp = 0;

   SPI_CS3 = 1;
   delay(1000);
  }
SPI从的程序大致:
SPICON = 0x23;     //Slave  , fcore/16, cpol="0",cpha=0
IEIP2 |= 0x01 ;    //Enable SPI interrupt
SPIDAT = 0x55;
void interrupt_spi() interrupt 7
{
DataRcv = SPIDAT;            //Auto clear the interrupt flag
if (DataRcv == 0xA1)
{
  SPIDAT = 0xF1;
}else if (DataRcv == 0xA2)
{
  SPIDAT = 0xF2;
}else if (DataRcv == 0xc3)
{
  SPIDAT = 0xF3;
}else
{
  SPIDAT = 0;
}
SCISendHex(DataRcv);
SCISendChar(' ');
SCISendHex(SPIDAT);
SCISendString("\r\n");
}
问题:一开始给SPI从机中的SPIDAT赋的初值0x55可以被SPI主接受到,
但后面在中断if..else里给SPIDAT赋得值好像都没有成功。从机中SPIDAT的值就是从SPI主接受到的值。中断肯定执行了,因为接收到了SPI主发过来的数。
请高手指教!

結果