/*************************************CopyRight(c)************************************************ ** 江西吕布科技有限公司 ** www.lvbu.wang ************************************************************************************************** **Filename: **Version: **Author: **Date: **Description: ** ************************************************************************************************** **Version: **Modifier: **Datemodified: **Description: ** **************************************************************************************************/ #ifdef __cplusplus extern "C" { #endif /********************************************************************* * Include */ #include "spi_soft.h" #include "gpio.h" /********************************************************************* * Macros */ /********************************************************************* * Constants */ /********************************************************************* * Typedefs */ /********************************************************************* * Global Variables */ /********************************************************************* * Global Functions */ /********************************************************************* * External Variables */ /********************************************************************* * External Functions */ /********************************************************************* * Local Vriables */ static uint32_t csio=0; static uint32_t wrio=0; static uint32_t rdio=0; static uint32_t dataio=0; /********************************************************************* * Local Functions */ void spi_soft_delay_us(uint16_t n) { uint16_t i,j; for(i=0; icsio = cs_io; p_spis->wrio =wr_io; p_spis->rdio =rd_io; p_spis->dataio =data_io; GPIO_Set_Output(U32BIT(p_spis->csio) | U32BIT(p_spis->dataio)); GPIO_Pin_Set(U32BIT(p_spis->csio) | U32BIT(p_spis->dataio)); if(p_spis->wrio != 0) { GPIO_Set_Output(U32BIT(p_spis->wrio)); GPIO_Pin_Set(U32BIT(p_spis->wrio)); } if(p_spis->rdio != 0) { GPIO_Set_Output(U32BIT(p_spis->rdio) ); GPIO_Pin_Set(U32BIT(p_spis->rdio) ); } } void spi_soft_cs_enable(spi_soft_t * p_spis) { GPIO_Pin_Clear(U32BIT(p_spis->csio)); } void spi_soft_cs_disenable(spi_soft_t * p_spis) { GPIO_Pin_Set(U32BIT(p_spis->csio)); } void spi_soft_writebit(spi_soft_t * p_spis,uint8_t Data,uint8_t cnt) { unsigned char i; for (i=0;iwrio)); spi_soft_delay_us(5); if((Data&0x80)==0) { GPIO_Pin_Clear(U32BIT(p_spis->dataio)); } else { GPIO_Pin_Set(U32BIT(p_spis->dataio)); } spi_soft_delay_us(5); GPIO_Pin_Set(U32BIT(p_spis->wrio)); spi_soft_delay_us(5); Data<<=1; } } #ifdef __cplusplus } #endif