www.pudn.com > canbus.rar > spi.h


#ifndef _SPI_H 
#define _SPI_H 
 
 
//#include 	"2410addr.h" 
//#include 	"2410lib.h" 
#include 	"def.h" 
 
//===================== Register Configuration Constants ====================== 
 
#define CHIP_SELECT_nSS0				0xFFFFFFBF       //by feiling 
#define CHIP_DESELECT_nSS0				0x00000040      //by feiling 
 
 
#define SPI_INTERNAL_CLOCK_ENABLE		(1<<18)				// Enable CPU clock to SPI controller 
 
//----- GPIO Configuration Masks ----- 
#define CLEAR_GPG2_MASK					0xFFFFFFCF 
#define ENABLE_GPG2_OUTPUT				0x00000010 
#define ENABLE_GPG2_PULLUP				0x0000FFFB 
 
#define ENABLE_SPICLK0					0x08000000 
#define ENABLE_SPIMSIO					0x02800000  //SPIÊä³öºÍÊäÈë 
#define DISABLE_SPICLK_SPIMSIO_PULLUP			0x00003800 
#define TEST						0x00003800 
//----- Register definitions for SPCON0 control register (global config register) ----- 
#define SPI_MODE_POLLING				0x00000000				// Data transfer modes 
#define SPI_MODE_DMA					0x00000040 
#define SPI_MODE_INTERRUPT				0x00000020 
#define SPI_CLOCK_ENABLE				0x00000010				// Enable SPI clock (in master mode) 
#define SPI_SELECT_MASTER				0x00000008				// Select master mode 
#define SPI_CLOCK_POLARITY_HIGH			0x00000000				// Determines active clock type (high or low) 
#define SPI_CLOCK_POLARITY_LOW			0x00000004 
#define SPI_CLOCK_PHASE_FORMAT_A		0x00000000				// Determines transfer format (A or B) 
#define SPI_CLOCK_PHASE_FORMAT_B		0x00000002					 
#define SPI_TX_AUTO_GARBAGE				0x00000001				// Used when only receiving data 
 
 
//----- Register definitions for SPSTA0 status register (global status register) ----- 
#define SPI_DATA_COLLISION				0x00000004				// Indicates I/O timing error (see datasheet) 
#define SPI_MULTI_MASTER_ERROR			0x00000002				// Indicates both sender/reciever configured as Master 
#define SPI_TRANSFER_READY				0x00000001				// Indicates SPI is ready to transfer/receive 
 
//----- Register definitions for SPPIN0 control register (global config register) ----- 
//		NOTE: Bit 1 always needs to be a '1' 
#define SPI_MULTI_MASTER_ERROR_ENABLE	0x00000006				// Enables checking for multi-master error  
#define SPI_MASTER_OUT_KEEP				0x00000003				// Determines MOSI drive or release (see datasheet) 
 
 
//----- Register definitions for SPPRE0 control register (global config register) ----- 
//		NOTE: The prescale values for selecting the baud rates are hardcoded in the 
//			  SetSPIClockRate() routine.  The available baud rates are: 
#define CLK_RATE_FULL					0x00					// Full Master clock 
#define CLK_RATE_HALF					0x01					// 1/2 Master clock 
#define CLK_RATE_FOUR					0x02					// 1/4 Master clock 
#define CLK_RATE_EIGHT					0x03					// 1/8 Master clock 
#define CLK_RATE_SIXTEEN				0x04					// 1/16 Master clock 
#define CLK_RATE_THIRTY2				0x05					// 1/32 Master clock 
#define CLK_RATE_SIXTY4					0x06					// 1/64 Master clock 
#define CLK_RATE_SLOW					0x07	 
 
 
 
//-------------------------- Public Interface ------------------------------ 
BOOL SPI_Init(VOID); 
BOOL SPI_Deinit(VOID); 
BOOL SPI_SendByte(BYTE bData, BYTE* pData); 
BOOL SPI_WaitTxRxReady(VOID); 
BOOL SPI_SendWord(WORD wData); 
 
//-------------------- Private Interface (Helper routines) ------------------ 
VOID StartSPIClock(VOID); 
VOID StopSPIClock(VOID); 
VOID SetSPIClockRate(DWORD ClockRate); 
 
#endif