⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c.bak

📁 SPI接口EEPROM驱动 EEPROMWRITE(绝对地址
💻 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 + -