📄 flash.pp
字号:
#line 3 "flash.h"
void EraseWholeFlash(void);
void EraseSector(int Sector);
void ReadDataFromFlash(int Sector,int StartAddr,char *data,int datalength);
void WriteDataInFlash(int Sector,int StartAddr,char *data,int datalength);
#line 3 "Delay.h"
void Delay50mS(void);
void Delay25mS(void);
void Delay4mS(void);
void Delay50uS(void);
void Delay8uS(void);
void Delay12uS(void);
void Delay24uS(void);
#line 229 "f2407_c.h"
ioport unsigned int portFF0F;
ioport unsigned int portFFFF;
#line 3 "partion.h"
typedef struct
{
char Head;
char Sector;
char Cylinder;
}CHS;
typedef struct
{
int SectorBytes;
char SectorsPerCluster;
int ReservedSectors;
char nbrFat;
int RootEntry;
int TotalSectors;
char Media;
int SectorsPerFAT;
int SectorsPerTrack;
int Heads;
long hiddenSectors;
long BigTotalSectors;
}BPB_FAT;
typedef struct
{
char FileName[8];
char ExtendName[3];
char FileAttribute;
char Reserved[10];
int time;
int date;
int firstcluster;
long filesize;
}RootDirectory;
#line 4 "global.h"
extern unsigned char databuffer[1024];
extern unsigned char databuffer1[512];
extern BPB_FAT bpb;
extern int curcylinder;
extern int filecounts;
extern int curFlashPage;
extern int curFlashOffset;
#line 13 "flash.c"
const char WPAGE[32]={
0xFF07,0xFF0F,0xFF17,0xFF1F,0xFF27,0xFF2F,0xFF37,0xFF3F,
0xFF47,0xFF4F,0xFF57,0xFF5F,0xFF67,0xFF6F,0xFF77,0xFF7F,
0xFF87,0xFF8F,0xFF97,0xFF9F,0xFFA7,0xFFAF,0xFFB7,0xFFBF,
0xFFC7,0xFFCF,0xFFD7,0xFFDF,0xFFE7,0xFFEF,0xFFF7,0xFFFF
};
void EraseWholeFlash()
{
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0xAAAA;
*(volatile unsigned int *)0x7095=0xFF17;
*(unsigned int *)0x8AAA=0x5555;
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0x8080;
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0xAAAA;
*(volatile unsigned int *)0x7095=0xFF17;
*(unsigned int *)0x8AAA=0x5555;
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0x1010;
Delay50mS();
}
void EraseSector(int Sector)
{
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0xAAAA;
*(volatile unsigned int *)0x7095=0xFF17;
*(unsigned int *)0x8AAA=0x5555;
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0x8080;
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0xAAAA;
*(volatile unsigned int *)0x7095=0xFF17;
*(unsigned int *)0x8AAA=0x5555;
*(volatile unsigned int *)0x7095=WPAGE[Sector];
*(unsigned int *)0x8555=0x3030;
Delay25mS();
}
void ProgramByte(int Sector,int Offset,int data)
{
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0xAAAA;
*(volatile unsigned int *)0x7095=0xFF17;
*(unsigned int *)0x8AAA=0x5555;
*(volatile unsigned int *)0x7095=0xFF2F;
*(unsigned int *)0x8555=0xA0A0;
*(volatile unsigned int *)0x7095=WPAGE[Sector];
*((unsigned int *)0x8000+Offset)=data;
Delay8uS();
}
void ReadDataFromFlash(int Sector,int StartAddr,char *data,int datalength)
{
int i;
*(volatile unsigned int *)0x7095=WPAGE[Sector];
for(i=0;i<datalength;++i)
{
data[i]=(char)*((unsigned int *)0x8000+StartAddr+i);
}
}
void WriteDataInFlash(int Sector,int StartAddr,char *data,int datalength)
{
int i;
for(i=0;i<datalength;++i)
{
ProgramByte(Sector,StartAddr+i,data[i]);
}
}
void WriteFileInFlash(int newfile,char *data,int datalength)
{
int i=datalength/2+datalength%2;
if(newfile)
{
curFlashPage+=1;
curFlashOffset=0;
WriteDataInFlash(curFlashPage,curFlashOffset,data,i);
curFlashOffset+=i;
}
else
{
if(curFlashOffset+i>4095)
{
WriteDataInFlash(curFlashPage,curFlashOffset,data,4096-curFlashOffset);
curFlashPage+=1;
WriteDataInFlash(curFlashPage,0,data+4096-curFlashOffset,i-4096+curFlashOffset);
curFlashOffset=i-4096+curFlashOffset;
}
else
{
WriteDataInFlash(curFlashPage,curFlashOffset,data,i);
curFlashOffset+=i;
}
}
}
void GetSTFromFlash(int design_number,int first_st,char *data,int st_numbers)
{
int i,sector,offset;
unsigned int temp;
int st[2];
long filesize;
sector=1;
offset=0;
for(i=0;i<design_number;++i)
{
ReadDataFromFlash(sector,offset,data,16);
temp=(data[15]<<8)+(data[15]>>8);
filesize=temp<<16;
temp=(data[14]<<8)+(data[14]>>8);
filesize+=temp;
sector+=(filesize+16)/8192+1;
}
for(i=0;i<st_numbers;++i)
{
sector+=((long)(first_st*3)+512+32)/8192;
offset=(((long)(first_st*3)+512+32)%8192)/2;
ReadDataFromFlash(sector,offset,st,2);
if(first_st%2)
{
data[i*2]=((st[1]&0x00c0)>>4)+(st[1]&0x0003);
data[i*2+1]=((st[0]&0x0003)+1)%3+((((st[1]&0x0300)>>8)+1)%3)*3+
((((st[0]&0x000c)>>2)+1)%3)*9+((((st[1]&0x0c00)>>10)+1)%3)*27+
((((st[1]&0x000c)>>2)+1)%3)*81-121;
data[i*2+1]<<=8;
data[i*2+1]+=((-1*((((st[0]&0x0030)>>4)+1)%3)+2)*9+(-1*((((st[1]&0xc000)>>14)+1)%3)+2)*3+
(-1*((((st[0]&0x00c0)>>6)+1)%3)+2)+(-1*((((st[1]&0x3000)>>12)+1)%3)+2)*27+
((((st[1]&0x0030)>>4)+1)%3)*81-121)&0x00ff;
}
else
{
data[i*2]=((st[1]&0xc000)>>12)+((st[1]&0x0300)>>8);
data[i*2+1]=(((st[0]&0x0300)>>8)+1)%3+(((st[0]&0x0003)+1)%3)*3+
((((st[0]&0x0c00)>>10)+1)%3)*9+((((st[0]&0x000c)>>2)+1)%3)*27+
((((st[1]&0x0c00)>>10)+1)%3)*81-121;
data[i*2+1]<<=8;
data[i*2+1]+=((-1*((((st[0]&0x3000)>>12)+1)%3)+2)*9+(-1*((((st[0]&0x00c0)>>6)+1)%3)+2)*27+
(-1*((((st[0]&0xc000)>>14)+1)%3)+2)*9+(-1*((((st[0]&0x0030)>>4)+1)%3)+2)*3+
((((st[1]&0x3000)>>12)+1)%3)*81-121)&0x00ff;
}
sector-=((long)(first_st*3)+512+32)/8192;
first_st++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -