?? flash.c
字號:
#include <reg52.h>
#include "Mylib.h"
#define XMODEM_NAK 0x15
#define XMODEM_ACK 6
char xdata *FlashAddr;
char code *VenderName;
char code *DeviceName;
char VenderID;
char DeviceID;
char TopBootProtect;
char BottBootProtect;
int SectorSize=256;
int SectorMount=0;
uint PageNum;
uchar xdata XdataBuf[256];
uchar code CodeBuf[256*128] _at_ 0x8000;
uchar CodeCounter,CMDState,RecCode;
uchar Time0_5=0;
bit blRecCode,blRunWrite;
void SentToPc(uchar a);
extern void writeatchar(uchar position ,uchar a);
extern void writeddram1(char *datastring);
extern void writeddram2(char *datastring);
extern void init();
extern void delay1ms();
extern void Write_Isp_String(uchar AddressIndex,uchar *Read_Buf);
extern void from_ISP_Memory_switch_to_AP_Memory(void);
sbit TestClk=P1^2;
void SysInt()
{
SCON=0X50;
TMOD=0x11;
PCON=0x80;
T2CON=0x34; //用定時器2做波特率 57600
RCAP2H=0xff;
//RCAP2L=0xf3;
RCAP2L=0xf6; //18.432
ET1=1;
ES=1;
EA=1;
}
void timer1() interrupt 3
{
TestClk=~TestClk;
}
void IntSerial () interrupt 4
{
uchar RBuf;
static uchar i;
RBuf=SBUF;
if(RI)
{
RI=0;
if(blRecCode)
{
XdataBuf[i]=RBuf;
i++;
if(i==0x80)
{
blRecCode=0;
ES=0;
while(!RI);
RI=0;
SentToPc(XMODEM_ACK);
ES=1;
}
if(!i)
{
blRunWrite=1;
ES=0;
}
}
else
{
switch(CMDState)
{
case 0: //if(RBuf==0xaa)
if(RBuf==1)
CMDState=1;
break;
case 1: //if(RBuf==0xbb)
CMDState=2;
break;
/*case 2:
CMDState=3;
//PageNum=0x100*RBuf;
break;
case 3: //PageNum=PageNum+RBuf;
CMDState=0;
blRecCode=1;
break;*/
case 2: //PageNum=PageNum+RBuf;
CMDState=0;
blRecCode=1;
ET1=0;
break;
default: break;
}
}
}
}
void FlashWriteByte(unsigned int Addr,char Data)
{
FlashAddr=(char xdata *)Addr;
*FlashAddr=Data;
}
unsigned char FlashReadByte(unsigned int Addr)
{
return(CodeBuf[Addr]);
}
void FlashChipEarse(void)
{
FlashWriteByte(0x5555,0xAA);
FlashWriteByte(0x2AAA,0x55);
FlashWriteByte(0x5555,0x80);
FlashWriteByte(0x5555,0xAA);
FlashWriteByte(0x2AAA,0x55);
FlashWriteByte(0x5555,0x10);
}
/*void FlashWriteSector(unsigned int sector)
{
int byte_count;
unsigned long Addr;
FlashWriteByte(0x5555,0xAA);
FlashWriteByte(0x2AAA,0x55);
FlashWriteByte(0x5555,0xA0);
Addr=(unsigned long)sector*SectorSize;
for(byte_count=0; byte_count < SectorSize; byte_count++)
FlashWriteByte(Addr+byte_count,0xea);
//while(FlashReadByte(Addr) != FlashReadByte(Addr));
}*/
void FlashWriteSector(unsigned int sector)
{
uint byte_count=0,Addr;
if(sector<128)
{
Write_Isp_String(sector,XdataBuf);
}
else
{
FlashWriteByte(0x5555,0xAA);
FlashWriteByte(0x2AAA,0x55);
FlashWriteByte(0x5555,0xA0);
Addr=sector*SectorSize+0x8000;
for(byte_count=0; byte_count < SectorSize; byte_count++)
FlashWriteByte(Addr+byte_count,XdataBuf[byte_count]);
delay1ms();
delay1ms();
delay1ms();
delay1ms();
delay1ms();
delay1ms();
}
}
void FlashDisableProtection()
{
FlashWriteByte(0x5555,0xAA);
FlashWriteByte(0x2AAA,0x55);
FlashWriteByte(0x5555,0x80);
FlashWriteByte(0x5555,0xAA);
FlashWriteByte(0x2AAA,0x55);
FlashWriteByte(0x5555,0x20);
}
void SentToPc(uchar a)
{
SBUF=a;
while(!TI)
;
TI=0;
}
void SentPageData(uchar a)
{
uint i;
for(i=0;i!=256;i++)
SentToPc(FlashReadByte(a*SectorSize+i));
SentToPc(0xaa);
SentToPc(0xbb);
SentToPc(0xcc);
}
uchar CheckFlash(uint Address)
{
uint a;
for(a=0;a<200;a++)
{
if(FlashReadByte(a)!=0xaa)
return(0);
}
return(1);
}
void SwitchPage(uchar a)
{ uchar i;
i=P1;
i&=0xf0;
P1=i+a;
}
void ComparFlash(uchar a)
{
uchar i;
for(i=0;i<255;i++)
{
if(XdataBuf[i+1]!=FlashReadByte(a*SectorSize+i))
writeddram2(" error ");
}
}
void main()
{
//FlashInitial();
init();
init();
EA=0;
P1&=0xf0;
SysInt();
TR1=1;
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -