This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SPI

void main(void)

{

   InitSysCtrl();  

   /* 关中断 */  

   DINT;  

   IER = 0x0000;  

   IFR = 0x0000;    

   InitPieCtrl();    

   InitPieVectTable();  

   InitPeripherals();

   InitGpio();

   InitSpi();

   EINT;

   ERTM;  

for( ; ; )

{

LD_reset();

    LD_ReadReg(0x06);

    LD_ReadReg(0x06);

LD_ReadReg(0x35);

LD_ReadReg(0xb3);

}

}

void LD_WriteReg( unsigned char address, unsigned char dataout )

 {  

  GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中

  SPI_TX(0x04); // 发送 0x04

  delay(2);  

  GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中

  SPI_TX(address); //发送 address

  delay(2);

  GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中

  SPI_TX(dataout); // 发送 dataout

  delay(2);

 }

void  SPI_TX(unsigned char x)  

 {  

  if(Spi_TxReady()==1)

  {

   SpiaRegs.SPITXBUF=(x<<8);

  }  

  while(Spi_TxReady()!=1);

  {

  }

  GpioDataRegs.GPFDAT.bit.GPIOF3=1;  

 }

uchar LD_ReadReg(unsigned char address)

 {

  int a;

  GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中

  SPI_TX((0x05)); // 发送 0x05  

  GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中

  SPI_TX((address)); // 发送 address

  GpioDataRegs.GPFDAT.bit.GPIOF3=0; //低电平选中

  SPI_TX(0x07);

  a=SPI_RX();

  return  a;

 }

uchar  SPI_RX()  

 {  

   if(Spi_RxReady() == 1)                //当检测到SPI接收准备信号置1时,开始接收数据

   {            

   }

   while(Spi_RxReady()!=1);             //一直等待直到数据接收完成

   {

   }  

  GpioDataRegs.GPFDAT.bit.GPIOF3=1;

  return SpiaRegs.SPIRXBUF;                          //返回

 }

请专家帮我看看程序哪里错误了  头疼两天了

SPI初始化

void InitSpi(void)  

{

   /* loopback   8 bit data */  

   SpiaRegs.***.all = 0x08;   //数据下降沿输出 自测禁止 8位数据模式    

   SpiaRegs.***.all = 0x06;   //正常的SPI时钟方式 使能发送 禁止中断  

   SpiaRegs.SPIBRR = 0x1d;       //波特率=LSPCK/(SPIBRR+1)=1MHz

   SpiaRegs.***.all = 0x8a;   //退出初始状态      

}  

unsigned int Spi_TxReady(void)  

{  

   unsigned int i;  

   if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)  

   {  

       i = 0;  

   }  

   else  

   {  

       i = 1;  

   }  

   return(i);  

}  

unsigned int Spi_RxReady(void)  

{  

   unsigned int i;  

   if(SpiaRegs.SPISTS.bit.INT_FLAG==1)  

   {  

       i=1;  

   }  

   else  

   {  

       i=0;  

   }  

   return(i);    

}