📄 flash.c
字号:
#include "flash.h"
void DelayTime( int time)
{
int i, j;
if(time > 0)
for(i = 0; i < time; i ++)
for(j = 0; j < 65535; j ++) ;
}
void SST39VF160_ChipErase(void)
{
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(FADDR1, DATA2);
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(FADDR1, PIECEERASE);
Waitfor_endofprg();
}
void SST39VF160_SectorErase(unsigned long SAaddr)
{
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(FADDR1, DATA2);
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(SAaddr, SECTORERASE);
Waitfor_endofprg();
}
void SST39VF160_BlockErase(unsigned long BAaddr)
{
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(FADDR1, DATA2);
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(BAaddr, BLOCKERASE);
Waitfor_endofprg();
}
int SST39VF160_WordProg(unsigned long addr,unsigned int dat)
{
Writeflash(FADDR1, DATA1);
Writeflash(FADDR2, DATA3);
Writeflash(FADDR1, WORDPROGDATA);
Writeflash(addr,dat);
Waitfor_endofprg();
return 1;
}
void Waitfor_endofprg(void)
{
volatile unsigned int old_Status,now_Status;
old_Status = *((volatile unsigned int *)0x00);
while(1)
{
now_Status = *((volatile unsigned int *)0x00);
if((old_Status&0x40) == (now_Status&0x40))
break;
else
old_Status = now_Status;
}
}
void SST39VF160_ChipProg(unsigned long DataAddr,unsigned long RomAddr)
{
int i;
SST39VF160_ChipErase();
DelayTime(10);
for(i = 0; i < (ROMSIZE/2); i ++)
{
SST39VF160_WordProg( RomAddr, *((U16 *)DataAddr));
RomAddr ++;
DataAddr += 2;
}
}
void SST39VF160_BlockProg(unsigned long BlockTh,unsigned long DataAddr)
{
int i;
unsigned long startaddr;
if(BlockTh < MAX_NUM_BLOCK)
{
startaddr = ROMADDRESS + BlockTh * BLOCKSIZE;
SST39VF160_BlockErase(startaddr);
for(i = 0; i < BLOCKSIZE; i ++ ){
SST39VF160_WordProg( startaddr, *((U16 *)DataAddr));
startaddr ++;
DataAddr += 2;
}
}
}
void SST39VF160_SectroProg(unsigned long SectorTh,unsigned long DataAddr)
{
int i;
unsigned long startaddr;
if(MAX_NUM_SECTOR > SectorTh){
startaddr = ROMADDRESS + SectorTh * SECTORSIZE;
SST39VF160_SectorErase(startaddr);
for( i = 0; i < SECTORSIZE; i ++ ){
SST39VF160_WordProg(startaddr, *((U16 *)DataAddr));
startaddr ++;
DataAddr += 2;
}
}
}
void SST39VF160_WordFromUart(void)
{
/*unsigned char *pString;
pString = Uart_GetString*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -