📄 spi.c.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 + -