4.2 软件模拟 SPI 驱动参考
无需硬件 SPI 外设,GPIO 模拟实现
软件模拟 SPI
当 MCU 硬件 SPI 资源不足或需要更灵活的引脚分配时,可用 GPIO 模拟 SPI 时序。 以下代码适配任意平台,仅需 4 个 GPIO 引脚。
spi_soft.c
#define Rom_csH P1_1 = 1
#define Rom_csL P1_1 = 0
#define MOSIH P1_2 = 1
#define MOSIL P1_2 = 0
#define Rom_sckH P1_3 = 1
#define Rom_sckL P1_3 = 0
#define MISO P1_4
void zk_init(void)
void Send_Byte(unsigned char out)
}
unsigned char Get_Byte(void)
{
unsigned char i;
unsigned char read_dat;
Rom_sckH;
for(i=0;i<8;i++)
return(read_dat);
}
void SPI_Address(unsigned char AddH,unsigned char AddM,unsigned char AddL)
unsigned long r_dat_bat(unsigned long address,unsigned long DataLen,unsigned char *pBuff)
{
unsigned long i;
unsigned char addrHigh;
unsigned char addrMid;
unsigned char addrLow;
addrHigh=address>>16;
addrMid=address>>8;
addrLow=(unsigned char)address;
Rom_csL;
Send_Byte(0x03);
SPI_Address(addrHigh,addrMid,addrLow);
for(i=0;i<DataLen;i++)
*(pBuff+i)=Get_Byte();
Rom_csH;
return i;
}
unsigned char gt_read_data(unsigned char* sendbuf , unsigned char sendlen , unsigned char* receivebuf, unsigned int receivelen)
for(i = 0; i < receivelen;i++)
Rom_csH;
return 1;
}

