📄 k9k2g16.txt
字号:
;;;356 NF_CMD(0xd0); // Erase one blcok 2nd command
000888 e3a000d0 MOV r0,#0xd0
00088c e1c11000 BIC r1,r1,r0
000890 e5810008 STR r0,[r1,#8]
;;;357 for(i=0;i<10;i++); //wait tWB(100ns)//??????
000894 e3a06000 MOV r6,#0
|L1.2200|
000898 e356000a CMP r6,#0xa
00089c aa000001 BGE |L1.2216|
0008a0 e2866001 ADD r6,r6,#1
0008a4 eafffffb B |L1.2200|
;;;358 NF_TRANSRnB(); // Wait tBERS max 3ms.
|L1.2216|
0008a8 e1a00000 NOP
|L1.2220|
0008ac e51f0698 LDR r0,|L1.540|
0008b0 e590002c LDR r0,[r0,#0x2c]
0008b4 e3100d80 TST r0,#0x2000
0008b8 0afffffb BEQ |L1.2220|
;;;359 NF_CMD(0x70); // Read status command
0008bc e3a00070 MOV r0,#0x70
0008c0 e51f16ac LDR r1,|L1.540|
0008c4 e5810008 STR r0,[r1,#8]
;;;360
;;;361 // NF16_MarkBadBlock(block);
;;;362
;;;363 if (NF_RDDATA()&0x1) // Erase error
0008c8 e1c10000 BIC r0,r1,r0
0008cc e5900010 LDR r0,[r0,#0x10]
0008d0 e3100001 TST r0,#1
0008d4 0a00000f BEQ |L1.2328|
;;;364 {
;;;365 NF_nFCE_H();
0008d8 e1a00001 MOV r0,r1
0008dc e5900004 LDR r0,[r0,#4]
0008e0 e3800080 ORR r0,r0,#0x80
0008e4 e5810004 STR r0,[r1,#4]
;;;366 Uart_Printf("[ERASE_ERROR:block#=%d]\n",block);
0008e8 e1a01004 MOV r1,r4
0008ec e28f0054 ADR r0,|L1.2376|
0008f0 ebfffffe BL _printf
;;;367 NF16_MarkBadBlock(block);
0008f4 e1a00004 MOV r0,r4
0008f8 ebfffffe BL NF16_MarkBadBlock
;;;368 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x3<<2);
0008fc e51f0138 LDR r0,|L1.1996|
000900 e5900008 LDR r0,[r0,#8]
000904 e380000c ORR r0,r0,#0xc
000908 e51f1144 LDR r1,|L1.1996|
00090c e5810008 STR r0,[r1,#8]
;;;369 return 0;
000910 e3a00000 MOV r0,#0
;;;370 }
;;;371 else
;;;372 {
;;;373 NF_nFCE_H();
;;;374 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x3<<2);
;;;375 return 1;
;;;376 }
;;;377
;;;378 }
|L1.2324|
000914 e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.2328|
000918 e51f0704 LDR r0,|L1.540| ;373
00091c e5900004 LDR r0,[r0,#4] ;373
000920 e3800080 ORR r0,r0,#0x80 ;373
000924 e51f1710 LDR r1,|L1.540| ;373
000928 e5810004 STR r0,[r1,#4] ;373
00092c e28107f0 ADD r0,r1,#0x3c00000 ;374
000930 e5900008 LDR r0,[r0,#8] ;374
000934 e380000c ORR r0,r0,#0xc ;374
000938 e28117f0 ADD r1,r1,#0x3c00000 ;374
00093c e5810008 STR r0,[r1,#8] ;374
000940 e3a00001 MOV r0,#1 ;375
000944 eafffff2 B |L1.2324| ;375
|L1.2376|
000948 4152455b DCB "[ERA" ;375
00094c 455f4553 DCB "SE_E" ;375
000950 524f5252 DCB "RROR" ;375
000954 6f6c623a DCB ":blo" ;375
000958 3d236b63 DCB "ck#=" ;375
00095c 0a5d6425 DCB "%d]\n" ;375
000960 00000000 DCB "\0\0\0\0" ;375
ENDP
NF16_IsBadBlock PROC
;;;282 static int NF16_IsBadBlock(U32 block)
;;;283 {
000964 e92d4070 STMFD sp!,{r4-r6,lr}
000968 e24dd040 SUB sp,sp,#0x40
00096c e1a06000 MOV r6,r0
;;;284 int i;
;;;285 unsigned int blockPage;
;;;286
;;;287 U16 bad_block_data;
;;;288 U16 se16BadBuf[32];
;;;289 blockPage=(block<<6); // For 2'nd cycle I/O[7:5]
000970 e1a05306 MOV r5,r6,LSL #6
;;;290
;;;291 // NF_RSTECC(); // Reset ECC
;;;292 NF_CLRRnB();
000974 e51f0760 LDR r0,|L1.540|
000978 e590002c LDR r0,[r0,#0x2c]
00097c e3800d80 ORR r0,r0,#0x2000
000980 e51f176c LDR r1,|L1.540|
000984 e581002c STR r0,[r1,#0x2c]
;;;293 NF_nFCE_L();
000988 e1a00001 MOV r0,r1
00098c e5900004 LDR r0,[r0,#4]
000990 e3c00080 BIC r0,r0,#0x80
000994 e5810004 STR r0,[r1,#4]
;;;294 NF_CMD(0x00); //read command
000998 e3a00000 MOV r0,#0
00099c e1c11000 BIC r1,r1,r0
0009a0 e5810008 STR r0,[r1,#8]
;;;295
;;;296 NF_ADDR((0)&0xff); // 2058 = 0x080A
0009a4 e3a00000 MOV r0,#0
0009a8 e1c11000 BIC r1,r1,r0
0009ac e581000c STR r0,[r1,#0xc]
;;;297 NF_ADDR(((0)>>8)&0xff); // A[10:8]
0009b0 e3a00000 MOV r0,#0
0009b4 e1c11000 BIC r1,r1,r0
0009b8 e581000c STR r0,[r1,#0xc]
;;;298 NF_ADDR((blockPage)&0xff); // A[11;18]
0009bc e20500ff AND r0,r5,#0xff
0009c0 e581000c STR r0,[r1,#0xc]
;;;299 NF_ADDR((blockPage>>8)&0xff); // A[26:19]
0009c4 e1a00805 MOV r0,r5,LSL #16
0009c8 e1a00c20 MOV r0,r0,LSR #24
0009cc e581000c STR r0,[r1,#0xc]
;;;300 NF_ADDR((blockPage>>16)&0xff); // A27
0009d0 e1a00405 MOV r0,r5,LSL #8
0009d4 e1a00c20 MOV r0,r0,LSR #24
0009d8 e581000c STR r0,[r1,#0xc]
;;;301
;;;302 NF_CMD(0x30); // 2'nd command
0009dc e3a00030 MOV r0,#0x30
0009e0 e1c11000 BIC r1,r1,r0
0009e4 e5810008 STR r0,[r1,#8]
;;;303
;;;304 for(i=0;i<10;i++); // wait tWB(100ns) //?????
0009e8 e3a04000 MOV r4,#0
|L1.2540|
0009ec e354000a CMP r4,#0xa
0009f0 aa000001 BGE |L1.2556|
0009f4 e2844001 ADD r4,r4,#1
0009f8 eafffffb B |L1.2540|
;;;305 NF_TRANSRnB(); // Wait tR(max 12us)
|L1.2556|
0009fc e1a00000 NOP
|L1.2560|
000a00 e51f07ec LDR r0,|L1.540|
000a04 e590002c LDR r0,[r0,#0x2c]
000a08 e3100d80 TST r0,#0x2000
000a0c 0afffffb BEQ |L1.2560|
;;;306
;;;307
;;;308 // bad_block_data=NF_RDDATA();
;;;309 // Uart_Printf("\nB%xh:",block);
;;;310
;;;311 for(i=0;i<1024;i++)
000a10 e3a04000 MOV r4,#0
|L1.2580|
000a14 e3540e40 CMP r4,#0x400
000a18 aa000005 BGE |L1.2612|
000a1c ea000001 B |L1.2600|
|L1.2592|
000a20 e2844001 ADD r4,r4,#1
000a24 eafffffa B |L1.2580|
;;;312 NF_RDDATA();
|L1.2600|
000a28 e51f0814 LDR r0,|L1.540|
000a2c e5900010 LDR r0,[r0,#0x10]
000a30 eafffffa B |L1.2592|
;;;313
;;;314 for(i=0;i<32;i++)
|L1.2612|
000a34 e3a04000 MOV r4,#0
|L1.2616|
000a38 e3540020 CMP r4,#0x20
000a3c aa000007 BGE |L1.2656|
000a40 ea000001 B |L1.2636|
|L1.2628|
000a44 e2844001 ADD r4,r4,#1
000a48 eafffffa B |L1.2616|
;;;315 {
;;;316 se16BadBuf[i] = NF_RDDATA();
|L1.2636|
000a4c e51f0838 LDR r0,|L1.540|
000a50 e5900010 LDR r0,[r0,#0x10]
000a54 e08d1084 ADD r1,sp,r4,LSL #1
000a58 e1c100b0 STRH r0,[r1,#0]
;;;317 // Uart_Printf("%x,",se16BadBuf[i]);
;;;318 }
000a5c eafffff8 B |L1.2628|
;;;319
;;;320 NF_nFCE_H();
|L1.2656|
000a60 e51f084c LDR r0,|L1.540|
000a64 e5900004 LDR r0,[r0,#4]
000a68 e3800080 ORR r0,r0,#0x80
000a6c e51f1858 LDR r1,|L1.540|
000a70 e5810004 STR r0,[r1,#4]
;;;321
;;;322 if(se16BadBuf[5]!=0xffff)
000a74 e1dd00ba LDRH r0,[sp,#0xa]
000a78 e240ccff SUB r12,r0,#0xff00
000a7c e25cc0ff SUBS r12,r12,#0xff
000a80 0a000006 BEQ |L1.2720|
;;;323 {
;;;324 Uart_Printf("\n[block %d has been marked as a bad block(%x)]",block,se16BadBuf[5]);
000a84 e1dd20ba LDRH r2,[sp,#0xa]
000a88 e1a01006 MOV r1,r6
000a8c e28f0014 ADR r0,|L1.2728|
000a90 ebfffffe BL _printf
;;;325 return 1;
000a94 e3a00001 MOV r0,#1
|L1.2712|
000a98 e28dd040 ADD sp,sp,#0x40
;;;326 }
;;;327 else
;;;328 {
;;;329 return 0;
;;;330 }
;;;331 }
000a9c e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.2720|
000aa0 e3a00000 MOV r0,#0 ;329
000aa4 eafffffb B |L1.2712| ;329
|L1.2728|
000aa8 6c625b0a DCB "\n[bl" ;329
000aac 206b636f DCB "ock " ;329
000ab0 68206425 DCB "%d h" ;329
000ab4 62207361 DCB "as b" ;329
000ab8 206e6565 DCB "een " ;329
000abc 6b72616d DCB "mark" ;329
000ac0 61206465 DCB "ed a" ;329
000ac4 20612073 DCB "s a " ;329
000ac8 20646162 DCB "bad " ;329
000acc 636f6c62 DCB "bloc" ;329
000ad0 7825286b DCB "k(%x" ;329
000ad4 00005d29 DCB ")]\0\0" ;329
ENDP
Input_x16_TargetBlock PROC
;;;269 static void Input_x16_TargetBlock(void)
;;;270 {
000ad8 e92d4008 STMFD sp!,{r3,lr}
;;;271 Uart_Printf("\nAvailable target block number: 0~2047\n");
000adc e28f002c ADR r0,|L1.2832|
000ae0 ebfffffe BL _printf
;;;272 Uart_Printf("Input target start block number:");
000ae4 e28f004c ADR r0,|L1.2872|
000ae8 ebfffffe BL _printf
;;;273 targetBlock=Uart_GetIntNum(); // Block number(0~2047)
000aec ebfffffe BL Uart_GetIntNum
000af0 e59f1064 LDR r1,|L1.2908|
000af4 e5810000 STR r0,[r1,#0] ; targetBlock
;;;274 // if(targetSize==0)
;;;275 {
;;;276 // Uart_Printf("1,048,576 = 0x100000, 31,457,280 = 0x1e00000 \n");
;;;277 Uart_Printf("Input program file size(bytes): ");
000af8 e28f0060 ADR r0,|L1.2912|
000afc ebfffffe BL _printf
;;;278 targetSize=Uart_GetIntNum(); // Total byte size
000b00 ebfffffe BL Uart_GetIntNum
000b04 e59f1078 LDR r1,|L1.2948|
000b08 e5810000 STR r0,[r1,#0] ; targetSize
;;;279 }
;;;280 }
000b0c e8bd8008 LDMFD sp!,{r3,pc}
|L1.2832|
000b10 6176410a DCB "\nAva"
000b14 62616c69 DCB "ilab"
000b18 7420656c DCB "le t"
000b1c 65677261 DCB "arge"
000b20 6c622074 DCB "t bl"
000b24 206b636f DCB "ock "
000b28 626d756e DCB "numb"
000b2c 203a7265 DCB "er: "
000b30 30327e30 DCB "0~20"
000b34 000a3734 DCB "47\n\0"
|L1.2872|
000b38 75706e49 DCB "Inpu"
000b3c 61742074 DCB "t ta"
000b40 74656772 DCB "rget"
000b44 61747320 DCB " sta"
000b48 62207472 DCB "rt b"
000b4c 6b636f6c DCB "lock"
000b50 6d756e20 DCB " num"
000b54 3a726562 DCB "ber:"
000b58 00000000 DCB "\0\0\0\0"
|L1.2908|
000b5c 00000008 DCD ||.bss$2|| + 8
|L1.2912|
000b60 75706e49 DCB "Inpu"
000b64 72702074 DCB "t pr"
000b68 6172676f DCB "ogra"
000b6c 6966206d DCB "m fi"
000b70 7320656c DCB "le s"
000b74 28657a69 DCB "ize("
000b78 65747962 DCB "byte"
000b7c 203a2973 DCB "s): "
000b80 00000000 DCB "\0\0\0\0"
|L1.2948|
000b84 0000000c DCD ||.bss$2|| + 12
ENDP
K9k2g16_Program PROC
;;;68 void K9k2g16_Program(void)
;;;69 {
000b88 e92d41f0 STMFD sp!,{r4-r8,lr}
;;;70
;;;71 int i,j;
;;;72 int programError=0;
000b8c e3a07000 MOV r7,#0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -