📄 eeprom.c.bak
字号:
/*************************************************************************
filename EEPROM.c
designer 戴展波
date 2004/12/29
*************************************************************************/
#include "DSP28_Device.h"
#include "EEPROM.h"
/*********************************************************************
函数名: void EEPROM_Write_Enable(void)
目的: EEPROM的写使能
输入: 无
输出: 无
*********************************************************************/
void EEPROM_Write_Enable(void)
{
unsigned int i;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
//
//delay_time(250);
//发送SPI
SpiaRegs.SPITXBUF = WREN;
//
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
delay_time(60);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
//
//for(i = 0; i < 100; i++);
}
/*********************************************************************
函数名: void EEPROM_Write_Disable(void)
目的: EEPROM的写关闭
输入: 无
输出: 无
*********************************************************************/
void EEPROM_Write_Disable(void)
{
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
//
//delay_time(250);
//发送SPI
SpiaRegs.SPITXBUF = WRDI;
//
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
delay_time(100);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
//
//for(i = 0; i < 100; i++);
}
/*********************************************************************
函数名: unsigned int EEPROM_Read_Status(void)
目的: EEPROM的读状态
输入: 无
输出: 无
*********************************************************************/
unsigned int EEPROM_Read_Status(void)
{
unsigned int i,data;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
//发送SPI
SpiaRegs.SPITXBUF = RDSR;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = 0xff;
for(i = 0; i < 100; i++);
//判断SPI发送准备好
while(Spi_RxReady() == 0);
//发送SPI
data = SpiaRegs.SPIRXBUF;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
//delay_time(100);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
//
//delay_time(100);
//
return data;
}
/*********************************************************************
函数名: void EEPROM_Write_Status(unsigned int write_status)
目的: EEPROM的写状态
输入: write_status 写状态寄存器的控制字
输出: 无
*********************************************************************/
void EEPROM_Write_Status(unsigned int write_status)
{
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
//
//delay_time(250);
//发送SPI
SpiaRegs.SPITXBUF = WRSR;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = write_status;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
delay_time(100);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
//
for(i = 0; i < 100; i++);
}
/*********************************************************************
函数名: unsigned int EEPROM_Read(unsigned int address)
目的: EEPROM的读
输入: length 读EEPROM的8位BYTE长度
address 读EEPROM的首地址,16BIT
输出: 无
*********************************************************************/
unsigned int EEPROM_Read(unsigned int address)
{
unsigned int i,j;
unsigned int data;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
//
//delay_time(250);
//发送SPI
SpiaRegs.SPITXBUF = READ;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = address;
//for(i = 0; i < 10000; i++);
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = address << 8;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
//判断SPI发送准备好
while(Spi_RxReady() == 0);
//发送SPI
data = SpiaRegs.SPIRXBUF;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
delay_time(50);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
//for(i = 0; i < 100; i++);
//
return data;
}
/*********************************************************************
函数名: void EEPROM_Write(unsigned int address,unsigned int *data)
目的: EEPROM的写
输入: address 写地址
*data 写数据
输出: 无
*********************************************************************/
void EEPROM_Write(unsigned int address,unsigned int data)
{
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
//
//delay_time(250);
//发送SPI
SpiaRegs.SPITXBUF = WRITE;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = address & 0xff00;
//
//for(i = 0; i < 10000; i++);
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = (address << 8) & 0xff00 ;
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//发送SPI
SpiaRegs.SPITXBUF = (data << 8) & 0xff00;
//
//delay_time(100);
//判断SPI发送准备好
while(Spi_TxReady() == 0);
//
delay_time(50);
//
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
//
//for(i = 0; i < 10000; i++);
}
void delay_time(unsigned int data)
{
unsigned int i;
for(i = 0; i < data; i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -