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

📄 ls_write_flash.c

📁 5402控制88796网卡的程序
💻 C
字号:
#include "c54reg.h"
#include "ls_system.h"
/////////////////////////////////////////////////
extern system_type system;
extern word use_receive_buff[512];
/////////////////////////////////////////////////
void flash_net_send(word flag);
void check_write(word *p,word val);
void flash_delay(void);
void flash_erase_chip(void);
word read_flash(word address);
/////////////////////////////////////////////////
//      模块名称:void flash_write_byte(word address,word val)                 
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
word flash_write_byte(word address,word val)                 
{word *p;
//////////1st///////////////////////////
p=(word *)0x5555+0x8000;
*p=0xaa;
//////////2st///////////////////////////
p=(word *)0x2aaa+0x8000;
*p=0x55;
//////////3st///////////////////////////
p=(word *)0x5555+0x8000;
*p=0xa0;
p=(word *)(address+0x8000);
*p=val;         
flash_delay();
//if (*p!=val) return 0;
//else 
 return 1;
}
/////////////////////////////////////////////////
//      模块名称:void flash_delay(void)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
void flash_delay(void)
{word tmp;
for(tmp=0;tmp<100;tmp++);
}
/////////////////////////////////////////////////
//      模块名称:word read_flash_byte(word address)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
word read_flash_byte(word address)
{word *p;
p=(word *)&address+0x8000;
return *p;
}
/////////////////////////////////////////////////
//      模块名称:word flash_write_page(word address,word *p,word lg)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
word flash_write_page(word address,word *p,word lg)
{word tmp;
 for (tmp=0;tmp<lg;tmp++) 
 {if (flash_write_byte(address+tmp*2,*p/256)!=1) return 0;
  if (flash_write_byte(address+tmp*2+1,*p%256)!=1)return 0;
  p++;
  };
return 1;
}              
/////////////////////////////////////////////////
//      模块名称:void flash_net_up(void)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
void flash_net_up(void)
{word tmp;
tmp=0;                   

do{
if (system.net_up_new==1)
{
system.net_up_new=0;
if (use_receive_buff[4]==0xffff) 
   {flash_net_send(0x0200);
   flash_write_byte(0x7ffe,0x80);
   flash_write_byte(0x7fff,0x00);
   system.net_command=FLAG_COMMAND_NO;
   return;};
if (use_receive_buff[4]!=tmp)
    {flash_net_send(0);return;};
if (flash_write_page(tmp*512,(word *)&use_receive_buff[5],256)!=1)
  {flash_net_send(0);return;};
tmp++;
};
}while(1);

}
/////////////////////////////////////////////////
//      模块名称:void flash_net_ack(void)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
void flash_net_ack(void)
{word tmps[10];
 sent_ip_set();
 tmps[0]=0x1000;
 tmps[3]=system.ver/256;
 tmps[4]=system.ver%256;
 tmps[5]=0x000;
 tmps[6]=0x000;
 tmps[7]=0x000;
 net_send_data(tmps,10);
 system.net_command=0;
}
/////////////////////////////////////////////////
//      模块名称:void flash_net_send(void)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
void flash_net_send(word flag)
{word tmps[10];
tmps[0]=0x1005;
tmps[1]=flag;
tmps[2]=0;
net_send_data(tmps,3);
}
/////////////////////////////////////////////////
//      模块名称:void flash_erase_chip(void)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
void flash_erase_chip(void)
{word *p;
//////////sw1/////////////
p=(word *)0x5555+0x8000;
*p=0xaa;
//////////sw2/////////////
p=(word *)0x2aaa+0x8000;
*p=0x55;
//////////sw3/////////////
p=(word *)0x5555+0x8000;
*p=0x80;
//////////sw4/////////////
p=(word *)0x5555+0x8000;
*p=0xaa;
//////////sw5/////////////
p=(word *)0x2aaa+0x8000;
*p=0x55;     
//////////sw1/////////////
p=(word *)0x5555+0x8000;
*p=0x10;
check_write(p,*p);
}          
void flash_net_erase(void)
{
flash_erase_chip();
system.net_command=FLAG_COMMAND_UP;
system.net_up_new=0;
}                                                   

/////////////////////////////////////////////////
//      模块名称:void flash_erase_chip(void)
//      模块功能:
//      入口参数:无
//      返回参数:无
//      版本序号:v1.0
//      测试日期:2005.2.21
/////////////////////////////////////////////////
void check_write(word *p,word val)
{word tmp;
do{       
tmp=*p;
if (tmp!=val) return;
}while(1);
}                                       

void write_test(void)
{word tmp;
for (tmp=0;tmp<0x8000;tmp++)
flash_write_byte(tmp,0x55);
} 
/*
///////////////////////////////
void flash_load_mprg(unsigned long int flash_address)
{word tmp,tbuff[16],tmp1,saddress,lg,daddress;
 word time,*p;
 time=0;  
 asm("	ssbx intm");
 //flash_address=0x78000;
 saddress=0;  
 asm("	nop");
 asm("	nop");
 asm("	nop");
 
 tmp=read_flash(flash_address);
 flash_address+=2;
 tmp=read_flash(flash_address);
 flash_address+=2;
 tmp=read_flash(flash_address);
 flash_address+=2;
 tmp=read_flash(flash_address); 
 flash_address+=4;              
 time=0;
///////////////////////////////////// 
 load_next:            
 
 lg=read_flash(flash_address);
  if (lg==0) goto flash_end; 
 flash_address+=2; 
 
 XPC=read_flash(flash_address);
 flash_address+=2;
 daddress=read_flash(flash_address);
 flash_address+=2;
 tmp1=lg-1;
 tmp=0;
 if (time!=3)  
 {time++;
 do{        
 
 tbuff[tmp]=read_flash(flash_address);
 flash_address+=2;
 tmp++;                               
 saddress++;
  if (tmp>15) {write_pmem(daddress,tbuff);
  daddress+=16;tmp=0;};     
if (saddress>0x1000)
 saddress=0;  
 }while(tmp1--);
 write_pmem(daddress,tbuff);
 goto load_next;
 }
else
 {time++; 
  p=(word *)daddress;
  do{
  *p++=read_flash(flash_address);
  flash_address+=2;
  }while(tmp1--);     
 goto load_next; 
 };                 
 
flash_end:       
  asm("	b 0x2000"); 
do{
}while(1);  

}                                                
/////////////////////////////////////////////////
//
/////////////////////////////////////////////////
word read_flash(word address)
{word *p,tmp;
p=(word *)address;
tmp=(*p++)<<8;
tmp+=(*p)&0xff;
return tmp;
}                        

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -