📄 k9d1g08.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 842]
; commandline [-errors .\err\k9d1g08.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
NF_ReadPage PROC
;;;410 static int NF_ReadPage(U32 block,U32 page,U8 *buffer)
;;;411 {
|L1.0|
000000 e92d41f0 STMFD sp!,{r4-r8,lr}
000004 e1a06000 MOV r6,r0
000008 e1a07001 MOV r7,r1
00000c e1a08002 MOV r8,r2
;;;412 int i;
;;;413 register U8 * bufPt=buffer;
000010 e1a04008 MOV r4,r8
;;;414 unsigned int blockPage;
;;;415
;;;416 blockPage=(block<<5)+page;
000014 e0875286 ADD r5,r7,r6,LSL #5
;;;417 NF_RSTECC(); // Reset ECC
000018 e59f0170 LDR r0,|L1.400|
00001c e5900004 LDR r0,[r0,#4]
000020 e3800f40 ORR r0,r0,#0x100
000024 e59f1164 LDR r1,|L1.400|
000028 e5810004 STR r0,[r1,#4]
;;;418 NF_MECC_UnLock();
00002c e1a00001 MOV r0,r1
000030 e5900004 LDR r0,[r0,#4]
000034 e3c00f80 BIC r0,r0,#0x200
000038 e5810004 STR r0,[r1,#4]
;;;419 NF_CLRRnB();
00003c e1a00001 MOV r0,r1
000040 e590002c LDR r0,[r0,#0x2c]
000044 e3800d80 ORR r0,r0,#0x2000
000048 e581002c STR r0,[r1,#0x2c]
;;;420 NF_nFCE_L(); // nCE enable
00004c e1a00001 MOV r0,r1
000050 e5900004 LDR r0,[r0,#4]
000054 e3c00080 BIC r0,r0,#0x80
000058 e5810004 STR r0,[r1,#4]
;;;421
;;;422 NF_CMD(0x00); // Read command
00005c e3a00000 MOV r0,#0
000060 e1c11000 BIC r1,r1,r0
000064 e5810008 STR r0,[r1,#8]
;;;423 // Address 4 cycles
;;;424 NF_ADDR(0); // Column address
000068 e3a00000 MOV r0,#0
00006c e1c11000 BIC r1,r1,r0
000070 e581000c STR r0,[r1,#0xc]
;;;425 NF_ADDR(blockPage&0xff); // page address
000074 e20500ff AND r0,r5,#0xff
000078 e581000c STR r0,[r1,#0xc]
;;;426 NF_ADDR((blockPage>>8)&0xff); //
00007c e1a00805 MOV r0,r5,LSL #16
000080 e1a00c20 MOV r0,r0,LSR #24
000084 e581000c STR r0,[r1,#0xc]
;;;427 NF_ADDR((blockPage>>16)&0xff); //
000088 e1a00405 MOV r0,r5,LSL #8
00008c e1a00c20 MOV r0,r0,LSR #24
000090 e581000c STR r0,[r1,#0xc]
;;;428
;;;429
;;;430 // for(i=0;i<5;i++); //wait tWB(100ns)
;;;431
;;;432 NF_TRANSRnB(); // Wait tRnB(max 12us)
000094 e1a00000 NOP
|L1.152|
000098 e59f00f0 LDR r0,|L1.400|
00009c e590002c LDR r0,[r0,#0x2c]
0000a0 e3100d80 TST r0,#0x2000
0000a4 0afffffb BEQ |L1.152|
;;;433
;;;434
;;;435 #if 0
;;;436 i=512;
;;;437 while(i--!=0)
;;;438 {
;;;439
;;;440 *bufPt++=NF_RDDATA(); // Read one page
;;;441
;;;442 }
;;;443 #elif 1
;;;444 //DMA
;;;445
;;;446 // rINTMSK=~(BIT_DMA);
;;;447 // rINTSUBMSK=~(BIT_SUB_DMA0);
;;;448 rSUBSRCPND=BIT_SUB_DMA0;
0000a8 e3a00780 MOV r0,#0x2000000
0000ac e59f10e0 LDR r1,|L1.404|
0000b0 e5810018 STR r0,[r1,#0x18]
;;;449
;;;450 rDISRC0=0x40c00010; //NF_RDDATA()
0000b4 e59f00dc LDR r0,|L1.408|
0000b8 e0811880 ADD r1,r1,r0,LSL #17
0000bc e5810000 STR r0,[r1,#0]
;;;451 rDISRCC0=(0<<1)|(1<<0); //arc=AHB,src_addr=fix
0000c0 e3a00001 MOV r0,#1
0000c4 e1c11000 BIC r1,r1,r0
0000c8 e5810004 STR r0,[r1,#4]
;;;452 rDIDST0=(unsigned)bufPt;
0000cc e1c10000 BIC r0,r1,r0
0000d0 e5804008 STR r4,[r0,#8]
;;;453 rDIDSTC0=(0<<1)|(0<<0); //dst=AHB,dst_addr=inc;
0000d4 e3a00000 MOV r0,#0
0000d8 e1c11000 BIC r1,r1,r0
0000dc e581000c STR r0,[r1,#0xc]
;;;454 rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(0<<20)|(512);
0000e0 e59f00b4 LDR r0,|L1.412|
0000e4 e0011000 AND r1,r1,r0
0000e8 e5810010 STR r0,[r1,#0x10]
;;;455 //Handshake,AHB,interrupt,(UNIT),whole,S/W,no_autoreload,byte,count=512;
;;;456
;;;457 rDMASKTRIG0=(1<<1)|(1<<0);
0000ec e3a00003 MOV r0,#3
0000f0 e1c11000 BIC r1,r1,r0
0000f4 e5810020 STR r0,[r1,#0x20]
;;;458
;;;459 // while(dmaDone==0);
;;;460
;;;461 // rINTSUBMSK=BIT_ALLMSK;
;;;462 // rINTMSK=BIT_ALLMSK;
;;;463
;;;464 while(!(rSUBSRCPND & BIT_SUB_DMA0));
0000f8 e1a00000 NOP
|L1.252|
0000fc e59f0090 LDR r0,|L1.404|
000100 e5900018 LDR r0,[r0,#0x18]
000104 e3100780 TST r0,#0x2000000
000108 0afffffb BEQ |L1.252|
;;;465 rSUBSRCPND=BIT_SUB_DMA0;
00010c e3a00780 MOV r0,#0x2000000
000110 e59f107c LDR r1,|L1.404|
000114 e5810018 STR r0,[r1,#0x18]
;;;466
;;;467 // while(!(rNF_STAT&(1<<10)));
;;;468
;;;469 #elif 0
;;;470 __RdPage512(bufPt);
;;;471 #endif
;;;472 NF_MECC_Lock();
000118 e28005fb ADD r0,r0,#0x3ec00000
00011c e5900004 LDR r0,[r0,#4]
000120 e3800f80 ORR r0,r0,#0x200
000124 e28118a0 ADD r1,r1,#0xa00000
000128 e5810004 STR r0,[r1,#4]
;;;473
;;;474
;;;475 rNFMECCDATA0=NF_RDDATA();
00012c e1a00001 MOV r0,r1
000130 e5900010 LDR r0,[r0,#0x10]
000134 e5810014 STR r0,[r1,#0x14]
;;;476 rNFMECCDATA1=NF_RDDATA();
000138 e1a00001 MOV r0,r1
00013c e5900010 LDR r0,[r0,#0x10]
000140 e5810018 STR r0,[r1,#0x18]
;;;477 rNFMECCDATA2=NF_RDDATA();
000144 e1a00001 MOV r0,r1
000148 e5900010 LDR r0,[r0,#0x10]
00014c e581001c STR r0,[r1,#0x1c]
;;;478 rNFMECCDATA3=NF_RDDATA();
000150 e1a00001 MOV r0,r1
000154 e5900010 LDR r0,[r0,#0x10]
000158 e5810020 STR r0,[r1,#0x20]
;;;479
;;;480 NF_nFCE_H();
00015c e1a00001 MOV r0,r1
000160 e5900004 LDR r0,[r0,#4]
000164 e3800080 ORR r0,r0,#0x80
000168 e5810004 STR r0,[r1,#4]
;;;481
;;;482
;;;483 if((rNFESTAT0&0x03)==0x0)
00016c e1a00001 MOV r0,r1
000170 e5900030 LDR r0,[r0,#0x30]
000174 e3100003 TST r0,#3
000178 1a000001 BNE |L1.388|
;;;484 {
;;;485 //Uart_Printf("[ECC OK!!!]\n");
;;;486 return 1;
00017c e3a00001 MOV r0,#1
;;;487 }
;;;488 else Uart_Printf("[ECC ERROR!!!]\n");
;;;489
;;;490 }
|L1.384|
000180 e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.388|
000184 e28f0014 ADR r0,|L1.416| ;488
000188 ebfffffe BL _printf ;488
00018c eafffffb B |L1.384|
|L1.400|
000190 40c00000 DCD 0x40c00000
|L1.404|
000194 40200000 DCD 0x40200000
|L1.408|
000198 40c00010 DCD 0x40c00010
|L1.412|
00019c e8400200 DCD 0xe8400200
|L1.416|
0001a0 4343455b DCB "[ECC"
0001a4 52524520 DCB " ERR"
0001a8 2121524f DCB "OR!!"
0001ac 000a5d21 DCB "!]\n\0"
ENDP
NF_MarkBadBlock PROC
;;;354 static int NF_MarkBadBlock(U32 block)
;;;355 {
0001b0 e92d4070 STMFD sp!,{r4-r6,lr}
0001b4 e1a06000 MOV r6,r0
;;;356 int i;
;;;357 U32 blockPage;
;;;358 blockPage=(block<<5);
0001b8 e1a05286 MOV r5,r6,LSL #5
;;;359
;;;360
;;;361 seBuf[0]=0xff;
0001bc e3a000ff MOV r0,#0xff
0001c0 e59f1160 LDR r1,|L1.808|
0001c4 e5c10000 STRB r0,[r1,#0] ; seBuf
;;;362 seBuf[1]=0xff;
0001c8 e3a000ff MOV r0,#0xff
0001cc e59f1154 LDR r1,|L1.808|
0001d0 e5c10001 STRB r0,[r1,#1] ; seBuf
;;;363 seBuf[2]=0xff;
0001d4 e3a000ff MOV r0,#0xff
0001d8 e59f1148 LDR r1,|L1.808|
0001dc e5c10002 STRB r0,[r1,#2] ; seBuf
;;;364 seBuf[3]=0xff;
0001e0 e3a000ff MOV r0,#0xff
0001e4 e59f113c LDR r1,|L1.808|
0001e8 e5c10003 STRB r0,[r1,#3] ; seBuf
;;;365 seBuf[5]=0x44; // Bad blcok mark=0
0001ec e3a00044 MOV r0,#0x44
0001f0 e59f1130 LDR r1,|L1.808|
0001f4 e5c10005 STRB r0,[r1,#5] ; seBuf
;;;366
;;;367
;;;368 // NF_CLRRnB();
;;;369 NF_nFCE_L();
0001f8 e51f0070 LDR r0,|L1.400|
0001fc e5900004 LDR r0,[r0,#4]
000200 e3c00080 BIC r0,r0,#0x80
000204 e51f107c LDR r1,|L1.400|
000208 e5810004 STR r0,[r1,#4]
;;;370
;;;371
;;;372 NF_CMD(0x50);
00020c e3a00050 MOV r0,#0x50
000210 e1c11000 BIC r1,r1,r0
000214 e5810008 STR r0,[r1,#8]
;;;373 NF_CMD(0x80); // Write 1st command
000218 e3a00080 MOV r0,#0x80
00021c e1c11000 BIC r1,r1,r0
000220 e5810008 STR r0,[r1,#8]
;;;374
;;;375 NF_ADDR(0x0); // The mark of bad block is
000224 e3a00000 MOV r0,#0
000228 e1c11000 BIC r1,r1,r0
00022c e581000c STR r0,[r1,#0xc]
;;;376 NF_ADDR((blockPage)&0xff); // marked 5th spare array
000230 e20500ff AND r0,r5,#0xff
000234 e581000c STR r0,[r1,#0xc]
;;;377 NF_ADDR((blockPage>>8)&0xff); // in the 1st page.
000238 e1a00805 MOV r0,r5,LSL #16
00023c e1a00c20 MOV r0,r0,LSR #24
000240 e581000c STR r0,[r1,#0xc]
;;;378 NF_ADDR((blockPage>>16)&0xff); //
000244 e1a00405 MOV r0,r5,LSL #8
000248 e1a00c20 MOV r0,r0,LSR #24
00024c e581000c STR r0,[r1,#0xc]
;;;379
;;;380 for(i=0;i<16;i++)
000250 e3a04000 MOV r4,#0
|L1.596|
000254 e3540010 CMP r4,#0x10
000258 aa000007 BGE |L1.636|
00025c ea000001 B |L1.616|
|L1.608|
000260 e2844001 ADD r4,r4,#1
000264 eafffffa B |L1.596|
;;;381 {
;;;382 //NF_WRDATA(0,seBuf[i]); // Write spare array
;;;383 NF_WRDATA(seBuf[i]); // Write spare array
|L1.616|
000268 e59f00b8 LDR r0,|L1.808|
00026c e7d00004 LDRB r0,[r0,r4]
000270 e51f10e8 LDR r1,|L1.400|
000274 e5810010 STR r0,[r1,#0x10]
;;;384 }
000278 eafffff8 B |L1.608|
;;;385
;;;386 NF_CMD(0x10); // Write 2nd command
|L1.636|
00027c e3a00010 MOV r0,#0x10
000280 e51f10f8 LDR r1,|L1.400|
000284 e5810008 STR r0,[r1,#8]
;;;387
;;;388 for(i=0;i<10;i++); //tWB = 100ns. ///???????
000288 e3a04000 MOV r4,#0
|L1.652|
00028c e354000a CMP r4,#0xa
000290 aa000001 BGE |L1.668|
000294 e2844001 ADD r4,r4,#1
000298 eafffffb B |L1.652|
;;;389
;;;390 NF_TRANSRnB(); // Wait tPROG(200~500us)
|L1.668|
00029c e1a00000 NOP
|L1.672|
0002a0 e51f0118 LDR r0,|L1.400|
0002a4 e590002c LDR r0,[r0,#0x2c]
0002a8 e3100d80 TST r0,#0x2000
0002ac 0afffffb BEQ |L1.672|
;;;391
;;;392 NF_CMD(0x70);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -