📄 uart-spi-730.c
字号:
chip_1_page++;
delay(10);
PORTB &= ~0x10;//PB4(DF_CS)=0
write_SPI(MM_PAGE_TO_B1_XFER);//将第一页装入buffer1
write_SPI((uchar)(chip_1_page>>7));
write_SPI((uchar)(chip_1_page<<1));
write_SPI(0x00);
PORTB |= 0x10;//PB4(DF_CS)=1
chip_1_page++;
delay(10);
PORTB &= ~0x10;//PB4(DF_CS)=0
write_SPI(BUFFER_2_READ);//准备好从buffer2读取数据
write_SPI(0x00);
write_SPI(0x01);
write_SPI(0x00);
}
else if ( (chip_1_number>256)&&(chip_1_number<512) )
{
chip_1_page = chip_1_page-2;
write_SPI(MM_PAGE_TO_B2_XFER);//将第二页装入buffer2
write_SPI((uchar)(chip_1_page>>7));
write_SPI((uchar)(chip_1_page<<1));
write_SPI(0x00);
PORTB |= 0x10;//PB4(DF_CS)=1
chip_1_page++;
delay(10);
PORTB &= ~0x10;//PB4(DF_CS)=0
write_SPI(MM_PAGE_TO_B1_XFER);//将第一页装入buffer1
write_SPI((uchar)(chip_1_page>>7));
write_SPI((uchar)(chip_1_page<<1));
write_SPI(0x00);
PORTB |= 0x10;//PB4(DF_CS)=1
chip_1_page++;
delay(10);
PORTB &= ~0x10;//PB4(DF_CS)=0
write_SPI(BUFFER_2_READ);//准备好从buffer2读取数据
write_SPI(0x00);
write_SPI(0x01);
write_SPI( (char)(number) );
}
else if (chip_1_number==512)
{
chip_1_page = chip_1_page-2;
write_SPI(MM_PAGE_TO_B1_XFER);//将第一页装入buffer1
write_SPI((uchar)(chip_1_page>>7));
write_SPI((uchar)(chip_1_page<<1));
write_SPI(0x00);
PORTB |= 0x10;//PB4(DF_CS)=1
chip_1_page++;
number=0;
delay(10);
PORTB &= ~0x10;//PB4(DF_CS)=0
write_SPI(MM_PAGE_TO_B2_XFER);//将第二页装入buffer2
write_SPI((uchar)(chip_1_page>>7));
write_SPI((uchar)(chip_1_page<<1));
write_SPI(0x00);
PORTB |= 0x10;//PB4(DF_CS)=1
chip_1_page++;
delay(10);
PORTB &= ~0x10;//PB4(DF_CS)=0
write_SPI(BUFFER_1_READ);//准备好从buffer1读取数据
write_SPI(0x00);
write_SPI(0x00);
write_SPI(0x00);
}
}
//~~~~~~~~~~~~~~~~补零~~~~~~~~~~~~~~~~//
void zero(void)
{
if (tadl!=adl)
{
while(tadl!=adl)
{
/*as=0x40;
IO_SPI();
as=tadh;
IO_SPI();
as=tadl;
IO_SPI();
as=0x00;
IO_SPI();
as=0x48;
IO_SPI();
as=tadh;
IO_SPI();
as=tadl;
IO_SPI();
as=0x00;
IO_SPI();*/
datacache[z]=0x00;
z++;
datacache[z]=0x00;
z++;
if (tadl==0xFF)
{
tadl=adl;
adh--;
adl=0xFF;
ProgrammingFlash();
adh++;
adl=tadl;
tadh++;
}
else
{
fadl=tadl&0x3F; //取LSB后六位
if (fadl==0x3F)
{
tadl1=adl;
adl=tadl;
ProgrammingFlash();
adl=tadl1;
}
}
tadl++;
}
ads--;
}
beg=1;
}
void end(void)
{
if (rxtxend==0&&temp==':')
{
ts=0;
rxtxend=1;
}
if (rxtxend==1)
{
if (ts<7)
{
ts++;
}
else if (ts==7)
{
if (temp=='0')
{
ts++;
}
else
{
rxtxend=0;
ts=0;
}
}
else if (ts==8)
{
if (temp=='1')
{
rxtxend=2;
ts=0;
}
else
{
rxtxend=0;
ts=0;
}
}
}
if (rxtxend==2&&temp==0x0A)
{
rxtxend++;
}
}
//~~~~~~~~~~~~~~~~判断下载或编程是否结束并发送地址和长度~~~~~~~~~~~~~~~~//
void jud(void)
{
if (rxtxend==0&&temp==':')
{
ts=0;
rxtxend=1;
beg=0;
//tempadr=trueadr;
}
if (rxtxend==1)
{
if (ts==0)
{
ts++;
}
else if (ts==1)
{
xs=ds;
xs=xs-0x30;
xs=xs<<4;
ts++;
}
else if (ts==2)
{
ys=ds;
ys=ys-0x30;
cc=xs|ys;
ts++;
if (cc!=0x14)
{
ads++;
}
}
else if (ts==3)
{
xs=ds;
xs=xs-0x30;
xs=xs<<4;
ts++;
}
else if (ts==4)
{
ys=ds;
ys=ys-0x30;
trueadr=xs|ys;
trueadr=trueadr<<8;
ts++;
}
else if (ts==5)
{
xs=ds;
xs=xs-0x30;
xs=xs<<4;
ts++;
}
else if (ts==6)
{
ys=ds;
ys=ys-0x30;
trueadr=trueadr|(xs|ys);
adl=(char)((trueadr>>1)&0x00FF);
adh=(char)((trueadr>>9)&0x00FF);
ts++;
}
else if (ts==7)
{
if (temp=='0')
{
ts++;
}
else
{
rxtxend=0;
ts=0;
}
}
else if (ts==8)
{
if (temp=='1')
{
rxtxend=2;
ts=0;
ci=0;
ads=0;
fadl=tempadl&0xC0;
if (fadl==0xC0)
{
while(z<128)
{
datacache[z]=0xFF;
z++;
}
tempadh++;
tempadl=0x00;
adh=tempadh;
adl=tempadl;
ProgrammingFlash();
}
else
{
while(z<128)
{
datacache[z]=0xFF;
z++;
}
//tempadl++;
adh=tempadh;
adl=tempadl;
ProgrammingFlash();
}
}
else if (temp=='0'&&ads==0)
{
if (prof==1)
{
if (DataFlashstate==0x05||DataFlashstate==0x04||(proe==1&&temp2==1))
{
beg=1;
}
else if ((proe==1&&temp2==0))
{
beg=2;
}
}
else if (prof==0)
{
if (proe==1&&temp2==1)
{
beg=2;
}
}
rxtxend=0;
ts=0;
}
else if (temp=='0'&&ads!=0)
{
if (prof==1)
{
if (DataFlashstate==0x05||DataFlashstate==0x04||(proe==1&&temp2==1))
{
beg=1;
zero();
}
else if ((proe==1&&temp2==0))
{
beg=2;
ads=0;
}
}
else if (prof==0)
{
if (proe==1&&temp2==1)
{
beg=2;
ads=0;
}
}
rxtxend=0;
ts=0;
}
else
{
rxtxend=0;
ts=0;
}
}
}
if (rxtxend==2&&temp==0x0A)
{
rxtxend++;
}
}
//~~~~~~~~~~~~~~~~开始编程Flash并校验~~~~~~~~~~~~~~~~//
void Programme(void)
{
if (ci==0)
{
x=0;
y=0;
ci=1;
}
else if (ci==1)
{
xs=ds;
xs=xs-0x30;
xs=xs<<4;
ci++;
//i++;
}
else if (ci==2)
{
ys=ds;
ys=ys-0x30;
ds=xs|ys;
ci--;
x++;
if (y==0)
{
/*as=0x40;
IO_SPI();
as=adh;
IO_SPI();
as=adl;
IO_SPI();
as=ds;
IO_SPI();*/
datacache[z]=ds;
z++;
y=1;
}
else if (y==1)
{
/*as=0x48;
IO_SPI();
as=adh;
IO_SPI();
as=adl;
IO_SPI();
as=ds;
IO_SPI();*/
datacache[z]=ds;
z++;
/*
as=0x4C;
IO_SPI();
as=adh;
IO_SPI();
as=adl;
IO_SPI();
as=0x00;
IO_SPI();
*/
y=0;
if (adl==0xFF)
{
ProgrammingFlash();
adh++;
adl=0x00;
}
else
{
fadl=adl&0x3F; //取LSB后六位
if (fadl==0x3F)
{
_NOP();
_NOP();
ProgrammingFlash();
}
adl++;
}
}
}
if (x==cc)
{
tadl=adl;
tadh=adh;
cc=0;
as=0;
ci=0;
}
}
//~~~~~~~~~~~~~~~~开始编程EEPROM并校验~~~~~~~~~~~~~~~~//
void Programmeeprom(void)
{
if (ci==0)
{
x=0;
y=0;
ci=1;
}
else if (ci==1)
{
xs=ds;
xs=xs-0x30;
xs=xs<<4;
ci++;
}
else if (ci==2)
{
ys=ds;
ys=ys-0x30;
ds=xs|ys;
ci--;
x++;
as=0xC0;
IO_SPI();
as=eadh&0x3F;
IO_SPI();
as=eadl;
IO_SPI();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -