软件模拟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, u8 dat)
{
	u8 i    = 0;
	u8 temp = 0;
	for(i = 0; i < 8; i++) {
		if(BaseSPI.CLK) {BaseSPI.CLK(0);}    //上升沿移送数据
		if((dat << i) & 0x80) {                //数据输出
			if(BaseSPI.MOSI) {BaseSPI.MOSI(1);}
		} else {
			if(BaseSPI.MOSI) {BaseSPI.MOSI(0);}
		}
		if(BaseSPI.CLK) {BaseSPI.CLK(1);}    //移送数据
		temp<<=1;
		if(BaseSPI.MISO && BaseSPI.MISO())   //数据输入
		{
			temp |=1;
		}
	}
	return (temp);  //返回数据
}

----------------------------------------------------------------------------------------------------------------------------

2020-03-30:增加软件模拟SPI应用文件----FM25CL64芯片操作

FM25CL64.h

/**
  ************************************* Copyright ******************************   
  *                 (C) Copyright 2020,Wenkic,China, GCU.
  *                            All Rights Reserved
  *                              
  *                     By(Wenkic)
  *                    https://blog.csdn.net/Wekic
  *      
  * FileName   : FM25CL64.h   
  * Version    : v1.0		
  * Author     : Wenkic			
  * Date       : 2020-03-30         
  * Description:    
  * Function List:  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值