📄 flasheeprom.c
字号:
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_flash.h>
#include <flash.h>
// 定义Flash扇区号(每个扇区1024字节)
#define SECTION 62
extern unsigned long TheSysClock;
// 初始化用Flash虚拟的EEPROM
void FlashEEPROM_Init(void)
{
FlashUsecSet(TheSysClock / 1000000); // 设置每微秒的CPU时钟数
}
// 从Flash虚拟的EEPROM指定地址处读取1个字节
// usAddr=0~1023
char FlashEEPROM_Read(unsigned short usAddr)
{
char *pcData;
pcData = (char *)(SECTION * 1024 + (usAddr & 0x03FF));
return(*pcData);
}
// 从Flash虚拟的EEPROM指定地址处读取N个字节
void FlashEEPROM_ReadN(unsigned short usAddr, char *pcData, unsigned short usN)
{
unsigned short i;
if (usN > 0)
{
for (i = 0; i < usN; i++)
{
pcData[i] = FlashEEPROM_Read(usAddr + i);
}
}
}
// 向Flash虚拟的EEPROM指定地址处写入1个字节
// usAddr=0~1023
void FlashEEPROM_Write(unsigned short usAddr, char cData)
{
char cBuf[1024];
unsigned long *pulData = (unsigned long *)(cBuf);
FlashEEPROM_ReadN(0, cBuf, 1024); // 读取1KB扇区内容
cBuf[usAddr & 0x3FF] = cData; // 修改1个字节缓冲区内容
FlashErase(SECTION * 1024); // 擦除1KB扇区
FlashProgram(pulData, SECTION * 1024, 1024); // 编程1KB扇区
}
// 向Flash虚拟的EEPROM指定地址处写入N个字节
void FlashEEPROM_WriteN(unsigned short usAddr, const char *pcData, unsigned short usN)
{
char cBuf[1024];
unsigned long *pulData = (unsigned long *)(cBuf);
unsigned short i;
if (usN > 0)
{
FlashEEPROM_ReadN(0, cBuf, 1024); // 读取1KB扇区内容
for (i = 0; i < usN; i++) // 修改1KB缓冲区内容
{
cBuf[(usAddr + i) & 0x03FF] = pcData[i];
}
FlashErase(SECTION * 1024); // 擦除1KB扇区
FlashProgram(pulData, SECTION * 1024, 1024); // 编程1KB扇区
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -