⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 采用32位嵌入式芯片SPCE3200(凌阳)设计的开发板,具有多媒体功能。其中包含了网络、SD卡、TV、UART等是全部十个C程序。
💻 C
字号:
//#include "Sys_Define.h"

#define PCLK 0x00000001
#define PCSN 0x00008000
#define PSO  0x00001000
#define PSI  0x00000800
#define P_SPI_MODE_CTRL			(volatile unsigned int*)(0x88110000)
#define P_NAND_GPIO_SETUP		(volatile unsigned int*)(0x8820002C)		
#define P_NAND_GPIO_PULL		(volatile unsigned int*)(0x88200030)
#define P_SPI_INTERFACE_SEL		(volatile unsigned int*)(0x882000a4)
#define P_NAND_GPIO_INPUT		(volatile unsigned int*)(0x8820006c) 
#define P_IOB_GPIO_SETUP        (volatile unsigned int*)(0x8820004C)

#define enc28J60ChipSelect() *P_IOB_GPIO_SETUP &= ~0x01
#define enc28J60ChipDeSelect() *P_IOB_GPIO_SETUP |= 0x01

void delay( unsigned short time )
{
	unsigned short i;
	for(i=0;i<time;i++);
}
//以下为使用软件模拟SPI时序方式实现SPI的代码
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/****************************************************************************************
*  	Function: 
*  	Description: 初始化SPI接口,用软件模拟时序方式实现SPI
*  	Syntax: 
*	Modify: 
*	parameter:  无
*  	Returns:    无
*  	Notes: 
****************************************************************************************/
void InitSPI()		//初始化SPI
{
	*P_SPI_INTERFACE_SEL &= ~0x00000100;	//禁能SPI	
	*P_SPI_MODE_CTRL = 0x0;	//禁能
	*P_NAND_GPIO_PULL |= 0x00009801;
	*P_NAND_GPIO_SETUP |= 0x90018000;
	*P_NAND_GPIO_SETUP &= ~0x08000000;
	*P_IOB_GPIO_SETUP |= 0x0100;
}

/****************************************************************************************
*  	Function: 
*  	Description: 信号线上发送1字节数据
*  	Syntax: 
*	Modify: 
*	parameter:  unsigned char ucData 要发送的1字节数据
*  	Returns:    无
*  	Notes: 
****************************************************************************************/
void putSPIchar(char ucData)
{
	unsigned char i;
	*P_NAND_GPIO_SETUP &= ~PCLK;		//时钟线置0
	for(i=8;i>0;)
	{
		i--;
		if( (ucData>>i) & 0x01 )
		{
			*P_NAND_GPIO_SETUP |= PSO;
		}
		else
		{
			*P_NAND_GPIO_SETUP &= ~PSO;
		}
		delay(80);  //60
		*P_NAND_GPIO_SETUP |= PCLK;
		delay(80);
		*P_NAND_GPIO_SETUP &= ~PCLK;
	}
}
/****************************************************************************************
*  	Function: 
*  	Description: 信号线上接收1字节数据
*  	Syntax: 
*	Modify: 
*	parameter:  无
*  	Returns:    接收到的数据
*  	Notes: 
****************************************************************************************/
unsigned char SPI_RB()
{
	unsigned char i,ucRxData;
	*P_NAND_GPIO_SETUP &= ~PCLK;		//时钟线置0
	for(i=8;i>0;i--)
	{		
		delay(10);
		ucRxData <<=1;
		*P_NAND_GPIO_SETUP |= PCLK;
		if( (*P_NAND_GPIO_INPUT) & PSI )
		{
			ucRxData |= 1;
		}
		delay(10);
		*P_NAND_GPIO_SETUP &= ~PCLK;
	}
	return ucRxData;
}
/****************************************************************************************
*  	Function: 
*  	Description: SPI短地址写,即地址为1字节,写入的数据为1字节
*  	Syntax: 
*	Modify: 
*	parameter:  unsigned char Address:需要写入的寄存器地址
				unsigned char *DataPtr:需要写入的数据的指针
*  	Returns:    无
*  	Notes: 
****************************************************************************************/
void putSPIchar2(unsigned char Address, unsigned char Data)
{	
	enc28J60ChipSelect();		//使能线置0	
	delay(10);
	
  	putSPIchar(Address);
  	
  	putSPIchar(Data);

	enc28J60ChipDeSelect();		//使能线置1
	
}

/****************************************************************************************
*  	Function: 
*  	Description: SPI短地址读,即地址为1字节,读出的数据为1字节
*  	Syntax: 
*	Modify: 
*	parameter:  unsigned char Address:需要读的寄存器地址
				unsigned char *DataPtr:读出的数据存放的指针
*  	Returns:    无
*  	Notes: 
****************************************************************************************/ 
unsigned char getSPIchar(unsigned char Address)
{ 	
 	unsigned char Data;

	enc28J60ChipSelect();		//使能线置0
	delay(10);
	
  	putSPIchar(Address);
  	
  	Data = SPI_RB();

	enc28J60ChipDeSelect();		//使能线置1
	return Data;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -