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