📄 k9s1208.txt
字号:
0002b0 e5810008 STR r0,[r1,#8]
;;;395
;;;396 for(i=0;i<3;i++); //twhr=60ns////??????
0002b4 e3a04000 MOV r4,#0
|L1.696|
0002b8 e3540003 CMP r4,#3
0002bc aa000001 BGE |L1.712|
0002c0 e2844001 ADD r4,r4,#1
0002c4 eafffffb B |L1.696|
;;;397
;;;398 if (NF_RDDATA()&0x1) // Spare arrray write error
|L1.712|
0002c8 e51f013c LDR r0,|L1.404|
0002cc e5900010 LDR r0,[r0,#0x10]
0002d0 e3100001 TST r0,#1
0002d4 0a000007 BEQ |L1.760|
;;;399 {
;;;400 NF_nFCE_H();
0002d8 e51f014c LDR r0,|L1.404|
0002dc e5900004 LDR r0,[r0,#4]
0002e0 e3800080 ORR r0,r0,#0x80
0002e4 e51f1158 LDR r1,|L1.404|
0002e8 e5810004 STR r0,[r1,#4]
;;;401 Uart_Printf("[Program error is occurred but ignored]\n");
0002ec e28f0030 ADR r0,|L1.804|
0002f0 ebfffffe BL _printf
0002f4 ea000004 B |L1.780|
;;;402 }
;;;403 else
;;;404 {
;;;405 NF_nFCE_H();
|L1.760|
0002f8 e51f016c LDR r0,|L1.404|
0002fc e5900004 LDR r0,[r0,#4]
000300 e3800080 ORR r0,r0,#0x80
000304 e51f1178 LDR r1,|L1.404|
000308 e5810004 STR r0,[r1,#4]
;;;406 }
;;;407
;;;408 Uart_Printf("[block #%d is marked as a bad block]\n",block);
|L1.780|
00030c e1a01006 MOV r1,r6
000310 e28f0038 ADR r0,|L1.848|
000314 ebfffffe BL _printf
;;;409 return 1;
000318 e3a00001 MOV r0,#1
;;;410 }
00031c e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.800|
000320 00000000 DCD ||.data$0||
|L1.804|
000324 6f72505b DCB "[Pro"
000328 6d617267 DCB "gram"
00032c 72726520 DCB " err"
000330 6920726f DCB "or i"
000334 636f2073 DCB "s oc"
000338 72727563 DCB "curr"
00033c 62206465 DCB "ed b"
000340 69207475 DCB "ut i"
000344 726f6e67 DCB "gnor"
000348 0a5d6465 DCB "ed]\n"
00034c 00000000 DCB "\0\0\0\0"
|L1.848|
000350 6f6c625b DCB "[blo"
000354 23206b63 DCB "ck #"
000358 69206425 DCB "%d i"
00035c 616d2073 DCB "s ma"
000360 64656b72 DCB "rked"
000364 20736120 DCB " as "
000368 61622061 DCB "a ba"
00036c 6c622064 DCB "d bl"
000370 5d6b636f DCB "ock]"
000374 0000000a DCB "\n\0\0\0"
ENDP
NF_WritePage PROC
;;;494 static int NF_WritePage(U32 block,U32 page,U8 *buffer)
;;;495 {
000378 e92d43f8 STMFD sp!,{r3-r9,lr}
00037c e1a05000 MOV r5,r0
000380 e1a08001 MOV r8,r1
000384 e1a07002 MOV r7,r2
;;;496 int i;
;;;497 U32 blockPage=(block<<5)+page;
000388 e0886285 ADD r6,r8,r5,LSL #5
;;;498 U8 *bufPt=buffer;
00038c e1a09007 MOV r9,r7
;;;499
;;;500 // Port setting for SMC_WP
;;;501 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x1<<2);
000390 e59f0280 LDR r0,|L1.1560|
000394 e5900008 LDR r0,[r0,#8]
000398 e3c0000c BIC r0,r0,#0xc
00039c e3800004 ORR r0,r0,#4
0003a0 e59f1270 LDR r1,|L1.1560|
0003a4 e5810008 STR r0,[r1,#8]
;;;502 rGPDAT |=(1<<1);
0003a8 e1a00001 MOV r0,r1
0003ac e590000c LDR r0,[r0,#0xc]
0003b0 e3800002 ORR r0,r0,#2
0003b4 e581000c STR r0,[r1,#0xc]
;;;503
;;;504 NF_RSTECC(); // Initialize ECC
0003b8 e24107f0 SUB r0,r1,#0x3c00000
0003bc e5900004 LDR r0,[r0,#4]
0003c0 e3800f40 ORR r0,r0,#0x100
0003c4 e24117f0 SUB r1,r1,#0x3c00000
0003c8 e5810004 STR r0,[r1,#4]
;;;505
;;;506 NF_MECC_UnLock();
0003cc e1a00001 MOV r0,r1
0003d0 e5900004 LDR r0,[r0,#4]
0003d4 e3c00f80 BIC r0,r0,#0x200
0003d8 e5810004 STR r0,[r1,#4]
;;;507
;;;508 NF_CLRRnB();
0003dc e1a00001 MOV r0,r1
0003e0 e590002c LDR r0,[r0,#0x2c]
0003e4 e3800d80 ORR r0,r0,#0x2000
0003e8 e581002c STR r0,[r1,#0x2c]
;;;509 NF_nFCE_L();
0003ec e1a00001 MOV r0,r1
0003f0 e5900004 LDR r0,[r0,#4]
0003f4 e3c00080 BIC r0,r0,#0x80
0003f8 e5810004 STR r0,[r1,#4]
;;;510
;;;511
;;;512 NF_CMD(0x0);// for programming 'A' area
0003fc e3a00000 MOV r0,#0
000400 e1c11000 BIC r1,r1,r0
000404 e5810008 STR r0,[r1,#8]
;;;513 NF_CMD(0x80); // Write 1st command
000408 e3a00080 MOV r0,#0x80
00040c e1c11000 BIC r1,r1,r0
000410 e5810008 STR r0,[r1,#8]
;;;514 NF_ADDR(0); // Column 0
000414 e3a00000 MOV r0,#0
000418 e1c11000 BIC r1,r1,r0
00041c e581000c STR r0,[r1,#0xc]
;;;515 NF_ADDR(blockPage&0xff); //
000420 e20600ff AND r0,r6,#0xff
000424 e581000c STR r0,[r1,#0xc]
;;;516 NF_ADDR((blockPage>>8)&0xff); // Block & page num.
000428 e1a00806 MOV r0,r6,LSL #16
00042c e1a00c20 MOV r0,r0,LSR #24
000430 e581000c STR r0,[r1,#0xc]
;;;517 NF_ADDR((blockPage>>16)&0xff); //
000434 e1a00406 MOV r0,r6,LSL #8
000438 e1a00c20 MOV r0,r0,LSR #24
00043c e581000c STR r0,[r1,#0xc]
;;;518
;;;519 #if 0
;;;520
;;;521 //data write into main data area
;;;522
;;;523 for(i=0;i<512;i++)
;;;524 {
;;;525 NF_WRDATA(*bufPt++);
;;;526 }
;;;527
;;;528
;;;529 #elif 1
;;;530 //DMA
;;;531
;;;532 // rINTMSK=~(BIT_DMA);
;;;533 // rINTSUBMSK=~(BIT_SUB_DMA0);
;;;534 rSUBSRCPND=BIT_SUB_DMA0;
000440 e3a00780 MOV r0,#0x2000000
000444 e24118a0 SUB r1,r1,#0xa00000
000448 e5810018 STR r0,[r1,#0x18]
;;;535
;;;536 rDISRC0=(unsigned)bufPt;
00044c e1a07009 MOV r7,r9
000450 e28005f9 ADD r0,r0,#0x3e400000
000454 e5809000 STR r9,[r0,#0]
;;;537 rDISRCC0=(0<<1)|(0<<0); //arc=AHB,src_addr=inc
000458 e3a00000 MOV r0,#0
00045c e2811980 ADD r1,r1,#0x200000
000460 e5810004 STR r0,[r1,#4]
;;;538 rDIDST0=0x40c00010; //NF_WRDATA()
000464 e51f02d0 LDR r0,|L1.412|
000468 e0011000 AND r1,r1,r0
00046c e5810008 STR r0,[r1,#8]
;;;539 rDIDSTC0=(0<<1)|(1<<0); //dst=AHB,dst_addr=fix;
000470 e3a00001 MOV r0,#1
000474 e1c11000 BIC r1,r1,r0
000478 e581000c STR r0,[r1,#0xc]
;;;540 rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(0<<20)|(512);
00047c e51f02e4 LDR r0,|L1.416|
000480 e0011000 AND r1,r1,r0
000484 e5810010 STR r0,[r1,#0x10]
;;;541 //Handshake,AHB,interrupt,(UNIT),whole,S/W,no_autoreload,Byte,count=512;
;;;542
;;;543 rDMASKTRIG0=(1<<1)|(1<<0);
000488 e3a00003 MOV r0,#3
00048c e1c11000 BIC r1,r1,r0
000490 e5810020 STR r0,[r1,#0x20]
;;;544
;;;545 // while(dmaDone==0);
;;;546
;;;547 // rINTSUBMSK=BIT_ALLMSK;
;;;548 // rINTMSK=BIT_ALLMSK;
;;;549
;;;550 while(!(rSUBSRCPND & BIT_SUB_DMA0));
000494 e1a00000 NOP
|L1.1176|
000498 e51f0308 LDR r0,|L1.408|
00049c e5900018 LDR r0,[r0,#0x18]
0004a0 e3100780 TST r0,#0x2000000
0004a4 0afffffb BEQ |L1.1176|
;;;551 rSUBSRCPND=BIT_SUB_DMA0;
0004a8 e3a00780 MOV r0,#0x2000000
0004ac e51f131c LDR r1,|L1.408|
0004b0 e5810018 STR r0,[r1,#0x18]
;;;552
;;;553 // while(!(rNF_STAT&(1<<10)));
;;;554
;;;555 #elif 0
;;;556 __WrPage512(bufPt);
;;;557 #endif
;;;558
;;;559 NF_MECC_Lock();
0004b4 e28005fb ADD r0,r0,#0x3ec00000
0004b8 e5900004 LDR r0,[r0,#4]
0004bc e3800f80 ORR r0,r0,#0x200
0004c0 e28118a0 ADD r1,r1,#0xa00000
0004c4 e5810004 STR r0,[r1,#4]
;;;560
;;;561 #if ECC_CHECK
;;;562 //ECC generation from main area ECC status.
;;;563
;;;564 seBuf[0]=rNFMECC0&0xff;
0004c8 e1a00001 MOV r0,r1
0004cc e5900038 LDR r0,[r0,#0x38]
0004d0 e51f11b8 LDR r1,|L1.800|
0004d4 e5c10000 STRB r0,[r1,#0] ; seBuf
;;;565 seBuf[1]=(rNFMECC0>>8)&0xff;
0004d8 e51f034c LDR r0,|L1.404|
0004dc e5900038 LDR r0,[r0,#0x38]
0004e0 e1a00800 MOV r0,r0,LSL #16
0004e4 e1a00c20 MOV r0,r0,LSR #24
0004e8 e51f11d0 LDR r1,|L1.800|
0004ec e5c10001 STRB r0,[r1,#1] ; seBuf
;;;566 seBuf[2]=(rNFMECC0>>16)&0xff;
0004f0 e51f0364 LDR r0,|L1.404|
0004f4 e5900038 LDR r0,[r0,#0x38]
0004f8 e1a00400 MOV r0,r0,LSL #8
0004fc e1a00c20 MOV r0,r0,LSR #24
000500 e51f11e8 LDR r1,|L1.800|
000504 e5c10002 STRB r0,[r1,#2] ; seBuf
;;;567 //seBuf[3]=(rNFMECC0>>24)&0xff;
;;;568 seBuf[5]=0xff; // Marking good block
000508 e3a000ff MOV r0,#0xff
00050c e51f11f4 LDR r1,|L1.800|
000510 e5c10005 STRB r0,[r1,#5] ; seBuf
;;;569 /*
;;;570 // ECC generation from spare area ECC status.
;;;571 seBuf[?]=rNFSECC&0xff;
;;;572 seBuf[?]=(rNFSECC>>8)&0xff;
;;;573 seBuf[5]=0xff; // Marking good block
;;;574
;;;575 //write spare ECC into another spare area
;;;576 */
;;;577 //write ECC into spare area
;;;578 //write spare ECC into another spare area
;;;579
;;;580 for(i=0;i<16;i++)
000514 e3a04000 MOV r4,#0
|L1.1304|
000518 e3540010 CMP r4,#0x10
00051c aa000007 BGE |L1.1344|
000520 ea000001 B |L1.1324|
|L1.1316|
000524 e2844001 ADD r4,r4,#1
000528 eafffffa B |L1.1304|
;;;581 {
;;;582 NF_WRDATA(seBuf[i]);
|L1.1324|
00052c e51f0214 LDR r0,|L1.800|
000530 e7d00004 LDRB r0,[r0,r4]
000534 e51f13a8 LDR r1,|L1.404|
000538 e5810010 STR r0,[r1,#0x10]
;;;583 }
00053c eafffff8 B |L1.1316|
;;;584 #endif
;;;585
;;;586
;;;587 NF_CMD(0x10); // Write 2nd command
|L1.1344|
000540 e3a00010 MOV r0,#0x10
000544 e51f13b8 LDR r1,|L1.404|
000548 e5810008 STR r0,[r1,#8]
;;;588
;;;589 for(i=0;i<10;i++);
00054c e3a04000 MOV r4,#0
|L1.1360|
000550 e354000a CMP r4,#0xa
000554 aa000001 BGE |L1.1376|
000558 e2844001 ADD r4,r4,#1
00055c eafffffb B |L1.1360|
;;;590
;;;591 NF_TRANSRnB(); //wait tPROG 200~500us;
|L1.1376|
000560 e1a00000 NOP
|L1.1380|
000564 e51f03d8 LDR r0,|L1.404|
000568 e590002c LDR r0,[r0,#0x2c]
00056c e3100d80 TST r0,#0x2000
000570 0afffffb BEQ |L1.1380|
;;;592
;;;593
;;;594 NF_CMD(0x70); // Read status command
000574 e3a00070 MOV r0,#0x70
000578 e51f13ec LDR r1,|L1.404|
00057c e5810008 STR r0,[r1,#8]
;;;595
;;;596 for(i=0;i<3;i++);
000580 e3a04000 MOV r4,#0
|L1.1412|
000584 e3540003 CMP r4,#3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -