📄 parfpm.lst
字号:
272 //0e: Write i and chk
273 //0f: Pre-bake: Program Slave CPU with AA and check result
274 //10: LED/Beeper
275 //11: Key On-Off
276 //12: Key Voltage Level
277 //13: SRD/SWR Test???
278 unsigned char util (unsigned char cpu, unsigned char k)
279 { unsigned int i;
280 1 unsigned int n,e,f, end;
281 1 unsigned char c, err=0, cpux,src_cpu, dest_cpu, pat, ps=0, done
-=0, trial=0, inc,a,s,j;
282 1 bit kk;
283 1 if (target.exist) n=target.kbyte*1024; else n=32*1024;
284 1 if (k==0x01){ // Secure Part
285 2 err=fpm(cpu|FWR,0x807f,fpm(cpu|FRD,0x807f,0) & 0x7F);
286 2 }
287 1 if (k==0x02){ // 'cpu' define dest CPU
288 2 if (cpu==CPUS) {src_cpu=CPUA; dest_cpu=CPUS;}
289 2 else if (cpu==CPUA) {src_cpu=CPUS; dest_cpu=CPUA;}
290 2 else err=9;
291 2 err |= fpm(dest_cpu|FME,0x0000,0xff);
292 2 err |= fpm(dest_cpu|FME,0x8000,0xff);
293 2 if (err!=0) err=1;
294 2 else {
295 3 i=0; done=0; f=0; err=0; led(RED,ON);
296 3 while(!done){
297 4 s=fpm(dest_cpu|FRD,i,0);
298 4 if (s!=0xff) {err=2; f=i; done=1;} //Blank0 check err
299 4 else {
300 5 a=fpm(src_cpu|FRD,i,0);
301 5 if (a!=0xff) {
302 6 fpm(dest_cpu|FWR,i,a);
303 6 s=fpm(dest_cpu|FRD,i,0);
304 6 if (s!=a) {err=3; f=i; done=1;} // Write0 Err
305 6 }
306 5 }
307 4 if ((i&0x01ff)==0x0100) {led(GREEN,OFF);}
308 4 if ((i&0x01ff)==0x0000) {led(GREEN,ON);}
309 4 i++; if (i==n) done=1;
310 4 }
311 3 i=0x8000; done=0;
312 3 while(!done && err==0){
313 4 if (!blackout(i)){
314 5 s=fpm(dest_cpu|FRD,i,0);
315 5 if (s!=0xff) {err=4; f=i; done=1;} //Blank1 check err
316 5 else {
317 6 a=fpm(src_cpu|FRD,i,0);
318 6 if (a!=0xff) {
319 7 fpm(dest_cpu|FWR,i,a);
320 7 s=fpm(dest_cpu|FRD,i,0);
321 7 if (s!=a) {err=5; f=i; done=1;} // Write1 Err
322 7 }
323 6 }
324 5 }
325 4 i++; if (i==0x8080) done=1;
326 4 }
327 3 }
328 2 if (err==1) putstr(" Mass Erase Error");
329 2 if (err==2 || err==4) putstr(" Blank Check Error:");
330 2 if (err==3 || err==5) putstr(" Write Error:");
331 2 if (err!=0) {led(RED,ON);led(GREEN,OFF);tx_hex(f>>8); tx_hex(f);
- } else {led(RED,OFF);led(GREEN,ON);}
332 2 }
333 1 if (k==0x03 || k==0x04){
334 2 src_cpu=cpu;
335 2 if (k==0x03 && cpu==CPUA) { dest_cpu=CPUS;}
336 2 if (k==0x03 && cpu==CPUS) { dest_cpu=CPUA;}
337 2 i=0; done=0; f=0; err=0; led(GREEN,OFF);
338 2 while(!done){
339 3 a=fpm(src_cpu|FRD,i,0);
340 3 if (k==0x03) s=fpm(dest_cpu|FRD,i,0); else s=0xff;
341 3 if (s!=a) {err=1; f=i; done=1;}
342 3 i++; if (i==n) done=1;
343 3 if ((i&0x01ff)==0x0100) {led(RED,OFF);}
344 3 if ((i&0x01ff)==0x0000) {led(RED,ON);}
345 3 }
346 2 i=0x8000; done=0;
347 2 while(!done && err==0){
348 3 if (!blackout(i)){
349 4 a=fpm(src_cpu|FRD,i,0);
350 4 if (k==0x03) s=fpm(dest_cpu|FRD,i,0); else s=0xff;
351 4 if (s!=a) {err=1; f=i; done=1;}
352 4 }
353 3 i++; if (i==0x8080) done=1;
354 3 }
355 2 if (err!=0) {
356 3 putstr(" Error:");
357 3 led(RED,ON);led(GREEN,OFF);tx_hex(f>>8); tx_hex(f);
358 3 } else {led(RED,OFF);led(GREEN,ON);}
359 2 }
360 1 if (k==5){ // mass erase
361 2 err |= fpm(cpu|FME,0x0000,0xff);
362 2 err |= fpm(cpu|FME,0x8000,0xff);
363 2 }
364 1 if (k==7) { P0DDR=P0OUT; while(RI==0) id= c++; P0DDR=P0IDLE;}
365 1 if (k==8) while(RI==0) al= c++;
366 1 if (k==9) while(RI==0){ ah= c++; CP=0; CP=1;}
367 1 if (k==0x0a) while(RI==0) {CMD0=(c&1)?0:1; CMD1=(c&2)?0:1; CMD2
-=(c&4)?0:1; REQA=(c&8)?0:1; REQS=(c&16)?0:1; c=((c&0x1f)==0x1f)?0:(
-c+1);}
368 1 if (k==0x0b) { // Address Decoder and connection check
369 2 putstr("March Up {R1,W0,R0} ");
370 2 fpm(cpu|FME,0,0xff);
371 2 i=0; inc=1; end=n; done=0; f=0; err=0;
372 2 while(!done){
373 3 c=fpm(cpu|FRD,i,0);
374 3 if (c!=0xff) {CMD2=1; err|=1; f=i; done=1;}
375 3 else {
376 4 CMD1=1; fpm(cpu|FWR,i,0); c=fpm(cpu|FRD,i,0);
377 4 if (c!=0) {CMD2=1; err|=1; f=i; done=1;}
378 4 }
379 3 if ((i&0x01ff)==0x01ff) {led(RED,ON); led(GREEN,OFF);}
380 3 if ((i&0x01ff)==0x00ff) {led(RED,OFF); led(GREEN,OFF);}
381 3 i+=inc; if (i==end) done=1;
382 3 }
383 2 if (err!=0) {tx_hex(f>>8); tx_hex(f);}
384 2 putstr("March Down {R1,W0,R0} ");
385 2 fpm(cpu|FME,0,0xff);
386 2 i=n-1; end=0xffff; done=0; f=0;
387 2 while(!done){
388 3 c=fpm(cpu|FRD,i,0);
389 3 if (c!=0xff) {CMD2=1; err|=1; f=i; done=1;}
390 3 else {
391 4 CMD1=1; fpm(cpu|FWR,i,0); c=fpm(cpu|FRD,i,0);
392 4 if (c!=0) {CMD2=1; err|=1; f=i; done=1;}
393 4 }
394 3 if ((i&0x01ff)==0x01ff) {led(RED,ON); led(GREEN,ON);}
395 3 if ((i&0x01ff)==0x00ff) {led(RED,ON); led(GREEN,OFF);}
396 3 i--; if (i==end) done=1;
397 3 }
398 2 if (err!=0) {
399 3 tx_hex(f>>8); tx_hex(f); led(RED,ON); led(GREEN,OFF);
400 3 } else {led(RED,OFF); led(GREEN,ON);}
401 2 }
402 1 if (k==0x0c){ //After Bake Retention test only
403 2 e=0; f=0;
404 2 i=0; for (i=0;i<n;i++){ // Retention check 0000~80000
405 3 c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1; err=1; if (f==0) f=i;
-} else {CMD1=1;}
406 3 if ((i&0x01ff)==0x01ff) {led(RED,ON); led(GREEN,ON);}
407 3 if ((i&0x01ff)==0x00ff) {led(RED,OFF); led(GREEN,OFF);}
408 3 }
409 2 i=0; for (i=0x8000;i<0x8080;i++){ // Retention check 80000~807F
- 410 3 if (blackout(i)==0){
411 4 c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1; err=1; if (e==0) e=i
-;} else {CMD1=1;}
412 4 }
413 3 }
414 2 if (err!=0) {tx_hex(f>>8); tx_hex(f);tx_hex(e>>8); tx_hex(e);}
- 415 2 }
416 1 if (k==0x0d){ //After-bake retention chk & March Test
417 2 e=0; f=0;
418 2 i=0; for (i=0;i<n;i++){ // Retention check 0000~80000
419 3 c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1; err=1; if (f==0) {f=i
-;}} else {CMD1=1;}
420 3 if ((i&0x01ff)==0x01ff) led(RED,ON);
421 3 if ((i&0x01ff)==0x00ff) led(RED,OFF);
422 3 }
423 2 i=0; for (i=0x8000;i<0x8080;i++){ // Retention check 80000~807F
- 424 3 if (blackout(i)==0){
425 4 c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1; err=1; if (e==0) {e
-=i;}} else {CMD1=1;}
426 4 }
427 3 }
428 2 if (err!=0) {tx_hex(f>>8); tx_hex(f);tx_hex(e>>8); tx_hex(e);}
- 429 2 else {resetpfpm(); err|=march(cpu);}
430 2 }
431 1 if (k==0x0e){ //Write i and chk
432 2 err |= fpm(cpu|FME,0x0000,0xff);
433 2 err |= fpm(cpu|FME,0x8000,0xff);
434 2 tx_hex(n>>8); tx_hex(n); e=0; f=0;
435 2 i=0; for (i=0;i<n;i++){fpm(cpu|FWR,i,i); c=fpm(cpu|FRD,i,0); if
- (c!=(unsigned char) i) {CMD2=1; err=1; if (e==0) {e=i;}} else {CMD
-1=1;} }
436 2 i=0; for (i=0;i<n;i++){c=fpm(cpu|FRD,i,0); if (c!=(unsigned cha
-r) i) {CMD2=1; if (f==0) {err=1; f=i;}} else {CMD1=1;} }
437 2 if (err!=0) {tx_hex(f>>8); tx_hex(f);tx_hex(e>>8); tx_hex(e);}
- 438 2 }
439 1 if (k==0x0f){
440 2 err |= fpm(cpu|FME,0x0000,0xff);
441 2 err |= fpm(cpu|FME,0x8000,0xff);
442 2 e=0; f=0; i=0; done=0;
443 2 led(RED,ON);
444 2 while (!done){
445 3 if (!blackout(i)) {fpm(cpu|FWR,i,ONE); c=fpm(cpu|FRD,i,0); }
446 3 else c=ONE;
447 3 if (c==ONE ) {
448 4 CMD1=1; trial=0; i++;
449 4 if (ps==1 && i>=0x8080) done=1;
450 4 if (ps==0 && i>=n) { ps=1; i=0x8000;}
451 4 } else if (trial <3) trial ++; else {CMD2=1; err=1; e=i; done=
-1;}
452 3 if ((i&0x01ff)==0x01ff) led(GREEN,ON);
453 3 if ((i&0x01ff)==0x00ff) led(GREEN,OFF);
454 3 }
455 2 err=resetpfpm();
456 2 i=0; e=0; f=0;
457 2 for (i=0;i<n;i++){ // Double chk all
458 3 c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1; err=1; e=i;} else {CM
-D1=1;}
459 3 led(RED,ON);
460 3 if ((i&0x01ff)==0x01ff) led(GREEN,ON);
461 3 if ((i&0x01ff)==0x00ff) led(GREEN,OFF);
462 3 }
463 2 i=0; for (i=0x8000;i<0x8080;i++){ // Double chk all
464 3 if (blackout(i)==0){
465 4 c=fpm(cpu|FRD,i,0); if (c!=ONE) {CMD2=1; err=1; f=i;} else {C
-MD1=1;}
466 4 }
467 3 }
468 2 if (err!=0) {tx_hex(e>>8); tx_hex(e);tx_hex(f>>8); tx_hex(f);}
469 2 }
470 1 if (k==0x10) { while(RI==0){led(GREEN,ON); led(RED,OFF); beep(7
-00,200); led(GREEN,OFF); led(RED,ON); beep(300,200);}}
471 1 if (k==0x11) { while(RI==0){tx_hex(high(k1)); putspace1(); tx_h
-ex(high(k2));putspace1(); tx_hex(high(k3)); putcr(); beep(300,500);
-}}
472 1 if (k==0x12) { while(RI==0){tx_hex((k1)); putspace1(); tx_hex((
-k2));putspace1(); tx_hex((k3)); putcr();}}
473 1 RI=0; return (err);
474 1 }
WARNING C092 IN LINE 281 OF parfpm.c : 'cpux' is declared but not used
WARNING C092 IN LINE 281 OF parfpm.c : 'pat' is declared but not used
WARNING C092 IN LINE 281 OF parfpm.c : 'j' is declared but not used
WARNING C092 IN LINE 282 OF parfpm.c : 'kk' is declared but not used
475
476
RC51 COMPILER V03.03.29, PARFPM 06/03/03 11:10:05 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _fpm (BEGIN)
; Register R7 is assigned to parameter cmd
; Register R4R5 is assigned to parameter a
; Register R3 is assigned to parameter pd
; SOURCE LINE # 8
0000 EF MOV A,R7
0001 54F0 ANL A,#0F0H
0003 F500 R MOV cpu,A
0005 EF MOV A,R7
0006 540F ANL A,#00FH
0008 F500 R MOV cmdx,A
; R7 is assigned to rdcmd
; SOURCE LINE # 9
000A 6406 XRL A,#006H
000C 6004 JZ ?LAB7
000E E500 R MOV A,cmdx
0010 700C JNZ ?ELSE6
0012 ?LAB7:
0012 7F01 MOV R7,#001H
0014 E4 CLR A
0015 F5AD MOV P0DDR+01H,A
0017 F5AC MOV P0DDR,A
0019 7580FF MOV id,#0FFH
001C 8008 SJMP ?NXT13
001E ?ELSE6:
; SOURCE LINE # 10
001E E4 CLR A
001F F5AD MOV P0DDR+01H,A
0021 F5AC MOV P0DDR,A
0023 8B80 MOV id,R3
0025 FF MOV R7,A
0026 ?NXT13:
; SOURCE LINE # 11
0026 8C02 MOV AR2,R4
0028 8A90 MOV ah,R2
002A E500 R MOV A,cmdx
002C 5401 ANL A,#001H
002E 24FF ADD A,#0FFH
0030 92B5 MOV CMD0,C
0032 C2A3 CLR CP
0034 D2A3 SETB CP
0036 E500 R MOV A,cmdx
0038 5402 ANL A,#002H
003A 24FF ADD A,#0FFH
003C 92B6 MOV CMD1,C
; SOURCE LINE # 12
003E 8D90 MOV al,R5
0040 E500 R MOV A,cmdx
0042 5404 ANL A,#004H
0044 24FF ADD A,#0FFH
0046 92B7 MOV CMD2,C
; R6 is assigned to c
; SOURCE LINE # 13
0048 E500 R MOV A,cpu
004A 6480 XRL A,#080H
004C 7023 JNZ ?ELSE7
; SOURCE LINE # 14
004E D2A1 SETB REQA
0050 ?WHILE6:
0050 20A202 JB ACKA,?NXT15
0053 80FB SJMP ?WHILE6
0055 ?NXT15:
0055 E4 CLR A
0056 20B401 JB PASSA,?LAB9
0059 04 INC A
005A ?LAB9:
005A FE MOV R6,A
; SOURCE LINE # 15
005B EF MOV A,R7
005C 6004 JZ ?ELSE8
005E AE80 MOV R6,id
0060 8008 SJMP ?NXT16
0062 ?ELSE8:
0062 E4 CLR A
0063 F5AD MOV P0DDR+01H,A
0065 F5AC MOV P0DDR,A
0067 7580FF MOV id,#0FFH
006A ?NXT16:
; SOURCE LINE # 16
006A C2A1 CLR REQA
006C ?WHILE7:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -