📄 nand.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\nand.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
PrintSubMessage PROC
;;;555 void PrintSubMessage(void)
;;;556 {
|L1.0|
000000 e92d4010 STMFD sp!,{r4,lr}
;;;557 int i;
;;;558
;;;559 i=0;
000004 e3a04000 MOV r4,#0
;;;560 Uart_Printf("\n\n");
000008 e28f0058 ADR r0,|L1.104|
00000c ebfffffe BL Uart_Printf
;;;561 while(1)
000010 e1a00000 NOP
|L1.20|
000014 e1a00000 NOP
;;;562 { //display menu
;;;563 Uart_Printf("%2d:%s",i,n8_func[i][1]);
000018 e59f004c LDR r0,|L1.108|
00001c e0800184 ADD r0,r0,r4,LSL #3
000020 e1a01004 MOV r1,r4
000024 e5902004 LDR r2,[r0,#4]
000028 e28f0040 ADR r0,|L1.112|
00002c ebfffffe BL Uart_Printf
;;;564 i++;
000030 e2844001 ADD r4,r4,#1
;;;565 if((int)(n8_func[i][0])==0)
000034 e59f0030 LDR r0,|L1.108|
000038 e7900184 LDR r0,[r0,r4,LSL #3]
00003c e3500000 CMP r0,#0
000040 1a000002 BNE |L1.80|
;;;566 {
;;;567 Uart_Printf("\n");
000044 e28f002c ADR r0,|L1.120|
000048 ebfffffe BL Uart_Printf
;;;568 break;
00004c ea000004 B |L1.100|
;;;569 }
;;;570 if((i%4)==0) Uart_Printf("\n");
|L1.80|
000050 e3140003 TST r4,#3
000054 1a000001 BNE |L1.96|
000058 e28f0018 ADR r0,|L1.120|
00005c ebfffffe BL Uart_Printf
;;;571 }
|L1.96|
000060 eaffffeb B |L1.20|
;;;572 }
|L1.100|
000064 e8bd8010 LDMFD sp!,{r4,pc}
|L1.104|
000068 00000a0a DCB "\n\n\0\0"
|L1.108|
00006c 00000000 DCD n8_func
|L1.112|
000070 3a643225 DCB "%2d:"
000074 00007325 DCB "%s\0\0"
|L1.120|
000078 0000000a DCB "\n\0\0\0"
ENDP
NF8_Init PROC
;;;984 static void NF8_Init(void)
;;;985 {
00007c e59f0074 LDR r0,|L1.248|
;;;986 // for S3C2442
;;;987
;;;988 rNFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0);
000080 e3a0144e MOV r1,#0x4e000000
000084 e5810000 STR r0,[r1,#0]
;;;989 // TACLS [14:12] CLE&ALE duration = HCLK*TACLS.
;;;990 // TWRPH0 [10:8] TWRPH0 duration = HCLK*(TWRPH0+1)
;;;991 // TWRPH1 [6:4] TWRPH1 duration = HCLK*(TWRPH1+1)
;;;992 // AdvFlash(R) [3] Advanced NAND, 0:256/512, 1:1024/2048
;;;993 // PageSize(R) [2] NAND memory page size
;;;994 // when [3]==0, 0:256, 1:512 bytes/page.
;;;995 // when [3]==1, 0:1024, 1:2048 bytes/page.
;;;996 // AddrCycle(R) [1] NAND flash addr size
;;;997 // when [3]==0, 0:3-addr, 1:4-addr.
;;;998 // when [3]==1, 0:4-addr, 1:5-addr.
;;;999 // BusWidth(R/W) [0] NAND bus width. 0:8-bit, 1:16-bit.
;;;1000
;;;1001 rNFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
000088 e3a00073 MOV r0,#0x73
00008c e3a0144e MOV r1,#0x4e000000
000090 e5810004 STR r0,[r1,#4]
;;;1002 // Lock-tight [13] 0:Disable lock, 1:Enable lock.
;;;1003 // Soft Lock [12] 0:Disable lock, 1:Enable lock.
;;;1004 // EnablillegalAcINT[10] Illegal access interupt control. 0:Disable, 1:Enable
;;;1005 // EnbRnBINT [9] RnB interrupt. 0:Disable, 1:Enable
;;;1006 // RnB_TrandMode[8] RnB transition detection config. 0:Low to High, 1:High to Low
;;;1007 // SpareECCLock [6] 0:Unlock, 1:Lock
;;;1008 // MainECCLock [5] 0:Unlock, 1:Lock
;;;1009 // InitECC(W) [4] 1:Init ECC decoder/encoder.
;;;1010 // Reg_nCE [1] 0:nFCE=0, 1:nFCE=1.
;;;1011 // NANDC Enable [0] operating mode. 0:Disable, 1:Enable.
;;;1012
;;;1013 // rNFSTAT = 0;
;;;1014
;;;1015 // Nand_Reset();
;;;1016 }
000094 e1a0f00e MOV pc,lr
ENDP
Test_K9S1208 PROC
;;;167 void Test_K9S1208(void)
;;;168 {
000098 e92d4010 STMFD sp!,{r4,lr}
;;;169 int i;
;;;170 U8 ch;
;;;171
;;;172 Uart_Printf("\nK9S1208 Nand flash test start.\n");
00009c e28f0058 ADR r0,|L1.252|
0000a0 ebfffffe BL Uart_Printf
;;;173
;;;174 NF8_Init();
0000a4 ebfffffe BL NF8_Init
;;;175
;;;176 while(1) {
0000a8 e1a00000 NOP
|L1.172|
0000ac e1a00000 NOP
;;;177 PrintSubMessage();
0000b0 ebfffffe BL PrintSubMessage
;;;178 Uart_Printf("\nSelect(-1 to exit): ");
0000b4 e28f0064 ADR r0,|L1.288|
0000b8 ebfffffe BL Uart_Printf
;;;179 i = Uart_GetIntNum();
0000bc ebfffffe BL Uart_GetIntNum
0000c0 e1a04000 MOV r4,r0
;;;180
;;;181 if(i==-1) break;
0000c4 e3740001 CMN r4,#1
0000c8 1a000000 BNE |L1.208|
0000cc ea000008 B |L1.244|
;;;182
;;;183 if(i>=0 && (i<(sizeof(n8_func)/8)) )
|L1.208|
0000d0 e3540000 CMP r4,#0
0000d4 ba000005 BLT |L1.240|
0000d8 e354000b CMP r4,#0xb
0000dc 2a000003 BCS |L1.240|
;;;184 ( (void (*)(void)) (n8_func[i][0]) )(); // execute selected function.
0000e0 e51f107c LDR r1,|L1.108|
0000e4 e7910184 LDR r0,[r1,r4,LSL #3]
0000e8 e1a0e00f MOV lr,pc
0000ec e1a0f000 MOV pc,r0
;;;185 }
|L1.240|
0000f0 eaffffed B |L1.172|
;;;186
;;;187 }
|L1.244|
0000f4 e8bd8010 LDMFD sp!,{r4,pc}
|L1.248|
0000f8 00007770 DCD 0x00007770
|L1.252|
0000fc 53394b0a DCB "\nK9S"
000100 38303231 DCB "1208"
000104 6e614e20 DCB " Nan"
000108 6c662064 DCB "d fl"
00010c 20687361 DCB "ash "
000110 74736574 DCB "test"
000114 61747320 DCB " sta"
000118 0a2e7472 DCB "rt.\n"
00011c 00000000 DCB "\0\0\0\0"
|L1.288|
000120 6c65530a DCB "\nSel"
000124 28746365 DCB "ect("
000128 7420312d DCB "-1 t"
00012c 7865206f DCB "o ex"
000130 3a297469 DCB "it):"
000134 00000020 DCB " \0\0\0"
ENDP
Test_Nand PROC
;;;133 void Test_Nand(void)
;;;134 {
000138 e92d4038 STMFD sp!,{r3-r5,lr}
;;;135 U8 ch;
;;;136 U32 gpacon;
;;;137
;;;138 Uart_Printf("Nand test\n");
00013c e28f0070 ADR r0,|L1.436|
000140 ebfffffe BL Uart_Printf
;;;139
;;;140 gpacon = rGPACON;
000144 e3a00456 MOV r0,#0x56000000
000148 e5900000 LDR r0,[r0,#0]
00014c e1a05000 MOV r5,r0
;;;141
;;;142 rGPACON = (rGPACON &~(0x3f<<17)) | (0x3f<<17);
000150 e3a00456 MOV r0,#0x56000000
000154 e5900000 LDR r0,[r0,#0]
000158 e380087e ORR r0,r0,#0x7e0000
00015c e3a01456 MOV r1,#0x56000000
000160 e5810000 STR r0,[r1,#0]
;;;143 // GPA 22 21 20 19 18 17
;;;144 // nFCE nRSTOUT nFRE nFWE ALE CLE
;;;145
;;;146 Uart_Printf("Select Nand flash type, Normal-8bit(1)/Advanced-8bit(2) : ");
000164 e28f0054 ADR r0,|L1.448|
000168 ebfffffe BL Uart_Printf
;;;147
;;;148 ch=Uart_Getch();
00016c ebfffffe BL Uart_Getch
000170 e1a04000 MOV r4,r0
;;;149
;;;150 Uart_Printf("%c\n\n", ch);
000174 e1a01004 MOV r1,r4
000178 e28f007c ADR r0,|L1.508|
00017c ebfffffe BL Uart_Printf
;;;151
;;;152 switch(ch) {
000180 e3540031 CMP r4,#0x31
000184 0a000002 BEQ |L1.404|
000188 e3540032 CMP r4,#0x32
00018c 1a000004 BNE |L1.420|
000190 ea000001 B |L1.412|
;;;153 case '1':
;;;154 Test_K9S1208(); // in Nand.c
|L1.404|
000194 ebfffffe BL Test_K9S1208
;;;155 break;
000198 ea000002 B |L1.424|
;;;156 case '2':
;;;157 Test_K9F1G08(); // in K9K2h16.c
|L1.412|
00019c ebfffffe BL Test_K9F1G08
;;;158 break;
0001a0 ea000000 B |L1.424|
;;;159 default:
;;;160 break;
|L1.420|
0001a4 e1a00000 NOP
;;;161 }
;;;162
;;;163 rGPACON = gpacon;
|L1.424|
0001a8 e3a00456 MOV r0,#0x56000000
0001ac e5805000 STR r5,[r0,#0]
;;;164 }
0001b0 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.436|
0001b4 646e614e DCB "Nand"
0001b8 73657420 DCB " tes"
0001bc 00000a74 DCB "t\n\0\0"
|L1.448|
0001c0 656c6553 DCB "Sele"
0001c4 4e207463 DCB "ct N"
0001c8 20646e61 DCB "and "
0001cc 73616c66 DCB "flas"
0001d0 79742068 DCB "h ty"
0001d4 202c6570 DCB "pe, "
0001d8 6d726f4e DCB "Norm"
0001dc 382d6c61 DCB "al-8"
0001e0 28746962 DCB "bit("
0001e4 412f2931 DCB "1)/A"
0001e8 6e617664 DCB "dvan"
0001ec 2d646563 DCB "ced-"
0001f0 74696238 DCB "8bit"
0001f4 20293228 DCB "(2) "
0001f8 0000203a DCB ": \0\0"
|L1.508|
0001fc 0a0a6325 DCB "%c\n\n"
000200 00000000 DCB "\0\0\0\0"
ENDP
Read_Status PROC
;;;189 U8 Read_Status(void)
;;;190 {
000204 e3a0244e MOV r2,#0x4e000000
;;;191 // Read status
;;;192 U8 ch;
;;;193 int i;
;;;194
;;;195 NF_nFCE_L();
000208 e5922004 LDR r2,[r2,#4]
00020c e3c22002 BIC r2,r2,#2
000210 e3a0344e MOV r3,#0x4e000000
000214 e5832004 STR r2,[r3,#4]
;;;196
;;;197 NF_CMD(0x70);
000218 e3a02070 MOV r2,#0x70
00021c e3a0344e MOV r3,#0x4e000000
000220 e5832008 STR r2,[r3,#8]
;;;198 for(i=0; i<10; i++);
000224 e3a01000 MOV r1,#0
|L1.552|
000228 e351000a CMP r1,#0xa
00022c aa000001 BGE |L1.568|
000230 e2811001 ADD r1,r1,#1
000234 eafffffb B |L1.552|
;;;199 ch = NF_RDDATA();
|L1.568|
000238 e3a0244e MOV r2,#0x4e000000
00023c e5922010 LDR r2,[r2,#0x10]
000240 e20200ff AND r0,r2,#0xff
;;;200
;;;201 NF_nFCE_H();
000244 e3a0244e MOV r2,#0x4e000000
000248 e5922004 LDR r2,[r2,#4]
00024c e3822002 ORR r2,r2,#2
000250 e3a0344e MOV r3,#0x4e000000
000254 e5832004 STR r2,[r3,#4]
;;;202
;;;203 return ch;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -