ソフトウェアシミュレーションSPI基礎関数--およびいくつかのフレームワーク思想


/*
    :
     ===》   ===》   ===》   

   :       ,                  
     :void FM25_IOInit(void);
        void FM25_CS(u8 IO);
        void FM25_CLK(u8 IO);
        void FM25_MOSI(u8 IO);
        u8 FM25_MISO(void);
   :    
     :
   //     
   SPI_Type FM25_SPI = {
	.CS   = FM25_CS,
	.CLK  = FM25_CLK,
	.MOSI = FM25_MOSI,
	.MISO = FM25_MISO};
                u8 Soft_SPI_RW(SPI_Type *BaseSPI, u8 dat)  ,  FM25_SPI   
    eg:
    u8 SPI_Send_Byte( u8 WRDat )
    {
        return Soft_SPI_RW( FM25_SPI, WRDat ); //         
    }
   :         
   :                   

*/
typedef struct _SPI
{
    //SPI  
    void (*CS)(u8)   ;      //     
    void (*CLK)(u8)  ;      //     
    void (*MOSI)(u8) ;      //  
    u8(*MISO)(void)  ;      //  
} SPI_Type;

/**
  * @Name    soft_SPI_Write
  * @brief     SPI     
  * @param   BaseSPI: [  ]
  **               dat: [  ]
  * @retval
  * @author   https://blog.csdn.net/Wekic
  * @Data    2020-03-29
 **/
u8 Soft_SPI_RW(SPI_Type BaseSPI, u