SPI讀操作碼0x80說明 lSPI_SendByte(addr|0x80);


再來貼一次,SPI在讀寫某芯片【芯片不同可能有差異】寄存器地址的時候,一般都會進行addr|0x80,實際上0x80是一個操作碼。相當於把最高位置1,群里有人說也是定位作用。

sx1278的讀寫時序圖:

 

/**************************************************************************
 * 函數名:SPI_SendByte
 * 描述  :SPI模塊發送函數
 * 輸入  :發送數據
 * 返回  :返回數據
 *************************************************************************/
u8 SPI_SendByte(u8 byte)
{     
      u8 i = 0;
      u8 bit_r = 0;    
      for(i=0;i<8;i++)     // output 8-bit
      {    
        //MOSI_PIN=byte & 0x80;        //output 'byte' MSB to MOSI_PIN
        if(byte & 0x80)  //判斷最高位是否為1
            MOSI_H;
        else
            MOSI_L;
          
          byte <<= 1;                 // shift next bit into MSB..
          
          SCLK_H;
         
          bit_r<<=1;
          if(MISO_G) bit_r++;
                    
         SCLK_L;
          
        //SCK_PIN=1 ;                 // Set SCK_PIN high..
        //byte|=MISO_PIN;            // capture current MISO_PIN bit
        //SCK_PIN=0;                 // then set SCK_PIN low again
      }
      return(bit_r);                         // return read byte
}
 
 
 
/**************************************************************************
 * 函數名:SPI_ReadRegister
 * 描述  :SPI讀取寄存器數值
 * 輸入  :寄存器地址
 * 返回  :數據
 *************************************************************************/
u8 SPI_ReadRegister (u8 addr)
{
    u8 Result;
 
    CS_L;    //nSEL = 0;  
 
    SPI_SendByte(addr);        //write data into the SPI register
    Result = SPI_SendByte(0xFF);  //0XFF其實就是偽字節
 
    CS_H;    //nSEL = 1;
    return(Result);
}
 
/**************************************************************************
 * 函數名:SPI_WriteRegister
 * 描述  :SPI寫寄存器數值
 * 輸入  :寄存器地址,數值
 * 返回  :無
 *************************************************************************/
void SPI_WriteRegister (u8 addr, u8 value)
{
 
    CS_L;                  //nSEL = 1;                             
           
    SPI_SendByte(addr|0x80);            //0X80 spi的最高位是一般協議定位命令位,是讀數據或寫數據標識 
    SPI_SendByte(value);
 
    CS_H;                  //nSEL = 1;
 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM