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

📄 spi.c.bak

📁 这个是飞利浦ARM芯片LPC2131的SPI的驱动程序
💻 BAK
字号:

#include "config.h"
void	SPIInit(void)
{
	PINSEL0 = PINSEL0 | 0X5500;			
	IO0DIR = SPI_CS_AD | IO0DIR;		
	S0PCR = 0x30;						
	S0PCCR = 8;						
}
/* control word = 0x31 ,value returned is result of converison */
uint16	SPISendDataToAD(uint8 data)
{
	uint16 uiData;
	IO0CLR = SPI_CS_AD;
	S0PDR = data;
	while (0 == (S0PSR & 0x80));
	uiData = S0PDR;
	S0PDR = data;						
	while (0 == (S0PSR & 0x80));
	IO0SET = SPI_CS_AD;					
	uiData = (uiData << 8) | S0PDR;
	return (uiData);
}


/**********************************************************/
void	SPI1Init(void)
{
	PINSEL1 = PINSEL1 | 0X2A8;			
	IO0DIR = SPI_CS_X5043 | IO0DIR;		
	SSPCR0 = 0x0E07;					
	SSPCR1 = 0x02;						
	SSPCPSR = 0x02;						
}

uint8	SPI1X5043RdSr(void)
{
	IO0CLR = SPI_CS_X5043;					
	SSPDR = 0x05;							
	while (0x10 == (SSPSR & 0x10));
	ucTemp = SSPDR;
	SSPDR = 0xff;						
	while (0x10 == (SSPSR & 0x10));	
	IO0SET = SPI_CS_X5043;					
	return (SSPDR);
}

static	void	SPI1X5043WrEn(void)
{	
	IO0CLR = SPI_CS_X5043;					
	SSPDR = 0x06;						
	while (0x10 == (SSPSR & 0x10));
	ucTemp = SSPDR;
	IO0SET = SPI_CS_X5043;					
}

void	SPI1X5043RstWrEn(void)
{
//	while( SPIX5043RdSr() & 0x01 );
	IO0CLR = SPI_CS_X5043;					
	SSPDR = 0x04;						
	while (0x10 == (SSPSR & 0x10));
	IO0SET = SPI_CS_X5043;					
	ucTemp = SSPDR;
}

void	SPI1X5043WrSr(uint8 ucStatusData)
{	
	uint8 ucRdData;
	SPI1X5043WrEn();
	IO0CLR = SPI_CS_X5043;					
	SSPDR = 0x01;						
	while (0x10 == (SSPSR & 0x10));
	ucRdData = SSPDR;
	SSPDR = ucStatusData;						
	while (0x10 == (SSPSR & 0x10));
	IO0SET = SPI_CS_X5043;					
	ucRdData = SSPDR;
	//while( SPIX5043RdSr() & 0x01 );
	Delay(DELAY10MS);
}

void	SPI1X5043WrByte(uint8 ucWrDataCmd, uint8 ucAddr, uint8 ucData)
{
	uint8 ucRdData;
	SPI1X5043WrEn();
	IO0CLR = SPI_CS_X5043;
	SSPDR = ucWrDataCmd;
	while (0x10 == (SSPSR & 0x10));
	ucRdData = SSPDR;
	SSPDR = ucAddr;
	while (0x10 == (SSPSR & 0x10));
	ucRdData = SSPDR;
	SSPDR = ucData;
	while (0x10 == (SSPSR & 0x10));
	IO0SET = SPI_CS_X5043;
	ucRdData = SSPDR;
	Delay(DELAY10MS);
}

uint8	SPI1X5043RdByte(uint8 ucRdDataCmd, uint8 ucAddr)
{
	uint8 ucRdData;
	IO0CLR = SPI_CS_X5043;					
	SSPDR = ucRdDataCmd;						
	while (0x10 == (SSPSR & 0x10));
	ucRdData = SSPDR;
	SSPDR = ucAddr;						
	while (0x10 == (SSPSR & 0x10));
	ucRdData = SSPDR;
	SSPDR = ucAddr;						
	while (0x10 == (SSPSR & 0x10));
	IO0SET = SPI_CS_X5043;					
	return (SSPDR);
}
void	SPI1X5043WrBuf(uint8 ucWrDataCmd, uint8 ucBeginAddr, uint8 * pBuf, uint8 ucNum)
{
	uint8 i;
	SPI1X5043WrEn();
	IO0CLR = SPI_CS_X5043;					//P0.21 = AD7887_CS 置低

	SSPDR = ucWrDataCmd;						//发送数据
	while (0x10 == (SSPSR & 0x10));
	SSPDR = ucBeginAddr;						//发送数据
	while (0x10 == (SSPSR & 0x10));

	for (i = 0; i < ucNum ;i++ )
	{
		SSPDR = pBuf[i];						//发送数据
		if ((IO0SET & LED3CON) == 0) IO0SET = LED3CON;
		else	IO0CLR = LED3CON;
		while (0x10 == (SSPSR & 0x10));
		Delay(DELAY1MS * 6);
	}
	
	IO0SET = SPI_CS_X5043;					//P0.21 = AD7887_CS  置高
}

uint8	SPI1X5043RdBuf(uint8 ucRdDataCmd, uint8 ucBeginAddr, uint8 * pBuf, uint8 ucNum)
{
	uint8 i;
	IO0CLR = SPI_CS_X5043;					//P0.21 = AD7887_CS 置低

	SSPDR = ucRdDataCmd;						//发送数据
	while (0x10 == (SSPSR & 0x10));
	SSPDR = ucBeginAddr;						//发送数据
	while (0x10 == (SSPSR & 0x10));
	
	for (i = 0; i < ucNum ;i++ )
	{
		SSPDR = 0x00;						//发送数据
		while (0x10 == (SSPSR & 0x10));
		pBuf[i] = SSPDR;
	}	

	IO0SET = SPI_CS_X5043;					//P0.21 = AD7887_CS  置高
	return (0);
}

⌨️ 快捷键说明

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