⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.pp

📁 基于dsp的软驱控制源程序
💻 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 + -