📄 k9k2g16.txt
字号:
0002a4 e3c00080 BIC r0,r0,#0x80
0002a8 e51f1094 LDR r1,|L1.540|
0002ac e5810004 STR r0,[r1,#4]
;;;394
;;;395 NF_CMD(0x80); // Write 1st command
0002b0 e3a00080 MOV r0,#0x80
0002b4 e1c11000 BIC r1,r1,r0
0002b8 e5810008 STR r0,[r1,#8]
;;;396
;;;397 NF_ADDR((0)&0xff); // 2048= 0x0800
0002bc e3a00000 MOV r0,#0
0002c0 e1c11000 BIC r1,r1,r0
0002c4 e581000c STR r0,[r1,#0xc]
;;;398 NF_ADDR(((0)>>8)&0xff); // A[10:8]
0002c8 e3a00000 MOV r0,#0
0002cc e1c11000 BIC r1,r1,r0
0002d0 e581000c STR r0,[r1,#0xc]
;;;399 NF_ADDR((blockPage)&0xff); // A[11;18]
0002d4 e20500ff AND r0,r5,#0xff
0002d8 e581000c STR r0,[r1,#0xc]
;;;400 NF_ADDR((blockPage>>8)&0xff); // A[26:19]
0002dc e1a00805 MOV r0,r5,LSL #16
0002e0 e1a00c20 MOV r0,r0,LSR #24
0002e4 e581000c STR r0,[r1,#0xc]
;;;401 NF_ADDR((blockPage>>16)&0xff); // A[27]
0002e8 e1a00405 MOV r0,r5,LSL #8
0002ec e1a00c20 MOV r0,r0,LSR #24
0002f0 e581000c STR r0,[r1,#0xc]
;;;402
;;;403 for(i=0;i<1024;i++)
0002f4 e3a04000 MOV r4,#0
|L1.760|
0002f8 e3540e40 CMP r4,#0x400
0002fc aa000006 BGE |L1.796|
000300 ea000001 B |L1.780|
|L1.772|
000304 e2844001 ADD r4,r4,#1
000308 eafffffa B |L1.760|
;;;404 {
;;;405 NF_WRDATA(0xffff);
|L1.780|
00030c e59f00e8 LDR r0,|L1.1020|
000310 e51f10fc LDR r1,|L1.540|
000314 e5810010 STR r0,[r1,#0x10]
;;;406 }
000318 eafffff9 B |L1.772|
;;;407
;;;408 for(i=0;i<32;i++)
|L1.796|
00031c e3a04000 MOV r4,#0
|L1.800|
000320 e3540020 CMP r4,#0x20
000324 aa000008 BGE |L1.844|
000328 ea000001 B |L1.820|
|L1.812|
00032c e2844001 ADD r4,r4,#1
000330 eafffffa B |L1.800|
;;;409 {
;;;410 NF_WRDATA(se16Buf[i]); // Write spare array
|L1.820|
000334 e51f0110 LDR r0,|L1.556|
000338 e0800084 ADD r0,r0,r4,LSL #1
00033c e1d000b0 LDRH r0,[r0,#0]
000340 e51f112c LDR r1,|L1.540|
000344 e5810010 STR r0,[r1,#0x10]
;;;411 }
000348 eafffff7 B |L1.812|
;;;412
;;;413 NF_CMD(0x10); // Write 2nd command
|L1.844|
00034c e3a00010 MOV r0,#0x10
000350 e51f113c LDR r1,|L1.540|
000354 e5810008 STR r0,[r1,#8]
;;;414
;;;415 for(i=0;i<10;i++); //tWB = 100ns. ///???????
000358 e3a04000 MOV r4,#0
|L1.860|
00035c e354000a CMP r4,#0xa
000360 aa000001 BGE |L1.876|
000364 e2844001 ADD r4,r4,#1
000368 eafffffb B |L1.860|
;;;416
;;;417 NF_TRANSRnB(); // Wait tPROG(200~500us)
|L1.876|
00036c e1a00000 NOP
|L1.880|
000370 e51f015c LDR r0,|L1.540|
000374 e590002c LDR r0,[r0,#0x2c]
000378 e3100d80 TST r0,#0x2000
00037c 0afffffb BEQ |L1.880|
;;;418
;;;419 NF_CMD(0x70);
000380 e3a00070 MOV r0,#0x70
000384 e51f1170 LDR r1,|L1.540|
000388 e5810008 STR r0,[r1,#8]
;;;420
;;;421 for(i=0;i<3;i++); //twhr=60ns////??????
00038c e3a04000 MOV r4,#0
|L1.912|
000390 e3540003 CMP r4,#3
000394 aa000001 BGE |L1.928|
000398 e2844001 ADD r4,r4,#1
00039c eafffffb B |L1.912|
;;;422
;;;423 if (NF_RDDATA()&0x1) // Spare arrray write error
|L1.928|
0003a0 e51f018c LDR r0,|L1.540|
0003a4 e5900010 LDR r0,[r0,#0x10]
0003a8 e3100001 TST r0,#1
0003ac 0a000007 BEQ |L1.976|
;;;424 {
;;;425 NF_nFCE_H();
0003b0 e51f019c LDR r0,|L1.540|
0003b4 e5900004 LDR r0,[r0,#4]
0003b8 e3800080 ORR r0,r0,#0x80
0003bc e51f11a8 LDR r1,|L1.540|
0003c0 e5810004 STR r0,[r1,#4]
;;;426 Uart_Printf("[Program error is occurred but ignored]\n");
0003c4 e28f0034 ADR r0,|L1.1024|
0003c8 ebfffffe BL _printf
0003cc ea000004 B |L1.996|
;;;427 }
;;;428 else
;;;429 {
;;;430 NF_nFCE_H();
|L1.976|
0003d0 e51f01bc LDR r0,|L1.540|
0003d4 e5900004 LDR r0,[r0,#4]
0003d8 e3800080 ORR r0,r0,#0x80
0003dc e51f11c8 LDR r1,|L1.540|
0003e0 e5810004 STR r0,[r1,#4]
;;;431 }
;;;432
;;;433 Uart_Printf("[block #%d is marked as a bad block]\n",block);
|L1.996|
0003e4 e1a01006 MOV r1,r6
0003e8 e28f003c ADR r0,|L1.1068|
0003ec ebfffffe BL _printf
;;;434 return 1;
0003f0 e3a00001 MOV r0,#1
;;;435 }
0003f4 e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.1016|
0003f8 00004444 DCD 0x00004444
|L1.1020|
0003fc 0000ffff DCD 0x0000ffff
|L1.1024|
000400 6f72505b DCB "[Pro"
000404 6d617267 DCB "gram"
000408 72726520 DCB " err"
00040c 6920726f DCB "or i"
000410 636f2073 DCB "s oc"
000414 72727563 DCB "curr"
000418 62206465 DCB "ed b"
00041c 69207475 DCB "ut i"
000420 726f6e67 DCB "gnor"
000424 0a5d6465 DCB "ed]\n"
000428 00000000 DCB "\0\0\0\0"
|L1.1068|
00042c 6f6c625b DCB "[blo"
000430 23206b63 DCB "ck #"
000434 69206425 DCB "%d i"
000438 616d2073 DCB "s ma"
00043c 64656b72 DCB "rked"
000440 20736120 DCB " as "
000444 61622061 DCB "a ba"
000448 6c622064 DCB "d bl"
00044c 5d6b636f DCB "ock]"
000450 0000000a DCB "\n\0\0\0"
ENDP
NF16_WritePage PROC
;;;544 static int NF16_WritePage(U32 block,U32 page,U16 *buffer)
;;;545 {
000454 e92d43f8 STMFD sp!,{r3-r9,lr}
000458 e1a05000 MOV r5,r0
00045c e1a07001 MOV r7,r1
000460 e1a08002 MOV r8,r2
;;;546 int i;
;;;547 U32 blockPage=(block<<6)+page;
000464 e0876305 ADD r6,r7,r5,LSL #6
;;;548 U16 *bufPt=buffer;
000468 e1a09008 MOV r9,r8
;;;549
;;;550 // Port setting for SMC_WP
;;;551 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x1<<2);
00046c e59f0358 LDR r0,|L1.1996|
000470 e5900008 LDR r0,[r0,#8]
000474 e3c0000c BIC r0,r0,#0xc
000478 e3800004 ORR r0,r0,#4
00047c e59f1348 LDR r1,|L1.1996|
000480 e5810008 STR r0,[r1,#8]
;;;552 rGPDAT |=(1<<1);
000484 e1a00001 MOV r0,r1
000488 e590000c LDR r0,[r0,#0xc]
00048c e3800002 ORR r0,r0,#2
000490 e581000c STR r0,[r1,#0xc]
;;;553
;;;554 NF_RSTECC(); // Initialize ECC
000494 e24107f0 SUB r0,r1,#0x3c00000
000498 e5900004 LDR r0,[r0,#4]
00049c e3800f40 ORR r0,r0,#0x100
0004a0 e24117f0 SUB r1,r1,#0x3c00000
0004a4 e5810004 STR r0,[r1,#4]
;;;555
;;;556 NF_MECC_UnLock();
0004a8 e1a00001 MOV r0,r1
0004ac e5900004 LDR r0,[r0,#4]
0004b0 e3c00f80 BIC r0,r0,#0x200
0004b4 e5810004 STR r0,[r1,#4]
;;;557
;;;558 NF_CLRRnB();
0004b8 e1a00001 MOV r0,r1
0004bc e590002c LDR r0,[r0,#0x2c]
0004c0 e3800d80 ORR r0,r0,#0x2000
0004c4 e581002c STR r0,[r1,#0x2c]
;;;559 NF_nFCE_L();
0004c8 e1a00001 MOV r0,r1
0004cc e5900004 LDR r0,[r0,#4]
0004d0 e3c00080 BIC r0,r0,#0x80
0004d4 e5810004 STR r0,[r1,#4]
;;;560
;;;561 NF_CMD(0x80); // Write 1st command
0004d8 e3a00080 MOV r0,#0x80
0004dc e1c11000 BIC r1,r1,r0
0004e0 e5810008 STR r0,[r1,#8]
;;;562 for(i=0;i<10;i++);
0004e4 e3a04000 MOV r4,#0
|L1.1256|
0004e8 e354000a CMP r4,#0xa
0004ec aa000001 BGE |L1.1272|
0004f0 e2844001 ADD r4,r4,#1
0004f4 eafffffb B |L1.1256|
;;;563
;;;564 NF_ADDR(0); // Column (A[7:0]) = 0
|L1.1272|
0004f8 e3a00000 MOV r0,#0
0004fc e51f12e8 LDR r1,|L1.540|
000500 e581000c STR r0,[r1,#0xc]
;;;565 NF_ADDR(0); // A[10:8]
000504 e3a00000 MOV r0,#0
000508 e1c11000 BIC r1,r1,r0
00050c e581000c STR r0,[r1,#0xc]
;;;566 NF_ADDR((blockPage)&0xff); // A[18:11]
000510 e20600ff AND r0,r6,#0xff
000514 e581000c STR r0,[r1,#0xc]
;;;567 NF_ADDR((blockPage>>8)&0xff); // A[26:19]
000518 e1a00806 MOV r0,r6,LSL #16
00051c e1a00c20 MOV r0,r0,LSR #24
000520 e581000c STR r0,[r1,#0xc]
;;;568 NF_ADDR((blockPage>>16)&0xff); // A7
000524 e1a00406 MOV r0,r6,LSL #8
000528 e1a00c20 MOV r0,r0,LSR #24
00052c e581000c STR r0,[r1,#0xc]
;;;569
;;;570 #if 0
;;;571 //data write into main data area
;;;572 for(i=0;i<1024;i++)
;;;573 {
;;;574 NF_WRDATA(*bufPt++);
;;;575
;;;576 // if(page==0){
;;;577 // if(i%8==0)
;;;578 // Uart_Printf("\n%xh:",i);
;;;579 // Uart_Printf("%04x ",*bufPt++);
;;;580 // }
;;;581 }
;;;582
;;;583 #elif 1
;;;584 //DMA
;;;585
;;;586 // rINTMSK=~(BIT_DMA);
;;;587 // rINTSUBMSK=~(BIT_SUB_DMA0);
;;;588 rSUBSRCPND=BIT_SUB_DMA0;
000530 e3a00780 MOV r0,#0x2000000
000534 e24118a0 SUB r1,r1,#0xa00000
000538 e5810018 STR r0,[r1,#0x18]
;;;589
;;;590 rDISRC0=(unsigned)bufPt;
00053c e28005f9 ADD r0,r0,#0x3e400000
000540 e5809000 STR r9,[r0,#0]
;;;591 rDISRCC0=(0<<1)|(0<<0); //arc=AHB,src_addr=inc
000544 e3a00000 MOV r0,#0
000548 e2811980 ADD r1,r1,#0x200000
00054c e5810004 STR r0,[r1,#4]
;;;592 rDIDST0=0x40c00010; //NF_WRDATA()
000550 e51f0334 LDR r0,|L1.548|
000554 e0011000 AND r1,r1,r0
000558 e5810008 STR r0,[r1,#8]
;;;593 rDIDSTC0=(0<<1)|(1<<0); //dst=AHB,dst_addr=fix;
00055c e3a00001 MOV r0,#1
000560 e1c11000 BIC r1,r1,r0
000564 e581000c STR r0,[r1,#0xc]
;;;594 rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(1<<20)|(2048/2);
000568 e59f0260 LDR r0,|L1.2000|
00056c e0011000 AND r1,r1,r0
000570 e5810010 STR r0,[r1,#0x10]
;;;595 //Handshake,AHB,interrupt,(UNIT),whole,S/W,no_autoreload,16bit,count=2048/2;
;;;596
;;;597 rDMASKTRIG0=(1<<1)|(1<<0);
000574 e3a00003 MOV r0,#3
000578 e1c11000 BIC r1,r1,r0
00057c e5810020 STR r0,[r1,#0x20]
;;;598
;;;599 // while(dmaDone==0);
;;;600
;;;601 // rINTSUBMSK=BIT_ALLMSK;
;;;602 // rINTMSK=BIT_ALLMSK;
;;;603
;;;604 while(!(rSUBSRCPND & BIT_SUB_DMA0));
000580 e1a00000 NOP
|L1.1412|
000584 e51f036c LDR r0,|L1.544|
000588 e5900018 LDR r0,[r0,#0x18]
00058c e3100780 TST r0,#0x2000000
000590 0afffffb BEQ |L1.1412|
;;;605 rSUBSRCPND=BIT_SUB_DMA0;
000594 e3a00780 MOV r0,#0x2000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -