SPI收发

//1秒调用1次
uchar SlaveStatus = 0;
//默认阶段分析
//阶段1 度命令
//阶段2读地址
//阶段3读数据
//阶段4返回数据
uchar Index = 0;//指示数据标号的
//uchar TxCnt = 0;//发送数据的下标
uchar RxData[5]={0,0,0,0,0x00};
uchar TxData[2]={0xaa,0x01};
volatile bit RxOK=0;
volatile bit TxOK=0;

extern uchar MyKeyValue;
uchar CrcRx=0x00;
uchar CrcTx=0x00;
extern uchar Errlinkcnt;
extern volatile bit ErrLinkFlag;
uchar SPITXRXPro(void)
{
  uchar Temp=0; 
  if(!B_SpiTxRx) return 0;  
  B_SpiTxRx=0;
  Temp = SSPBUF ;
  if(SlaveStatus==0) 
   {   
      if(Temp==0xA0)//接收到写指令
      {
         SlaveStatus=1;  
         return 0;
      }
      if(Temp==0xb0)//接收到读指令
       {
        SSPOV=0;
        WCOL=0;
        SSPBUF=TxData[0];
        SlaveStatus=5; 
       }
       return 0;
   }
  if(SlaveStatus==1) 
   {
      if(Temp==0x05)
        {
          SlaveStatus=2;
          Index = 0;//清零
          return 0;
        }
      //通信不对
      SlaveStatus=0;
      return 0;
   }
 if(SlaveStatus==2) 
   {
      if(Index<4)
        {
           RxData[Index] = Temp ;
           Index++;
           return 0;
        }
      //结束最后一帧数据的
      RxData[4] = Temp ;
      Index = 0;
      SlaveStatus=3;
      return 0;
   }
 //计算校验和
 if(SlaveStatus==3) 
   {
      CrcRx = SSPBUF ;
      //清零状态
      SlaveStatus=0;
      //if(CrcRx==CRC8( RxData,5))
      //{
      //  ShowDataChange();
    //    Errlinkcnt=0;
    //    ErrLinkFlag=0;
     // }
      return 0;
   }

 if(SlaveStatus==5) 
   {
      WCOL=0; 
      //发送按键数值
      SSPBUF=TxData[1];
      SlaveStatus=6;
      return 0;
   }
 if(SlaveStatus==6) 
   {
      WCOL=0;
      //计算CRC并发送
      //CrcTx = CRC8( TxData,2);
      SSPBUF = CrcTx;
      //结束发送操作  
      SlaveStatus=0; 
      return 0;
   }
  return 0;
}

SPI(串行外设接口)是一种串行通信协议,用于在微控制器或其他集成电路之间进行数据传输。SPI接口通常由一个主设备和一个或多个从设备组成。 SPI通信是全双工的,意味着主设备可以同时发送和接收数据。通信通过四个线路进行:时钟线、主输入/从输出(MISO)线、主输出/从输入(MOSI)线和片选(Chip Select,CS)线。主设备通过将时钟线设置为高电平和低电平来控制通信的同步。 在SPI通信中,主设备通过选择特定的从设备,将其片选线置为低电平,以标识正在与该设备通信。然后,主设备通过MOSI线发送数据,从设备通过MISO线接收数据。同时,从设备也可以将数据通过MISO线发送给主设备。 SPI的操作速度相对较快,可以在较短的时间内传输大量数据。SPI接口通常被用于与外部设备进行通信,如存储器芯片、传感器、显示屏等。 对于SPI接口的收发数据操作,主设备首先通过设置适当的寄存器或控制位来配置SPI接口的通信参数,如数据位长度、时钟频率等。然后,主设备将待发送的数据写入发送缓冲区,通过MOSI线发送出去。同时,主设备可以通过读取接收缓冲区来接收从设备发送的数据,通过MISO线获取。 SPI收发数据操作是基于硬件的,需要根据具体的使用平台和设备进行正确的配置和编程。在编程过程中需要注意时钟频率、数据位顺序、传输模式等细节,以确保数据的正确传输和接收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值