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

📄 flash.c

📁 利用61板、SPR模组、SPLC501液晶模组和4×4键盘建立手机通讯录模型
💻 C
字号:
//======================================================
// 文件名称:	SPCE061A内部Flash操作函数集
// 功能描述:	主程序,用于显示操作菜单
// 维护记录:	2006-09-20	v1.0
//======================================================

#include "..\include\SPCE061A.h"

unsigned int Flash_Buf[256];

//========================================================================
//	语法格式:	void Flash_WriteWord(unsigned uiAddr, unsigned uiData)
//	实现功能:	向Flash的指定地址写入一个字
//				被PY_GetCh()函数调用
//	参数:		uiAddr:		地址
//				uiData:		要写入的数据
//	返回值:	无
//========================================================================
void Flash_WriteWord(unsigned uiAddr, unsigned uiData)
{
	volatile unsigned *P_FlashAddr;
	P_FlashAddr=(unsigned *)uiAddr;
	*P_Flash_Ctrl=0xaaaa;
	*P_Flash_Ctrl=0x5533;
	*P_FlashAddr=uiData;
}

//========================================================================
//	语法格式:	void Flash_WriteMultiWords(unsigned uiStartAddr, unsigned *P_DataBuf, unsigned uiSize)
//	实现功能:	向Flash的指定地址写入多个字
//				被PY_GetCh()函数调用
//	参数:		uiStartAddr:	起始地址
//				P_DataBuf:		源数据的首地址
//				uiSize:			写入字数
//	返回值:	无
//========================================================================
void Flash_WriteMultiWords(unsigned uiStartAddr, unsigned *P_DataBuf, unsigned uiSize)
{
	volatile unsigned *P_FlashAddr;
	P_FlashAddr=(unsigned *)uiStartAddr;
	*P_Flash_Ctrl=0xaaaa;
	while(uiSize)
	{
		*P_Watchdog_Clear=1;
		*P_Flash_Ctrl=0x5544;
		*P_FlashAddr=*P_DataBuf;
		P_FlashAddr++;
		P_DataBuf++;
		uiSize--;
	}
	*P_Flash_Ctrl=0x0000;
}

//========================================================================
//	语法格式:	void Flash_Erase(unsigned uiPageAddr)
//	实现功能:	擦除Flash的一页数据
//	参数:		uiPageAddr:		要擦除的页所在的地址
//	返回值:	无
//========================================================================
void Flash_Erase(unsigned uiPageAddr)
{
	volatile unsigned *P_FlashAddr;

	P_FlashAddr=(unsigned *)uiPageAddr;
	*P_Watchdog_Clear=1;
	*P_Flash_Ctrl=0xaaaa; 
	*P_Flash_Ctrl=0x5511;
	*P_FlashAddr=uiPageAddr;
}

//========================================================================
//	语法格式:	void Flash_Modify(unsigned uiStartAddr, unsigned *p_DataBuf, unsigned uiSize)
//	实现功能:	修改Flash的一个或多个字数据
//	参数:		uiStartAddr:	Flash起始地址
//				P_DataBuf:		源数据的首地址
//				uiSize:			修改的字数
//	返回值:	无
//========================================================================
void Flash_Modify(unsigned uiStartAddr, unsigned *p_DataBuf, unsigned uiSize)
{
	unsigned int *p_FlashAddr, CurAddr, *p_Data, DataNum;
	unsigned int i,j;

	DataNum = uiSize;
	CurAddr = uiStartAddr;
	p_Data = p_DataBuf;
	
	while(DataNum>0)
	{
		/// 读取一页数据
		p_FlashAddr = (unsigned int*)(CurAddr&0xff00);
		j = (unsigned int*)CurAddr - p_FlashAddr;
		for(i=0; i<256; i++)
			Flash_Buf[i]=*p_FlashAddr++;
		/// 更新本页中要修改的数据
		p_FlashAddr = (unsigned int*)CurAddr;
		for(i=j; i<256 && DataNum>0; i++, DataNum--)
		{
			Flash_Buf[i] = *p_Data++;
		}
		/// 重写该页
		Flash_Erase(CurAddr);
		Flash_WriteMultiWords(CurAddr&0xff00,Flash_Buf,256);
		/// 转至下一页
		CurAddr = (CurAddr + 256) & 0xff00;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -