📄 nand.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\nand.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
NF16_CheckId PROC
;;;275 static U8 NF16_CheckId(void)
;;;276 {
000000 e92d4010 STMFD sp!,{r4,lr}
;;;277 int i;
;;;278 U8 id1, id2,id3,id4;
;;;279
;;;280 NF_nFCE_L();
000004 e59fe210 LDR lr,|L1.540|
000008 e59ee004 LDR lr,[lr,#4]
00000c e3cee080 BIC lr,lr,#0x80
000010 e59f4204 LDR r4,|L1.540|
000014 e584e004 STR lr,[r4,#4]
;;;281
;;;282 NF_CMD(0x90);
000018 e3a0e090 MOV lr,#0x90
00001c e584e008 STR lr,[r4,#8]
;;;283 NF_ADDR(0x0);
000020 e3a0e000 MOV lr,#0
000024 e584e00c STR lr,[r4,#0xc]
;;;284
;;;285 for(i=0;i<10;i++); //wait tWB(100ns)////?????
000028 e3a01000 MOV r1,#0
|L1.44|
00002c e351000a CMP r1,#0xa
000030 aa000001 BGE |L1.60|
000034 e2811001 ADD r1,r1,#1
000038 eafffffb B |L1.44|
;;;286
;;;287 id1=NF_RDDATA(); // Maker code(K9S1208V:0xec)
|L1.60|
00003c e59fe1d8 LDR lr,|L1.540|
000040 e59ee010 LDR lr,[lr,#0x10]
000044 e20e20ff AND r2,lr,#0xff
;;;288 id2=NF_RDDATA(); // Devide code(K9S1208V:0x76)
000048 e59fe1cc LDR lr,|L1.540|
00004c e59ee010 LDR lr,[lr,#0x10]
000050 e20e00ff AND r0,lr,#0xff
;;;289 id3=NF_RDDATA();
000054 e59fe1c0 LDR lr,|L1.540|
000058 e59ee010 LDR lr,[lr,#0x10]
00005c e20e30ff AND r3,lr,#0xff
;;;290 id4=NF_RDDATA();
000060 e59fe1b4 LDR lr,|L1.540|
000064 e59ee010 LDR lr,[lr,#0x10]
000068 e20ec0ff AND r12,lr,#0xff
;;;291
;;;292 NF_nFCE_H();
00006c e59fe1a8 LDR lr,|L1.540|
000070 e59ee004 LDR lr,[lr,#4]
000074 e38ee080 ORR lr,lr,#0x80
000078 e59f419c LDR r4,|L1.540|
00007c e584e004 STR lr,[r4,#4]
;;;293
;;;294 return id2;
;;;295 }
000080 e8bd8010 LDMFD sp!,{r4,pc}
ENDP
NF16_Reset PROC
;;;309 void NF16_Reset(void)
;;;310 {
000084 e59f1190 LDR r1,|L1.540|
;;;311 int i;
;;;312 rNFCONT|=(3<<0); //software mode
000088 e5911004 LDR r1,[r1,#4]
00008c e3811003 ORR r1,r1,#3
000090 e59f2184 LDR r2,|L1.540|
000094 e5821004 STR r1,[r2,#4]
;;;313 NF_nFCE_L();
000098 e1a01002 MOV r1,r2
00009c e5911004 LDR r1,[r1,#4]
0000a0 e3c11080 BIC r1,r1,#0x80
0000a4 e5821004 STR r1,[r2,#4]
;;;314 NF_CLRRnB();
0000a8 e1a01002 MOV r1,r2
0000ac e591102c LDR r1,[r1,#0x2c]
0000b0 e3811d80 ORR r1,r1,#0x2000
0000b4 e582102c STR r1,[r2,#0x2c]
;;;315 NF_CMD(0xFF); //reset command
0000b8 e3a010ff MOV r1,#0xff
0000bc e1c22001 BIC r2,r2,r1
0000c0 e5821008 STR r1,[r2,#8]
;;;316
;;;317 for(i=0;i<10;i++); //tWB = 100ns. //??????
0000c4 e3a00000 MOV r0,#0
|L1.200|
0000c8 e350000a CMP r0,#0xa
0000cc aa000001 BGE |L1.216|
0000d0 e2800001 ADD r0,r0,#1
0000d4 eafffffb B |L1.200|
;;;318 NF_TRANSRnB(); //wait 200~500us;
|L1.216|
0000d8 e1a00000 NOP
|L1.220|
0000dc e59f1138 LDR r1,|L1.540|
0000e0 e591102c LDR r1,[r1,#0x2c]
0000e4 e3110d80 TST r1,#0x2000
0000e8 0afffffb BEQ |L1.220|
;;;319 NF_nFCE_H();
0000ec e59f1128 LDR r1,|L1.540|
0000f0 e5911004 LDR r1,[r1,#4]
0000f4 e3811080 ORR r1,r1,#0x80
0000f8 e59f211c LDR r2,|L1.540|
0000fc e5821004 STR r1,[r2,#4]
;;;320 }
000100 e12fff1e BX lr
ENDP
NF16_Init PROC
;;;346 static void NF16_Init(void)
;;;347 {
000104 e52de004 STR lr,[sp,#-4]!
;;;348 rSROM_BW|=(1<<9);
000108 e59f0110 LDR r0,|L1.544|
00010c e5900000 LDR r0,[r0,#0]
000110 e3800f80 ORR r0,r0,#0x200
000114 e59f1104 LDR r1,|L1.544|
000118 e5810000 STR r0,[r1,#0]
;;;349
;;;350 rNFCONF=(1<<22)|(TECH<<16)|(TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<3)|(1<<2)|(0<<1)|(1<<0);
00011c e59f0100 LDR r0,|L1.548|
000120 e1c110c0 BIC r1,r1,r0,ASR #1
000124 e5810000 STR r0,[r1,#0]
;;;351 // Advanced, Not support nCE ctl, 16bit, 1KHWord, 5step
;;;352 rNFCONT=(0<<16)|(0<<15)|(0<<14)|(0<<13)|(0<<12)|(0<<11)|(1<<10)|(1<<9)|(0<<8)|(1<<7)|(0<<4)|(0<<3)|(1<<2)|(0<<0);
000128 e59f00f8 LDR r0,|L1.552|
00012c e1c11000 BIC r1,r1,r0
000130 e5810004 STR r0,[r1,#4]
;;;353 // LdStrAddr illegalAccINT LoadINT StoreINT RnBINT TransMode SpareECCLock MainECCLock
;;;354 // initECC Reg_nCE PageSie Lock-tight Lock Disable all mode
;;;355 NF16_Reset();
000134 ebfffffe BL NF16_Reset
;;;356 }000138 e49df004 LDR pc,[sp],#4
ENDP
Test_K9K2G16 PROC
;;;213 void Test_K9K2G16(void)
;;;214 {
00013c e92d4038 STMFD sp!,{r3-r5,lr}
;;;215 int i,id;
;;;216
;;;217 Uart_Printf("====== K9K2G16 Test ======\n");
000140 e28f00e4 ADR r0,|L1.556|
000144 ebfffffe BL _printf
;;;218
;;;219 while(1)
000148 e1a00000 NOP
|L1.332|
00014c e1a00000 NOP
;;;220 {
;;;221 i=0;
000150 e3a04000 MOV r4,#0
;;;222 //Uart_Printf("\n\n");
;;;223 NF16_Init();
000154 ebfffffe BL NF16_Init
;;;224 id=NF16_CheckId();
000158 ebfffffe BL NF16_CheckId
00015c e1a05000 MOV r5,r0
;;;225 if(id==0xca)
000160 e35500ca CMP r5,#0xca
000164 1a000003 BNE |L1.376|
;;;226 Uart_Printf("ID=%x(0xca)\n",id);
000168 e1a01005 MOV r1,r5
00016c e28f00d4 ADR r0,|L1.584|
000170 ebfffffe BL _printf
000174 ea000003 B |L1.392|
;;;227 else {
;;;228 Uart_Printf("Selection fail : ID=%x\n",id);
|L1.376|
000178 e1a01005 MOV r1,r5
00017c e28f00d4 ADR r0,|L1.600|
000180 ebfffffe BL _printf
;;;229 return;
;;;230 }
;;;231 while(1)
;;;232 { //display menu
;;;233 Uart_Printf("%2d:%s",i,func_k9k2g16_test[i][1]);
;;;234 i++;
;;;235 if((int)(func_k9k2g16_test[i][0])==0)
;;;236 {
;;;237 Uart_Printf("\n");
;;;238 break;
;;;239 }
;;;240 if((i%4)==0)
;;;241 Uart_Printf("\n");
;;;242 }
;;;243
;;;244 Uart_Printf("\nPress Enter key to exit : ");
;;;245 i = Uart_GetIntNum();
;;;246 if(i==-1) break; // return.
;;;247 if(i>=0 && (i<((sizeof(func_k9k2g16_test)-1)/8)) ) // select and execute...
;;;248 ( (void (*)(void)) (func_k9k2g16_test[i][0]) )();
;;;249 }
;;;250 }
|L1.388|
000184 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.392|
000188 e1a00000 NOP ;231
|L1.396|
00018c e1a00000 NOP ;231
000190 e59f00d8 LDR r0,|L1.624| ;233
000194 e0800184 ADD r0,r0,r4,LSL #3 ;233
000198 e1a01004 MOV r1,r4 ;233
00019c e5902004 LDR r2,[r0,#4] ;233
0001a0 e28f00cc ADR r0,|L1.628| ;233
0001a4 ebfffffe BL _printf ;233
0001a8 e2844001 ADD r4,r4,#1 ;234
0001ac e59f00bc LDR r0,|L1.624| ;235
0001b0 e7900184 LDR r0,[r0,r4,LSL #3] ;235
0001b4 e3500000 CMP r0,#0 ;235
0001b8 1a000002 BNE |L1.456| ;235
0001bc e28f00b8 ADR r0,|L1.636| ;237
0001c0 ebfffffe BL _printf ;237
0001c4 ea000004 B |L1.476| ;238
|L1.456|
0001c8 e3140003 TST r4,#3 ;240
0001cc 1a000001 BNE |L1.472| ;240
0001d0 e28f00a4 ADR r0,|L1.636| ;241
0001d4 ebfffffe BL _printf ;241
|L1.472|
0001d8 eaffffeb B |L1.396| ;242
|L1.476|
0001dc e28f009c ADR r0,|L1.640| ;244
0001e0 ebfffffe BL _printf ;244
0001e4 ebfffffe BL Uart_GetIntNum ;245
0001e8 e1a04000 MOV r4,r0 ;245
0001ec e3740001 CMN r4,#1 ;246
0001f0 1a000000 BNE |L1.504| ;246
0001f4 ea000007 B |L1.536| ;246
|L1.504|
0001f8 e3540000 CMP r4,#0 ;247
0001fc ba000004 BLT |L1.532| ;247
000200 e3540006 CMP r4,#6 ;247
000204 2a000002 BCS |L1.532| ;247
000208 e59f1060 LDR r1,|L1.624| ;248
00020c e7910184 LDR r0,[r1,r4,LSL #3] ;248
000210 e12fff30 BLX r0 ;248
|L1.532|
000214 eaffffcc B |L1.332| ;249
|L1.536|
000218 eaffffd9 B |L1.388|
|L1.540|
00021c 40c00000 DCD 0x40c00000
|L1.544|
000220 40c20000 DCD 0x40c20000
|L1.548|
000224 007f7775 DCD 0x007f7775
|L1.552|
000228 00000684 DCD 0x00000684
|L1.556|
00022c 3d3d3d3d DCB "===="
000230 4b203d3d DCB "== K"
000234 47324b39 DCB "9K2G"
000238 54203631 DCB "16 T"
00023c 20747365 DCB "est "
000240 3d3d3d3d DCB "===="
000244 000a3d3d DCB "==\n\0"
|L1.584|
000248 253d4449 DCB "ID=%"
00024c 78302878 DCB "x(0x"
000250 0a296163 DCB "ca)\n"
000254 00000000 DCB "\0\0\0\0"
|L1.600|
000258 656c6553 DCB "Sele"
00025c 6f697463 DCB "ctio"
000260 6166206e DCB "n fa"
000264 3a206c69 DCB "il :"
000268 3d444920 DCB " ID="
00026c 000a7825 DCB "%x\n\0"
|L1.624|
000270 00000000 DCD func_k9k2g16_test
|L1.628|
000274 3a643225 DCB "%2d:"
000278 00007325 DCB "%s\0\0"
|L1.636|
00027c 0000000a DCB "\n\0\0\0"
|L1.640|
000280 6572500a DCB "\nPre"
000284 45207373 DCB "ss E"
000288 7265746e DCB "nter"
00028c 79656b20 DCB " key"
000290 206f7420 DCB " to "
000294 74697865 DCB "exit"
000298 00203a20 DCB " : \0"
ENDP
NF_CheckId PROC
;;;251 static U8 NF_CheckId(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -