📄 spi.c
字号:
#include "def.h"
extern void Delay(unsigned int nTime);
//************************************************************
//***********************************************************
//***********************************************************
//data1,data2是写入的两个数据,这里返回读取的数据
static unsigned int send(unsigned char data1,unsigned char data2)
{
// U_SpiCommand u_back;
int wReadData,wSendData,tmp;
uchar i;
#if SPI_INT_ENABLE
SPI_CS = 0;
SPSTAT &= 0x80; //clear spi flag
SPDAT = data1;
while(!(SPSTAT&0x80));
tmp = SPDAT;
wReadData = tmp <<8;
SPSTAT &= 0x80; //clear spi flag
SPDAT = data2;
while(!(SPSTAT&0x80));
tmp = SPDAT;
wReadData += tmp;
SPI_CS =1;
return wReadData;
#else
SPICLK=0;
SPI_CS=0; //置814x片选有效
Delay(1);
wReadData = 0;
tmp = data1;
tmp = tmp<<8;
wSendData = tmp + data2;
for(i = 0; i < 16; i++)
{
if(wSendData & 0x8000)
MOSI = 1;
else
MOSI = 0;
wReadData <<= 1; //Shift first, then fill the bit
SPICLK = 1;
wSendData <<= 1;
wReadData |= MISO; //Receive the 16-bit data
Delay(1);
SPICLK = 0;
Delay(5); //Can be comment by acture use
}
Delay(1);
SPI_CS=1; //置814x片选有效
SPICLK=0;
return(wReadData);
#endif
}
//*************************************************************************
//*************************************************************************
//写寄存器,port为子串口的路数,reg为寄存器的地址,dat为写入寄存器的数据
// port = 0~3; 下同,
uint write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
// send(0x60+(port<<5)+(reg<<1),dat);
// if port =0~3
uint temp;
temp = send(0x80+(port<<5)+(reg<<1),dat);
return temp;
}
//*************************************************************************
//*************************************************************************
//读寄存器,port为子串口的路数,reg为寄存器的地址,返回寄存器的值
unsigned char read_reg(unsigned char port,unsigned char reg)
{
return send((port<<5)+(reg<<1),0x00);
}
//***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -