📄 fy_plt.c
字号:
end_program();
}
void lockbit()
{
int i;
unsigned char y;
// clrscr();
printf("\n\r");
printf("Please input the lockbit[1,2,3]:");
scanf("%d",&i);
switch(i)
{
case 1: y=0x67;
break;
case 2: y=0x27;
break;
case 3: y=0x07;
break;
default:printf("\nYou didnot select proper lockbit.");
printf("\nNo any lockbit programed.\n");
return;
}
start_program();
enable_program();
shout(0xac);
shout(y);
shout(0x55);
wait(100000);
end_program();
printf("\nHave programed lockbit %x.\n",i);
}
void testchip()
{
int i;
unsigned char x;
// clrscr();
printf("\n\r");
start_program();
enable_program();
i=0x2ffe;
x=read_code(i);
if((write_code(0x55,i))&&(write_code(0xaa,i))&&(write_code(x,i)))
{
printf("\nConnect chip OK ,Now can do program.\n");
}
else
{
printf("\nConnect chip failt!!!,you must check the connect or the chip type.\n");
};
end_program();
}
void modify()
{
int i;
unsigned char data;
unsigned long address,tempdata;
char *pstr,str[256];
pstr=str;
// clrscr();
printf("\n\r");
start_program();
enable_program();
rein:
printf("Please input the address of chip want to modify[0-2fff]:");
scanf("%s",pstr);
address=hval(pstr);
if (address>0x2fff){printf("Adress over range.\n");goto rein;};
printf("\nUse \"SPACE KEY\" to next adress,\"ENTER KEY\" to change,\"ESC KEY\" to return. ");
printf("\nFlash [Address:Data]");
nextaddress:
data=read_code(address);
printf("\t%4x:",address);
printf("%2x ",data);
/* x=wherex();
y=wherey();
*/
i=0;
pstr=str;
nextchar:
data=getch();
if (isxdigit(data))
{
printf("%c",data);
str[i++]=data;
}
if (data==0x1b)
{end_program();
printf("\n");
return;
};
if (data==0x20)
{address++;
goto nextaddress;
};
if(data==0x0d)
{
str[i]='\0';
tempdata=hval(pstr);
if (!write_code((unsigned char)tempdata,address))
{ end_program();
printf("\nWrite the address %4x:",address);
printf("%2x failt!!!\n",tempdata);
return;
};
address++;
goto nextaddress;
};
goto nextchar;
}
void terminate()
{
printf("\nNow the prorgram return to dos.");
exit(0);
}
void erasechip()
{ char key;
// clrscr();
printf("\n\r");
printf("Are you shur EREASE the chip? (Y/N)");
key=toupper(getch());
printf("%c\n\n",key);
if (key=='N') return;
start_program();
enable_program();
erase_chip();
end_program();
printf("\nErase chip complited.\n");
}
void verify()
{
int i,j;
unsigned char x,y;
FILE *fp;
char *filename,temp[]="temp.bin";
long start, end;
start = clock();
// clrscr();
printf("\n\r");
if (!loadfile()) return;
filename=temp;
if((fp=fopen(filename,"rb"))==NULL)
{printf("\nCannot open the temp file.\n");
return;
};
start_program();
enable_program();
i=0;j=0;
while(!feof(fp))
{
x=fgetc(fp);
y=read_code(i);
if (x==y)
{printf(".");}
else
{printf("address %4x: %4x -%4x\n",i,x,y);
j++;
};
i++;
};
fclose(fp);
end = clock();
if (j) {printf("\n\nSomeAdress verify failed!!!\n");}
else{printf("\n\nVerified OK!\n");};
printf("\nTotal verified %x bytes.\n",i);
printf("Verified failt %x bytes.\n",j);
printf("Total spend time %d mS\n",end-start);
end_program();
}
void start_program()
{
enable_outport();
clr_reset();
wait(1000);
clr_psck();
clr_mosi();
clr_ss();
set_reset();
wait(1000);
}
void end_program()
{
clr_psck();
clr_mosi();
clr_reset();
}
void clr_reset()
{
unsigned char x;
x=DP_InpB((validPpt+2));
x=setbit(x,RESET);
DP_OutpB((validPpt+2),x);
}
void set_reset()
{
unsigned char x;
x=DP_InpB((validPpt+2));
x=clrbit(x,RESET);
DP_OutpB((validPpt+2),x);
}
void clr_ss()
{
unsigned char x;
x=DP_InpB((validPpt+2));
x=clrbit(x,SS);
DP_OutpB((validPpt+2),x);
}
void set_ss()
{
unsigned char x;
x=DP_InpB((validPpt+2));
x=setbit(x,SS);
DP_OutpB((validPpt+2),x);
}
void clr_psck()
{
unsigned char x;
x=DP_InpB(validPpt);
x=clrbit(x,PSCK);
DP_OutpB(validPpt,x);
}
void set_psck()
{
unsigned char x;
x=DP_InpB(validPpt);
x=setbit(x,PSCK);
DP_OutpB(validPpt,x);
}
void clr_mosi()
{
unsigned char x;
x=DP_InpB(validPpt);
x=clrbit(x,MOSI);
DP_OutpB(validPpt,x);
}
void set_mosi()
{
unsigned char x;
x=DP_InpB(validPpt);
x=setbit(x,MOSI);
DP_OutpB(validPpt,x);
}
void enable_outport()
{ unsigned char x;
x=DP_InpB((validPpt+2));
x=x & 0xdf;
DP_OutpW((validPpt+2),0);
wait(1000);
}
void erase_chip()
{
shout(0xAC);
shout(0x04);
shout(0x55);
wait(500000);
}
void enable_program()
{
shout(0xAC);
shout(0x53);
shout(0x55);
wait(500000);
}
unsigned char write_code(unsigned char byte,unsigned int address)
{
unsigned char hi_address,low_address,x;
long timers,timers3;
hi_address=address / 0x100;
low_address=address % 0x100;
x=hi_address;
hi_address=hi_address<<3;
hi_address=movbit(hi_address,2,x,5);
hi_address=(hi_address & 0xfc)|0x02;
timers3=0;
restw:
shout(hi_address);
shout(low_address);
shout(byte);
timers=0;
do{
if(60 < timers++) goto errorw;
hi_address=hi_address&0xfc|0x01;
shout(hi_address);
shout(low_address);
x=shin();
}while (x!=byte);
return(1);
errorw: if (timers3++>=2){return(0);}
else{goto restw;};
}
unsigned char read_code(unsigned int address)
{
unsigned char hi_address,low_address,x;
hi_address=address / 0x100;
low_address=address % 0x100;
x=hi_address;
hi_address=hi_address<<3;
hi_address=movbit(hi_address,2,x,5);
hi_address=(hi_address & 0xfc) | 0x01;
shout(hi_address);
shout(low_address);
x=shin();
return(x);
}
unsigned char setbit(unsigned char byte_char,unsigned nbit)
{
unsigned char x=0x01;
x=x<<nbit;
byte_char=byte_char|x;
return(byte_char);
}
unsigned char notbit(unsigned char byte_char,unsigned nbit)
{
unsigned char x=0x01;
x=x<<nbit;
byte_char=byte_char^x;
return(byte_char);
}
unsigned char clrbit(unsigned char byte_char,unsigned nbit)
{
unsigned char x=0x01;
x=~(x<<nbit);
byte_char=byte_char & x;
return(byte_char);
}
unsigned char movbit(unsigned char byte_char1,unsigned n,unsigned char byte_char2,unsigned m)
{
unsigned char x=0x01;
x=~(x<<n);
byte_char1=byte_char1&x;
x=byte_char2;
x=(x>>m)<<n;
byte_char1=byte_char1|x;
return(byte_char1);
}
void shout(unsigned char outdata)
{
int i;
for (i=0;i<8;++i)
{
if(outdata&0x80){
DP_OutpB(validPpt,0x02);
DP_OutpB(validPpt,0x03);
DP_OutpB(validPpt,0x02);
}
else{
DP_OutpB(validPpt,0x00);
DP_OutpB(validPpt,0x01);
DP_OutpB(validPpt,0x00);
};
outdata=outdata<<1;
};
}
unsigned char shin()
{
unsigned char outdata=0,data;
int i;
for(i=0;i<8;++i)
{
outdata=outdata<<1;
DP_OutpB(validPpt,0x01);
data=DP_InpB((validPpt+1));
DP_OutpB(validPpt,0x00);
if(data&0x80)outdata=outdata|0x01;
}
return(~outdata);
}
unsigned char shoutin(unsigned char outdata)
{
unsigned char data,indata=0;
int i;
for (i=0;i<8;++i)
{ indata=indata<<1;
if (outdata&0x80){
DP_OutpB(validPpt,0x02);
DP_OutpB(validPpt,0x03);
data=DP_InpB((validPpt+1));
DP_OutpB(validPpt,0x02);
}
else{
DP_OutpB(validPpt,0x00);
DP_OutpB(validPpt,0x01);
data=DP_InpB((validPpt+1));
DP_OutpB(validPpt,0x00);
};
if(data&0x80)indata=indata|0x01;
outdata=outdata<<1;
};
return(~indata);
}
void wait(long t)
{
long int i,j;
i=t;
for (i=1;i<=t;i++)
{
for(j=1;j<=165;j++);
};
}
long hval(char *str)
{ long number=0;
int i,n=0;
char ch;
i=strlen(str);
for(i--;i>=0;i--)
{ ch=*str;
if isxdigit(*str)
{ if (*str<=0x3a)
{ n=toupper(ch)-0x30;}
else
{ n=toupper(ch)-0x41+0x0a;};
};
number=(long)(number+ n*pow(16.0,(double)i));
str++;
}
return(number);
}
void waitdata()
{ int i,j;
unsigned char x,data;
// clrscr();
printf("\n\r");
printf("The plt work on slave mode.wait the sck . \n");
printf("Press any key return.\n \n");
j=0;
rewait:
data=0;
for (i=0; i<8;i++)
{
data=data<<1;
rehi:
do
{x=DP_InpB((validPpt+1)) & 0xc0;if (_kbhit()) return;}
while((x&0x40) == 0x00);
for(j=0;j<10;j++)
{
if ((DP_InpB((validPpt+1))&0x40)==0x00) goto rehi;
};
if((x&0x80) != 0x00) data= data | 0x01;
relow:
do
{x=DP_InpB((validPpt+1)) & 0xc0;if (_kbhit()) return;}
while((x&0x40) == 0x40);
for(j=0;j<10;j++)
{
if ((DP_InpB((validPpt+1))&0x40)==0x40) goto relow;
};
}
printf("%3x",data);
if (((j++)%16)==0) printf("\n");
goto rewait;
}
void polling()
{
set_ss();
waitdata();
clr_ss();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -