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

📄 spif.c

📁 Zigbee模块的详细电路原理图和C代码.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
// Port	-290		  -3200
//PCLK---NF_ALE		---NF_ALE
//PCSN---SPICSN		---SPICSN
//PSO----NF_D4		---NF_D4
//PSI----NF_D5		---NF_D5
//RST----NF_D6		---IOA1
//INT----IOA1		---IOA0
#include ".\zigbee\unet.h"
#include "SPCE3200_Register.h"
#include "SPCE3200_Constant.h"

#define SPI_SIM			//采用软件仿真还是硬件实现SPI

#define PCLK 0x00000001
#define PCSN 0x00008000
#define PSO  0x00001000
#define PSI  0x00000800

extern  void _INT_ON();
extern  void _INT_OFF();

void Delay( UINT16 time )
{
	UINT16 i;
	for(i=0;i<time;i++)
	{
	}
}

void ResetZB()
{
	UINT8 i;
	*P_IOA_GPIO_SETUP &= ~0x00000002;		// IOA1复位输出0
	for(i=0;i<255;i++);
	*P_IOA_GPIO_SETUP |= 0x00000002;		// IOA1复位输出1
}

void InitZB_interface()
{
	*P_GPIO_CLK_CONF = 0x3;
//	*P_CKG_CFG_SFT = 0x3;
//	*P_NAND_GPIO_PULL |= 0x00002000;		//初始化模块的复位控制脚
//	*P_NAND_GPIO_SETUP |= 0x20002000;
	*P_IOA_GPIO_SETUP = 0x00010200;		// IOA0中断输入,IOA1复位输出
	*P_IOA_GPIO_INT  = 0x01010100;		//设置下降沿中断
	*P_INT_MASK_CTRL2 &= ~C_INT_GPIO_DIS;
	ResetZB();
}

#ifdef SPI_SIM
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//以下为使用软件模拟SPI时序方式实现SPI的代码
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/****************************************************************************************
*  	Function: 
*  	Description: 初始化SPI接口,用软件模拟时序方式实现SPI
*  	Syntax: 
*	Modify: 
*	parameter:  无
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/
void InitSPI()		//初始化SPI
{
	*P_SD_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:  UINT8 ucData 要发送的1字节数据
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/
void SPI_SB( UINT8 ucData )
{
	UINT8 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(0);
		*P_NAND_GPIO_SETUP |= PCLK;
		Delay(0);
		*P_NAND_GPIO_SETUP &= ~PCLK;
	}
}
/****************************************************************************************
*  	Function: 
*  	Description: 信号线上接收1字节数据
*  	Syntax: 
*	Modify: 
*	parameter:  无
*  	Returns:    接收到的数据
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/
UINT8 SPI_RB()
{
	UINT8 i,ucRxData;
	*P_NAND_GPIO_SETUP &= ~PCLK;		//时钟线置0
	for(i=8;i>0;i--)
	{		
		Delay(0);
		ucRxData <<=1;
		*P_NAND_GPIO_SETUP |= PCLK;
		if( (*P_NAND_GPIO_INPUT) & PSI )
		{
			ucRxData |= 1;
		}
		Delay(0);
		*P_NAND_GPIO_SETUP &= ~PCLK;
	}
	return ucRxData;
}
/****************************************************************************************
*  	Function: 
*  	Description: SPI短地址写,及地址为1字节,写入的数据为1字节
*  	Syntax: 
*	Modify: 
*	parameter:  UINT8 Address:需要写入的寄存器地址
				UINT8 *DataPtr:需要写入的数据的指针
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/
void spi_sw(UINT8 Address, UINT8 Value)
{	
	Address = (Address << 1) | 0x0001; //Shfit the Address

//  	_INT_OFF();

	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0	
	Delay(0);
	
  	SPI_SB(Address);
  	
  	SPI_SB(Value);

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

/****************************************************************************************
*  	Function: 
*  	Description: SPI短地址读,及地址为1字节,读出的数据为1字节
*  	Syntax: 
*	Modify: 
*	parameter:  UINT8 Address:需要读的寄存器地址
				UINT8 *DataPtr:读出的数据存放的指针
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/ 
UINT8 spi_sr(UINT8 Address)
{ 	
  	UINT8 Value;
  	
  	Address = (Address << 1);

//  	_INT_OFF();

	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0
	Delay(0);
	
  	SPI_SB(Address);
  	
  	Value = SPI_RB();

	*P_NAND_GPIO_SETUP |= PCSN;		//使能线置1
	
// 	_INT_ON();	
  	
  	return Value;
}

/****************************************************************************************
*  	Function: 
*  	Description: SPI长地址写,及地址为2字节,写入的数据为1字节
*  	Syntax: 
*	Modify: 
*	parameter:  UINT8 Address:需要写入的寄存器地址
				UINT8 *DataPtr:需要写入的数据的指针
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/
void spi_lw(UINT16 Address, UINT8 Value)
{

  	Address = (Address << 5) | 0x8010;

//  	_INT_OFF();

  	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0
	Delay(0);
	
	SPI_SB(Address>>8);
	SPI_SB(Address);
	SPI_SB(Value);

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

/****************************************************************************************
*  	Function: 
*  	Description: SPI长地址读,及地址为2字节,读出的数据为1字节
*  	Syntax: 
*	Modify: 
*	parameter:  UINT8 Address:需要读的寄存器地址
				UINT8 *DataPtr:读出的数据存放的指针
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/ 
UINT8 spi_lr(UINT16 Address)
{
  	UINT8 Value;
  	
  	Address = (Address << 5) | 0x8000;

//  	_INT_OFF();

  	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0
	Delay(0);
	
	SPI_SB(Address>>8);
	SPI_SB(Address);
	Value = SPI_RB();

	*P_NAND_GPIO_SETUP |= PCSN;		//使能线置1
//  	_INT_ON();	
  	
  	return Value;
}
/****************************************************************************************
*  	Function: 
*  	Description: SPI长地址多数据写,及地址为2字节,写入的数据为Length字节
*  	Syntax: 
*	Modify: 
*	parameter:  UINT8 Address:需要写入的寄存器地址
				UINT8 *DataPtr:需要写入的数据的指针
				UINT8 Length:  需要写入的数据的长度
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/
void spi_fill_fifo(UINT16 Address, UINT8 *DataPtr, UINT8 Length)
{
	Address = (Address << 5) | 0x8010;

//  	_INT_OFF();

	*P_NAND_GPIO_SETUP &= ~PCSN;		//使能线置0
	Delay(0);
	
	SPI_SB(Address>>8);
	SPI_SB(Address);
	
	while (Length--)
	{
      	SPI_SB(*DataPtr);
      	DataPtr++;
  	}

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

/****************************************************************************************
*  	Function: 
*  	Description: SPI长地址多数据读,及地址为2字节,读出的数据为Length字节
*  	Syntax: 
*	Modify: 
*	parameter:  UINT8 Address:需要读的寄存器地址
				UINT8 *DataPtr:读出的数据存放的指针
				UINT8 Length:  读出的数据长度
*  	Returns:    无
*  	Notes: 
*	Date: 2007-02-27
*	Author: ZijianWang
****************************************************************************************/ 
void spi_dump_fifo(UINT16 Address, UINT8 *DataPtr, UINT8 Length)
{

⌨️ 快捷键说明

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