ADI 技术
直播中

江根磊

7年用户 1047经验值
私信 关注
[问答]

ADUC845的SPI接口赋值不成功

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("rn");
}
问题:一开始给SPI从机中的SPIDAT赋的初值0x55可以被SPI主接受到,
但后面在中断if..else里给SPIDAT赋得值好像都没有成功。从机中SPIDAT的值就是从SPI主接受到的值。中断肯定执行了,因为接收到了SPI主发过来的数。
请高手指教!

回帖(1)

张虎豹

2018-11-20 09:56:20
如果能确定"中断肯定执行了",有可能是Slave不能在中断中为SPIDAT赋值。
你可以试试,只在中断中判断作标志位,而在主程序中通过对该标志位判断,再为SPIDAT赋值。
附件

举报

更多回帖

发帖
×
20
完善资料,
赚取积分