📄 ls_write_flash.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 + -