读写LPC901单片机FLASH时出现了问题,先写28位,再读28位。
模仿使用手册上写的,出现了很多错误。在此请教一下?
程序如下:
#include <REG932.H>
#define uchar unsigned char
#define uint unsigned int
//uint ADDRESS[4]= {0x0000,0x0100,0x0200,0x0300}; //4页flash的首地址
uchar data[4][8]={{1,0,1,0,0,1,0,1},
{1,0,1,0,0,1,0,1},
{1,0,1,0,0,1,0,1},
{1,0,1,0,0,1,0,1}}; //定义28位探头地址数组,后四位不用
bit prog_fail;
void write (uchar address,uchar data[4][8])
void read(uchar address,uchar data[4][8])
//#define PAGESIZEW 128 //LPC901的一个Flash页为128字
//#define PAGESIZEB 256 //LPC901的一个Flash页为256字节
void PGM_EL (uchar el_addr , uchar el_data )
{
#define CONF 0x6C // 访问Flash 单元
FMADRL = el_addr ; // 将单元地址写入地址寄存器
FMCON = CONF; // 装载命令,清除页寄存器
FMDATA = el_data; // 写入数据并起动操作周期
Fm_stat = FMCON; // 读结果状态
if ((Fm_stat & 0x0F)!=0 )
prog_fail =1;
else
prog_fail = 0;
// return (prog_fail);
}
uchar read_flash (uchar el_addr)
{
#define CONF 0x6C // 访问Flash 单元
uchar l_data; // 读出的单元数据存放的位置
FMADRL= el_addr; // 将单元地址写入地址寄存器
FMCON = CONF; // 写入访问Flash 单元的命令
el_data = FMDATA; // 读单元数据
return ( el_data ) ;
}
void main ( )
{
write (uchar 0x0000,uchar data[4][8]);
read(uchar 0x0000,uchar data[4][8])
}
void write (uchar address,uchar data[4][8])
{
uint i;
uchar j=0,k=0;
for(i=0;i<28;i++)
{
PGM_EL(address+i,data[j][k]);
k++;
if(k>=7)
{
k = 0;
j++;
}
}
}
void read(uchar address,uchar data[4][8]) //此函数是将flash的数读出放入数组
{
uint i;
uchar j=0,k=0;
for(i=0;i<28;i++)
{
data[j][k]=read_flash(address+i);
k++;
if(k >=7) {j++;k =0;}
}
} |