132 lines
3.1 KiB
C
132 lines
3.1 KiB
C
/*************************************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; i<n; i++)
|
|
for(j=0; j<2; j++);
|
|
}
|
|
|
|
void spi_soft_init(spi_soft_t * p_spis,uint32_t cs_io,uint32_t wr_io, uint32_t rd_io, uint32_t data_io )
|
|
{
|
|
|
|
p_spis->csio = 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;i<cnt;i++)
|
|
{
|
|
GPIO_Pin_Clear(U32BIT(p_spis->wrio));
|
|
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
|