📄 k9k2g16.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 842]
; commandline [-errors .\err\k9k2g16.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
NF16_ReadPage PROC
;;;438 static int NF16_ReadPage(U32 block,U32 page,U16 *buffer)
;;;439 {
|L1.0|
000000 e92d43f8 STMFD sp!,{r3-r9,lr}
000004 e1a08000 MOV r8,r0
000008 e1a07001 MOV r7,r1
00000c e1a09002 MOV r9,r2
;;;440 int i,j;
;;;441 register U16 * bufPt=buffer;
000010 e1a04009 MOV r4,r9
;;;442 unsigned int blockPage;
;;;443
;;;444 blockPage=(block<<6)+page;
000014 e0876308 ADD r6,r7,r8,LSL #6
;;;445 NF_RSTECC(); // Reset ECC
000018 e59f01fc LDR r0,|L1.540|
00001c e5900004 LDR r0,[r0,#4]
000020 e3800f40 ORR r0,r0,#0x100
000024 e59f11f0 LDR r1,|L1.540|
000028 e5810004 STR r0,[r1,#4]
;;;446 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]
;;;447 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]
;;;448 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]
;;;449
;;;450 NF_CMD(0x00); // 1st Read command
00005c e3a00000 MOV r0,#0
000060 e1c11000 BIC r1,r1,r0
000064 e5810008 STR r0,[r1,#8]
;;;451
;;;452 NF_ADDR(0); // Column (A[7:0]) = 0
000068 e3a00000 MOV r0,#0
00006c e1c11000 BIC r1,r1,r0
000070 e581000c STR r0,[r1,#0xc]
;;;453 NF_ADDR(0); // A[10:8]
000074 e3a00000 MOV r0,#0
000078 e1c11000 BIC r1,r1,r0
00007c e581000c STR r0,[r1,#0xc]
;;;454 NF_ADDR((blockPage)&0xff); // A[18:11]
000080 e20600ff AND r0,r6,#0xff
000084 e581000c STR r0,[r1,#0xc]
;;;455 NF_ADDR((blockPage>>8)&0xff); // A[26:19]
000088 e1a00806 MOV r0,r6,LSL #16
00008c e1a00c20 MOV r0,r0,LSR #24
000090 e581000c STR r0,[r1,#0xc]
;;;456 NF_ADDR((blockPage>>16)&0xff); // A27
000094 e1a00406 MOV r0,r6,LSL #8
000098 e1a00c20 MOV r0,r0,LSR #24
00009c e581000c STR r0,[r1,#0xc]
;;;457
;;;458 NF_CMD(0x30); // 2nd Read command
0000a0 e3a00030 MOV r0,#0x30
0000a4 e1c11000 BIC r1,r1,r0
0000a8 e5810008 STR r0,[r1,#8]
;;;459
;;;460 // for(i=0;i<5;i++); //wait tWB(100ns)
;;;461
;;;462 NF_TRANSRnB(); // Wait tRnB(max 12us)
0000ac e1a00000 NOP
|L1.176|
0000b0 e59f0164 LDR r0,|L1.540|
0000b4 e590002c LDR r0,[r0,#0x2c]
0000b8 e3100d80 TST r0,#0x2000
0000bc 0afffffb BEQ |L1.176|
;;;463
;;;464 #if 0
;;;465 /*
;;;466 i=1024;
;;;467 while(i--!=0)
;;;468 {
;;;469
;;;470 *bufPt++=NF_RDDATA(); // Read one page
;;;471
;;;472 }
;;;473 */
;;;474 for(i=0;i<1024;i++) // 1 page
;;;475 {
;;;476 *bufPt++=NF_RDDATA(); // Read one page
;;;477
;;;478 }
;;;479
;;;480 #elif 1
;;;481 //DMA
;;;482
;;;483 // rINTMSK=~(BIT_DMA);
;;;484 // rINTSUBMSK=~(BIT_SUB_DMA0);
;;;485 rSUBSRCPND=BIT_SUB_DMA0;
0000c0 e3a00780 MOV r0,#0x2000000
0000c4 e59f1154 LDR r1,|L1.544|
0000c8 e5810018 STR r0,[r1,#0x18]
;;;486
;;;487 rDISRC0=0x40c00010; //NF_RDDATA()
0000cc e59f0150 LDR r0,|L1.548|
0000d0 e0811880 ADD r1,r1,r0,LSL #17
0000d4 e5810000 STR r0,[r1,#0]
;;;488 rDISRCC0=(0<<1)|(1<<0); //arc=AHB,src_addr=fix
0000d8 e3a00001 MOV r0,#1
0000dc e1c11000 BIC r1,r1,r0
0000e0 e5810004 STR r0,[r1,#4]
;;;489 rDIDST0=(unsigned)bufPt;
0000e4 e1c10000 BIC r0,r1,r0
0000e8 e5804008 STR r4,[r0,#8]
;;;490 rDIDSTC0=(0<<1)|(0<<0); //dst=AHB,dst_addr=inc;
0000ec e3a00000 MOV r0,#0
0000f0 e1c11000 BIC r1,r1,r0
0000f4 e581000c STR r0,[r1,#0xc]
;;;491 rDCON0=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(0<<23)|(1<<22)|(1<<20)|(2048/8);
0000f8 e59f0128 LDR r0,|L1.552|
0000fc e0011000 AND r1,r1,r0
000100 e5810010 STR r0,[r1,#0x10]
;;;492 //Handshake,AHB,interrupt,(BURST),whole,S/W,no_autoreload,16bit,count=2048/8;
;;;493
;;;494 rDMASKTRIG0=(1<<1)|(1<<0);
000104 e3a00003 MOV r0,#3
000108 e1c11000 BIC r1,r1,r0
00010c e5810020 STR r0,[r1,#0x20]
;;;495
;;;496 // while(dmaDone==0);
;;;497
;;;498 // rINTSUBMSK=BIT_ALLMSK;
;;;499 // rINTMSK=BIT_ALLMSK;
;;;500
;;;501 while(!(rSUBSRCPND & BIT_SUB_DMA0));
000110 e1a00000 NOP
|L1.276|
000114 e59f0104 LDR r0,|L1.544|
000118 e5900018 LDR r0,[r0,#0x18]
00011c e3100780 TST r0,#0x2000000
000120 0afffffb BEQ |L1.276|
;;;502 rSUBSRCPND=BIT_SUB_DMA0;
000124 e3a00780 MOV r0,#0x2000000
000128 e59f10f0 LDR r1,|L1.544|
00012c e5810018 STR r0,[r1,#0x18]
;;;503
;;;504 // while(!(rNF_STAT&(1<<10)));
;;;505
;;;506 #elif 0
;;;507 __RdPage1024(bufPt);
;;;508 #endif
;;;509 NF_MECC_Lock();
000130 e28005fb ADD r0,r0,#0x3ec00000
000134 e5900004 LDR r0,[r0,#4]
000138 e3800f80 ORR r0,r0,#0x200
00013c e28118a0 ADD r1,r1,#0xa00000
000140 e5810004 STR r0,[r1,#4]
;;;510
;;;511 for(i=0;i<32;i++) // 1 page
000144 e3a05000 MOV r5,#0
|L1.328|
000148 e3550020 CMP r5,#0x20
00014c aa000013 BGE |L1.416|
000150 ea000001 B |L1.348|
|L1.340|
000154 e2855001 ADD r5,r5,#1
000158 eafffffa B |L1.328|
;;;512 {
;;;513 se16Buf[i]=NF_RDDATA(); // Read one page
|L1.348|
00015c e59f00b8 LDR r0,|L1.540|
000160 e5900010 LDR r0,[r0,#0x10]
000164 e59f10c0 LDR r1,|L1.556|
000168 e0811085 ADD r1,r1,r5,LSL #1
00016c e1c100b0 STRH r0,[r1,#0]
;;;514
;;;515 if(page==0)
000170 e3570000 CMP r7,#0
000174 1a000008 BNE |L1.412|
;;;516 {
;;;517 if(i%16==0)
000178 e315000f TST r5,#0xf
00017c 1a000001 BNE |L1.392|
;;;518 Uart_Printf("\nR-SECC:");
000180 e28f00a8 ADR r0,|L1.560|
000184 ebfffffe BL _printf
;;;519 Uart_Printf("%04x ",se16Buf[i]);
|L1.392|
000188 e59f009c LDR r0,|L1.556|
00018c e0800085 ADD r0,r0,r5,LSL #1
000190 e1d010b0 LDRH r1,[r0,#0]
000194 e28f00a0 ADR r0,|L1.572|
000198 ebfffffe BL _printf
;;;520 }
;;;521
;;;522 }
|L1.412|
00019c eaffffec B |L1.340|
;;;523
;;;524 rNFMECCDATA0=se16Buf[0];
|L1.416|
0001a0 e59f0084 LDR r0,|L1.556|
0001a4 e1d000b0 LDRH r0,[r0,#0] ; se16Buf
0001a8 e59f106c LDR r1,|L1.540|
0001ac e5810014 STR r0,[r1,#0x14]
;;;525 rNFMECCDATA1=se16Buf[1];
0001b0 e59f0074 LDR r0,|L1.556|
0001b4 e1d000b2 LDRH r0,[r0,#2] ; se16Buf
0001b8 e5810018 STR r0,[r1,#0x18]
;;;526 rNFMECCDATA2=se16Buf[2];
0001bc e59f0068 LDR r0,|L1.556|
0001c0 e1d000b4 LDRH r0,[r0,#4] ; se16Buf
0001c4 e581001c STR r0,[r1,#0x1c]
;;;527 rNFMECCDATA3=se16Buf[3];
0001c8 e59f005c LDR r0,|L1.556|
0001cc e1d000b6 LDRH r0,[r0,#6] ; se16Buf
0001d0 e5810020 STR r0,[r1,#0x20]
;;;528
;;;529 NF_nFCE_H();
0001d4 e1a00001 MOV r0,r1
0001d8 e5900004 LDR r0,[r0,#4]
0001dc e3800080 ORR r0,r0,#0x80
0001e0 e5810004 STR r0,[r1,#4]
;;;530
;;;531 if(((rNFESTAT0&0x03)||(rNFESTAT1&0x03))==0x0)
0001e4 e1a00001 MOV r0,r1
0001e8 e5900030 LDR r0,[r0,#0x30]
0001ec e3100003 TST r0,#3
0001f0 1a000005 BNE |L1.524|
0001f4 e1a00001 MOV r0,r1
0001f8 e5900034 LDR r0,[r0,#0x34]
0001fc e3100003 TST r0,#3
000200 1a000001 BNE |L1.524|
;;;532 {
;;;533 //Uart_Printf("[ECC OK!!!]\n");
;;;534 return 1;
000204 e3a00001 MOV r0,#1
;;;535 }
;;;536 else
;;;537 {
;;;538 Uart_Printf(" ECC FAIL !!!\n");
;;;539 return 0;
;;;540 }
;;;541
;;;542 }
|L1.520|
000208 e8bd83f8 LDMFD sp!,{r3-r9,pc}
|L1.524|
00020c e28f0030 ADR r0,|L1.580| ;538
000210 ebfffffe BL _printf ;538
000214 e3a00000 MOV r0,#0 ;539
000218 eafffffa B |L1.520| ;539
|L1.540|
00021c 40c00000 DCD 0x40c00000 ;539
|L1.544|
000220 40200000 DCD 0x40200000 ;539
|L1.548|
000224 40c00010 DCD 0x40c00010 ;539
|L1.552|
000228 f8500100 DCD 0xf8500100 ;539
|L1.556|
00022c 00000000 DCD ||.data$0|| ;539
|L1.560|
000230 532d520a DCB "\nR-S" ;539
000234 3a434345 DCB "ECC:" ;539
000238 00000000 DCB "\0\0\0\0" ;539
|L1.572|
00023c 78343025 DCB "%04x" ;539
000240 00000020 DCB " \0\0\0" ;539
|L1.580|
000244 43434520 DCB " ECC" ;539
000248 49414620 DCB " FAI" ;539
00024c 2121204c DCB "L !!" ;539
000250 00000a21 DCB "!\n\0\0" ;539
ENDP
NF16_MarkBadBlock PROC
;;;380 static int NF16_MarkBadBlock(U32 block)
;;;381 {
000254 e92d4070 STMFD sp!,{r4-r6,lr}
000258 e1a06000 MOV r6,r0
;;;382 int i;
;;;383 U32 blockPage;
;;;384 blockPage=(block<<6);
00025c e1a05306 MOV r5,r6,LSL #6
;;;385
;;;386 se16Buf[0]=0xffff;
000260 e3e00000 MVN r0,#0
000264 e51f1040 LDR r1,|L1.556|
000268 e1c100b0 STRH r0,[r1,#0] ; se16Buf
;;;387 se16Buf[1]=0xffff;
00026c e3e00000 MVN r0,#0
000270 e51f104c LDR r1,|L1.556|
000274 e1c100b2 STRH r0,[r1,#2] ; se16Buf
;;;388 se16Buf[2]=0xffff;
000278 e3e00000 MVN r0,#0
00027c e51f1058 LDR r1,|L1.556|
000280 e1c100b4 STRH r0,[r1,#4] ; se16Buf
;;;389 se16Buf[3]=0xffff;
000284 e3e00000 MVN r0,#0
000288 e51f1064 LDR r1,|L1.556|
00028c e1c100b6 STRH r0,[r1,#6] ; se16Buf
;;;390 se16Buf[5]=0x4444; // Bad blcok mark=0x4444
000290 e59f0160 LDR r0,|L1.1016|
000294 e51f1070 LDR r1,|L1.556|
000298 e1c100ba STRH r0,[r1,#0xa] ; se16Buf
;;;391
;;;392 // NF_CLRRnB();
;;;393 NF_nFCE_L();
00029c e51f0088 LDR r0,|L1.540|
0002a0 e5900004 LDR r0,[r0,#4]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -