?? spif.c
字號:
// 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 //采用軟件仿真還是硬件實現(xiàn)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時序方式實現(xiàn)SPI的代碼
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/****************************************************************************************
* Function:
* Description: 初始化SPI接口,用軟件模擬時序方式實現(xiàn)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: 信號線上發(fā)送1字節(jié)數(shù)據(jù)
* Syntax:
* Modify:
* parameter: UINT8 ucData 要發(fā)送的1字節(jié)數(shù)據(jù)
* 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字節(jié)數(shù)據(jù)
* Syntax:
* Modify:
* parameter: 無
* Returns: 接收到的數(shù)據(jù)
* 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字節(jié),寫入的數(shù)據(jù)為1字節(jié)
* Syntax:
* Modify:
* parameter: UINT8 Address:需要寫入的寄存器地址
UINT8 *DataPtr:需要寫入的數(shù)據(jù)的指針
* 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字節(jié),讀出的數(shù)據(jù)為1字節(jié)
* Syntax:
* Modify:
* parameter: UINT8 Address:需要讀的寄存器地址
UINT8 *DataPtr:讀出的數(shù)據(jù)存放的指針
* 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字節(jié),寫入的數(shù)據(jù)為1字節(jié)
* Syntax:
* Modify:
* parameter: UINT8 Address:需要寫入的寄存器地址
UINT8 *DataPtr:需要寫入的數(shù)據(jù)的指針
* 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字節(jié),讀出的數(shù)據(jù)為1字節(jié)
* Syntax:
* Modify:
* parameter: UINT8 Address:需要讀的寄存器地址
UINT8 *DataPtr:讀出的數(shù)據(jù)存放的指針
* 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長地址多數(shù)據(jù)寫,及地址為2字節(jié),寫入的數(shù)據(jù)為Length字節(jié)
* Syntax:
* Modify:
* parameter: UINT8 Address:需要寫入的寄存器地址
UINT8 *DataPtr:需要寫入的數(shù)據(jù)的指針
UINT8 Length: 需要寫入的數(shù)據(jù)的長度
* 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長地址多數(shù)據(jù)讀,及地址為2字節(jié),讀出的數(shù)據(jù)為Length字節(jié)
* Syntax:
* Modify:
* parameter: UINT8 Address:需要讀的寄存器地址
UINT8 *DataPtr:讀出的數(shù)據(jù)存放的指針
UINT8 Length: 讀出的數(shù)據(jù)長度
* 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 + -