软件模拟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

你可能感兴趣的:(编程)