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

📄 spi.c

📁 凌阳 Web服务器应用采用Microchip TCP / IP协议栈介绍
💻 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) 

void delay( U16 time )
{
	U16 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;
}

/****************************************************************************************
*  	Function: 
*  	Description: 信号线上发送1字节数据
*  	Syntax: 
*	Modify: 
*	parameter:  U8 ucData 要发送的1字节数据
*  	Returns:    无
*  	Notes: 
****************************************************************************************/
void putSPIchar(char ucData)
{
	U8 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: 
****************************************************************************************/
U8 SPI_RB()
{
	U8 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:  U8 Address:需要写入的寄存器地址
				U8 *DataPtr:需要写入的数据的指针
*  	Returns:    无
*  	Notes: 
****************************************************************************************/
void putSPIchar2(U8 Address, U8 Data)
{	
	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0	
	delay(10);
	
  	putSPIchar(Address);
  	
  	putSPIchar(Data);

	*P_NAND_GPIO_SETUP |= PCSN;		//使能线置1
	
}

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

	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0
	delay(10);
	
  	putSPIchar(Address);
  	
  	Data = SPI_RB();

	*P_NAND_GPIO_SETUP |= PCSN;		//使能线置1
	return Data;
}

⌨️ 快捷键说明

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