📄 flash.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 + -