|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2006-6-5 14:33:56
|
显示全部楼层
void WriteFlash(volatile uchar *addr,unsigned char data)
{
volatile unsigned char i,t;
//unsigned short j;
CMD_ADDR0 = 0xaa;
CMD_ADDR1 = 0x55;
CMD_ADDR0 = 0xa0;
*addr= data;
while(1)
{
i = (*addr)&0x40;
t = (*addr)&0x40;
if(i == t)
{
break;
}
}
//for(j=100;j>0;j--);
}
void BytesWriteFlash(volatile uchar *addr,unsigned char *buffer,unsigned char number)
{
unsigned char n;
volatile unsigned char i,t;
//unsigned short j;
for(n=0;n<number;n++,addr++)
{
CMD_ADDR0 = 0xaa;
CMD_ADDR1 = 0x55;
CMD_ADDR0 = 0xa0;
*addr = buffer[n];
while(1)
{
i = (*addr)&0x40;
t = (*addr)&0x40;
if(i == t)
{
break;
}
}
//for(j=0;j<100;j++);
}
}
void BytesReadFlash(volatile uchar *addr,unsigned char *buffer,unsigned char number)
{
unsigned char n;
for(n=0;n<number;n++)
buffer[n] = *(addr++);
}
//nBlock:0--127
void BlockErase(unsigned char nBlock)
{
volatile unsigned char *block;
unsigned char i,t;
block = (unsigned char *)(BOOT_FLASH_BASE + nBlock*0x1000);
CMD_ADDR0 = 0xaa;
CMD_ADDR1 = 0x55;
CMD_ADDR0 = 0x80;
CMD_ADDR0 = 0xaa;
CMD_ADDR1 = 0x55;
*block = 0x30;
while(1)
{
i = CMD_ADDR1&0x40;
t = CMD_ADDR1&0x40;
if(i == t)
{
break;
}
}
}
void ChipErase()
{
volatile unsigned char i,t;
CMD_ADDR0 = 0xaa;
CMD_ADDR1 = 0x55;
CMD_ADDR0 = 0x80;
CMD_ADDR0 = 0xaa;
CMD_ADDR1 = 0x55;
CMD_ADDR0 = 0x10;
while(1)
{
i = CMD_ADDR0&0x40;
t = CMD_ADDR0&0x40;
if(i == t)
{
break;
}
}
} |
|