C8051F SPI接口读写c程序
#ifndef SPI_H
#define SPI_H
#define WREN 0x06
#define READ 0x03
#define WRITE 0x02
#define RDID 0x9F
#define SNR 0xC3
void WriteSPI(uchar dat);
uchar ReadSPI(void);
uchar Read_Byte(ulong add);
void Write_Byte(ulong add,uchar dat);
void Write_String(ulong add,uchar *pStr,uint len);
void Read_String(ulong add,uchar *pStr,uint len);
#endif
//SPI.C程序
#include "C8051F120.h"
#include "main.h"
#include "spi.h"
void WriteSPI(uchar dat)
{
uchar SFR_PAGE_SAVE = SFRPAGE;
SFRPAGE = SPI0_PAGE;
SPIF = 0;
SPI0DAT = dat;
while(!SPIF);
SPIF = 0;
SFRPAGE = SFR_PAGE_SAVE;
}
uchar ReadSPI(void)
{
uchar dat=0;
uchar SFR_PAGE_SAVE = SFRPAGE;
SFRPAGE = SPI0_PAGE;
SPIF = 0;
SPI0DAT = dat;
while(!SPIF);
SPIF = 0;
dat = SPI0DAT;
SFRPAGE = SFR_PAGE_SAVE;
return dat;
}
void WriteEN(void)
{
CS = 0;
WriteSPI(WREN);
CS = 1;
}
uchar Read_Byte(ulong add)
{
uchar dat = 0;
uchar add2,add1,add0;
CS = 0;
add2 = (uchar)(add>>16);
add1 = (uchar)(add>>8);
add0 = (uchar) add;
SFRPAGE =CONFIG_PAGE;
WriteSPI(READ);
WriteSPI(add2);
WriteSPI(add1);
WriteSPI(add0);
dat = ReadSPI();
SFRPAGE =CONFIG_PAGE;
CS = 0;
CS = 1;
return dat;
}
void Write_Byte(ulong add,uchar dat)
{
uint i;
uchar add2,add1,add0;
for(i=0;i<10;i++);
add2 = (uchar)(add>>16);
add1 = (uchar)(add>>8);
add0 = (uchar) add;
WriteEN();
CS = 0;
WriteSPI(WRITE);
WriteSPI(add2);
WriteSPI(add1);
WriteSPI(add0);
WriteSPI(dat);
CS = 0;
CS = 1;
//CS = 1;
}
|