📄 wr_flash.c
字号:
/******************************************************************
* 文件名:WR_FLASH.C
* 功能:实现FLASH读写功能
* 日期:2005.6.16
* 说明:
******************************************************************/
#include <REG922.H>
#define uint unsigned int
#define uchar unsigned char
/* 定义页宽度屏蔽字(16字节时为0x0F,64字节时为0x3F) */
#define PAGE_SIZE 0x3F
/* 定义FLASH控制命令字 */
#define LOAD 0x00 /* 加载数据 */
#define PROG 0x48 /* 编程 */
#define ERS_PROG 0x68 /* 擦除编程 */
#define ERS_P 0x70 /* 擦除页 */
/******************************************************************
* 名称:FLASH_ReadNByte
* 功能:指定FLASH起始地址,读多字节数据
* 入口参数:addr 指定的起始地址
* dat_buf 保存数据的缓冲区指针
* no 要写入数据个数
* 出口参数:无
******************************************************************/
void FLASH_ReadNByte(uint addr, uchar *dat_buf, uchar no)
{ uchar code *readp;
if(0==no) return;
readp = addr; // 设置读取的地址
for(; no>0; no--)
{ *dat_buf = *readp; // 读取数据
dat_buf++;
readp++; // 指向下一地址
}
}
/******************************************************************
* 名称:FLASH_ErasePage
* 功能:页擦除
* 入口参数:addr 指定待擦除页内的地址
* 出口参数:返回0时表示操作错误
******************************************************************/
/*
bit FLASH_ErasePage(uint addr)
{ FMADRH = addr>>8;
FMADRL = addr&0xFF;
FMCON = ERS_P;
if( (FMCON&0x0F)!=0x00 ) return(0);
else return(1);
}
*/
/******************************************************************
* 名称:FLASH_WriteNByte
* 功能:指定FLASH起始地址,写多字节数据
* 入口参数:addr 指定的起始地址
* dat_buf 待写入的数据缓冲区指针
* no 要写入数据个数
* 出口参数:返回0时表示操作错误
******************************************************************/
bit FLASH_WriteNByte(uint addr, uchar *dat_buf, uchar no)
{
if(0==no) return(0);
FMCON = LOAD; // 设置加载数据命令
FMADRH = addr>>8; // 设置写入地址
FMADRL = addr&0xFF;
while(1)
{ FMDATA = *dat_buf; // 写入数据
dat_buf++; // 指向下一个待写入的数据
addr++;
no--;
if(0==no) break; // 判断是否写完所有数据,若是则退出
}
FMCON = ERS_PROG; // 擦除编程
if( (FMCON&0x0F)!=0x00 ) return(0);
else return(1);
}
/******************************************************************
* 名称:FLASH_WriteByte
* 功能:指定FLASH地址,写单字节数据
* 入口参数:addr 指定的地址
* dat 待写入的数据
* 出口参数:返回0时表示操作错误
******************************************************************/
/******************************************************************
* 名称:FLASH_WriteByte
* 功能:指定FLASH地址,写单字节数据
* 入口参数:addr 指定的地址
* dat 待写入的数据
* 出口参数:返回0时表示操作错误
****************************************************************** /
bit FLASH_WriteByte(uint addr, uchar dat)
{ FMCON = LOAD; // 设置加载数据命令
FMADRH = addr>>8; // 设置写入地址
FMADRL = addr&0xFF;
FMDATA = dat; // 写入数据
FMCON = ERS_PROG; // 擦除编程
if( (FMCON&0x0F)!=0x00 ) return(0);
else return(1);
}
/******************************************************************
* 名称:FLASH_ReadByte
* 功能:指定FLASH地址,读单字节数据
* 入口参数:addr 指定的地址
* 出口参数:返回值即是读出的数据
****************************************************************** /
uint FLASH_ReadByte(uint addr)
{ uint code *readp;
readp = addr;
return(*readp);
}
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
!!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -