📄 fm25l512.c
字号:
/*******************************************************************************
Copyright (c) 2005,2006 北京中盛华旭电子科技有限公司(VSUNTEK, Ltd.)
FileName: FM25L512.C
Author: 王在东
Date: 2008.05.20
Version: 1.0
Description: SPI读写时序.
History:
<Author>wzd
<Date>
<Ver>
<Desc>
Todo:
*******************************************************************************/
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
// Prototype statements for functions found within this file.
void delay_loop(Uint32 delay);
void error(void);
void SPI_WriteByte(Uint32 Data);
unsigned int SPI_ReadByte();
unsigned int FM25L512_Write(Uint32 Addr,Uint32 Length,Uint32 *Data);
unsigned int FM25L512_Read(Uint32 Addr,Uint32 Length,Uint32 *Data);
// Some Useful local functions
void delay_loop(Uint32 delay)
{
long i;
for (i = 0; i < delay; i++) {}
}
void error(void)
{
asm(" ESTOP0"); // test failed!! Stop!
for (;;);
}
void SPI_WriteByte(Uint32 Data) //往FRAM中写入一个字节
{
int i;
// delay_loop(10);
for(i=0;i<8;i++)
{
if((Data<<i) & 0x80)
MOSI=1;
else
MOSI=0;
SCK_H;
delay_loop(10);
SCK_L;
delay_loop(10);
}
}
unsigned int SPI_ReadByte() //读取FRAM中的一个字节
{
unsigned int i;
unsigned int temp_buffer=0;
for(i=0;i<8;i++)
{
temp_buffer<<=1;
if(MISO)
temp_buffer+=1;
SCK_H;
delay_loop(10);
SCK_L;
delay_loop(10);
}
return temp_buffer;
}
unsigned int FM25L512_Write(Uint32 Addr,Uint32 Length,Uint32 *Data) //往FRAM中写入数据
{
unsigned int i;
SCK_L;
CS_H;
CS_L;
delay_loop(10);
SPI_WriteByte(WREN); // write enable command
SCK_L;
CS_H;
delay_loop(10);
CS_L;
SPI_WriteByte(WRSR); // write memory command
SPI_WriteByte(0xC2);
SCK_L;
CS_H;
delay_loop(10);
CS_L;
SPI_WriteByte(WRITE); // high 8 bits address
SPI_WriteByte(Addr>>8); // high 8 bits address
SPI_WriteByte((unsigned int)(0x00ff & Addr)); // low 8 bits address
for(i=0;i<Length;i++)
{
SPI_WriteByte(*Data);
Data++;
}
SCK_L;
CS_H;
delay_loop(10);
CS_L;
SPI_WriteByte(WRDI); // write disable command
CS_H;
SCK_L;
return 0;
}
unsigned int FM25L512_Read(Uint32 Addr,Uint32 Length,Uint32 *Data) //读FRAM中的信息
{
unsigned int i;
SCK_L;
CS_H;
CS_L;
SPI_WriteByte(READ); // read memory command
SPI_WriteByte(Addr>>8); // high 8 bits address
SPI_WriteByte((unsigned int)(0x00ff & Addr)); // low 8 bits address
for(i=0;i<Length;i++)
{
*Data = SPI_ReadByte();
Data++;
}
CS_H;
SCK_L;
return 0;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -