📄 k9f1g08.txt
字号:
000854 00000000 DCB "\0\0\0\0"
|L1.2136|
000858 7834250a DCB "\n%4x"
00085c 0000203a DCB ": \0\0"
|L1.2144|
000860 78323025 DCB "%02x"
000864 00000020 DCB " \0\0\0"
|L1.2152|
000868 72617053 DCB "Spar"
00086c 00003a65 DCB "e:\0\0"
ENDP
NF1G08_MarkBadBlock PROC
;;;671 static int NF1G08_MarkBadBlock(U32 block)
;;;672 {
000870 e92d4070 STMFD sp!,{r4-r6,lr}
000874 e1a05000 MOV r5,r0
;;;673 int i;
;;;674 U32 blockPage=(block<<6);
000878 e1a06305 MOV r6,r5,LSL #6
;;;675
;;;676 se8Buf[0]=0x44;
00087c e3a00044 MOV r0,#0x44
000880 e59f11a0 LDR r1,|L1.2600|
000884 e5c10000 STRB r0,[r1,#0] ; se8Buf
;;;677 se8Buf[1]=0xff;
000888 e3a000ff MOV r0,#0xff
00088c e59f1194 LDR r1,|L1.2600|
000890 e5c10001 STRB r0,[r1,#1] ; se8Buf
;;;678 se8Buf[2]=0xff;
000894 e3a000ff MOV r0,#0xff
000898 e59f1188 LDR r1,|L1.2600|
00089c e5c10002 STRB r0,[r1,#2] ; se8Buf
;;;679 se8Buf[5]=0xff; // Bad blcok mark=44
0008a0 e3a000ff MOV r0,#0xff
0008a4 e59f117c LDR r1,|L1.2600|
0008a8 e5c10005 STRB r0,[r1,#5] ; se8Buf
;;;680
;;;681 NF_nFCE_L();
0008ac e3a0044e MOV r0,#0x4e000000
0008b0 e5900004 LDR r0,[r0,#4]
0008b4 e3c00002 BIC r0,r0,#2
0008b8 e3a0144e MOV r1,#0x4e000000
0008bc e5810004 STR r0,[r1,#4]
;;;682 NF_CMD(0x80); // Write 1st command
0008c0 e3a00080 MOV r0,#0x80
0008c4 e3a0144e MOV r1,#0x4e000000
0008c8 e5810008 STR r0,[r1,#8]
;;;683
;;;684 NF_ADDR((1024+0)&0xff); // 2060 = 0x080c
0008cc e3a00000 MOV r0,#0
0008d0 e3a0144e MOV r1,#0x4e000000
0008d4 e581000c STR r0,[r1,#0xc]
;;;685 NF_ADDR(((1024+0)>>8)&0xff); // A[10:8]
0008d8 e3a00004 MOV r0,#4
0008dc e3a0144e MOV r1,#0x4e000000
0008e0 e581000c STR r0,[r1,#0xc]
;;;686 NF_ADDR((blockPage)&0xff); // A[11;18]
0008e4 e20600ff AND r0,r6,#0xff
0008e8 e3a0144e MOV r1,#0x4e000000
0008ec e581000c STR r0,[r1,#0xc]
;;;687 NF_ADDR((blockPage>>8)&0xff); // A[26:19]
0008f0 e1a00806 MOV r0,r6,LSL #16
0008f4 e1a00c20 MOV r0,r0,LSR #24
0008f8 e3a0144e MOV r1,#0x4e000000
0008fc e581000c STR r0,[r1,#0xc]
;;;688
;;;689
;;;690 NF_WRDATA(se8Buf[0]); // Write Bad block information
000900 e59f0120 LDR r0,|L1.2600|
000904 e5d00000 LDRB r0,[r0,#0] ; se8Buf
000908 e3a0144e MOV r1,#0x4e000000
00090c e5810010 STR r0,[r1,#0x10]
;;;691
;;;692 NF_CLEAR_RB();
000910 e3a0044e MOV r0,#0x4e000000
000914 e5900020 LDR r0,[r0,#0x20]
000918 e3800004 ORR r0,r0,#4
00091c e3a0144e MOV r1,#0x4e000000
000920 e5810020 STR r0,[r1,#0x20]
;;;693 NF_CMD(0x10); // Write 2nd command
000924 e3a00010 MOV r0,#0x10
000928 e3a0144e MOV r1,#0x4e000000
00092c e5810008 STR r0,[r1,#8]
;;;694 NF_DETECT_RB();
000930 e1a00000 NOP
|L1.2356|
000934 e3a0044e MOV r0,#0x4e000000
000938 e5900020 LDR r0,[r0,#0x20]
00093c e3100004 TST r0,#4
000940 0afffffb BEQ |L1.2356|
;;;695
;;;696 NF_CMD(0x70);
000944 e3a00070 MOV r0,#0x70
000948 e3a0144e MOV r1,#0x4e000000
00094c e5810008 STR r0,[r1,#8]
;;;697
;;;698 for(i=0;i<64;i++)
000950 e3a04000 MOV r4,#0
|L1.2388|
000954 e3540040 CMP r4,#0x40
000958 aa000007 BGE |L1.2428|
00095c ea000001 B |L1.2408|
|L1.2400|
000960 e2844001 ADD r4,r4,#1
000964 eafffffa B |L1.2388|
;;;699 {
;;;700 NF_WRDATA(se8Buf[i]); // Write spare array
|L1.2408|
000968 e59f00b8 LDR r0,|L1.2600|
00096c e7d00004 LDRB r0,[r0,r4]
000970 e3a0144e MOV r1,#0x4e000000
000974 e5810010 STR r0,[r1,#0x10]
;;;701 }
000978 eafffff8 B |L1.2400|
;;;702
;;;703 NF_CLEAR_RB();
|L1.2428|
00097c e3a0044e MOV r0,#0x4e000000
000980 e5900020 LDR r0,[r0,#0x20]
000984 e3800004 ORR r0,r0,#4
000988 e3a0144e MOV r1,#0x4e000000
00098c e5810020 STR r0,[r1,#0x20]
;;;704 NF_CMD(0x10); // Write 2nd command
000990 e3a00010 MOV r0,#0x10
000994 e3a0144e MOV r1,#0x4e000000
000998 e5810008 STR r0,[r1,#8]
;;;705 NF_DETECT_RB();
00099c e1a00000 NOP
|L1.2464|
0009a0 e3a0044e MOV r0,#0x4e000000
0009a4 e5900020 LDR r0,[r0,#0x20]
0009a8 e3100004 TST r0,#4
0009ac 0afffffb BEQ |L1.2464|
;;;706
;;;707 NF_CMD(0x70);
0009b0 e3a00070 MOV r0,#0x70
0009b4 e3a0144e MOV r1,#0x4e000000
0009b8 e5810008 STR r0,[r1,#8]
;;;708
;;;709 for(i=0;i<3;i++); //twhr=60ns////??????
0009bc e3a04000 MOV r4,#0
|L1.2496|
0009c0 e3540003 CMP r4,#3
0009c4 aa000001 BGE |L1.2512|
0009c8 e2844001 ADD r4,r4,#1
0009cc eafffffb B |L1.2496|
;;;710
;;;711 if (NF_RDDATA()&0x1) // Spare arrray write error
|L1.2512|
0009d0 e3a0044e MOV r0,#0x4e000000
0009d4 e5900010 LDR r0,[r0,#0x10]
0009d8 e3100001 TST r0,#1
0009dc 0a000007 BEQ |L1.2560|
;;;712 {
;;;713 NF_nFCE_H();
0009e0 e3a0044e MOV r0,#0x4e000000
0009e4 e5900004 LDR r0,[r0,#4]
0009e8 e3800002 ORR r0,r0,#2
0009ec e3a0144e MOV r1,#0x4e000000
0009f0 e5810004 STR r0,[r1,#4]
;;;714 Uart_Printf("[Program error is occurred but ignored]\n");
0009f4 e28f0030 ADR r0,|L1.2604|
0009f8 ebfffffe BL Uart_Printf
0009fc ea000004 B |L1.2580|
;;;715 }
;;;716 else
;;;717 {
;;;718 NF_nFCE_H();
|L1.2560|
000a00 e3a0044e MOV r0,#0x4e000000
000a04 e5900004 LDR r0,[r0,#4]
000a08 e3800002 ORR r0,r0,#2
000a0c e3a0144e MOV r1,#0x4e000000
000a10 e5810004 STR r0,[r1,#4]
;;;719 }
;;;720
;;;721 Uart_Printf("[block #%d is marked as a bad block]\n",block);
|L1.2580|
000a14 e1a01005 MOV r1,r5
000a18 e28f0038 ADR r0,|L1.2648|
000a1c ebfffffe BL Uart_Printf
;;;722 return OK;
000a20 e3a00001 MOV r0,#1
;;;723 }
000a24 e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.2600|
000a28 00000000 DCD ||.data$0||
|L1.2604|
000a2c 6f72505b DCB "[Pro"
000a30 6d617267 DCB "gram"
000a34 72726520 DCB " err"
000a38 6920726f DCB "or i"
000a3c 636f2073 DCB "s oc"
000a40 72727563 DCB "curr"
000a44 62206465 DCB "ed b"
000a48 69207475 DCB "ut i"
000a4c 726f6e67 DCB "gnor"
000a50 0a5d6465 DCB "ed]\n"
000a54 00000000 DCB "\0\0\0\0"
|L1.2648|
000a58 6f6c625b DCB "[blo"
000a5c 23206b63 DCB "ck #"
000a60 69206425 DCB "%d i"
000a64 616d2073 DCB "s ma"
000a68 64656b72 DCB "rked"
000a6c 20736120 DCB " as "
000a70 61622061 DCB "a ba"
000a74 6c622064 DCB "d bl"
000a78 5d6b636f DCB "ock]"
000a7c 0000000a DCB "\n\0\0\0"
ENDP
NF1G08_WritePage PROC
;;;822 static int NF1G08_WritePage(U32 block,U32 page,U8 *buffer)
;;;823 {
000a80 e92d47f0 STMFD sp!,{r4-r10,lr}
000a84 e1a06000 MOV r6,r0
000a88 e1a09001 MOV r9,r1
000a8c e1a08002 MOV r8,r2
;;;824 int i;
;;;825 U32 blockPage, Mecc, Secc;
;;;826 U8 *bufPt=buffer;
000a90 e1a0a008 MOV r10,r8
;;;827
;;;828 NFConDone_1G08=0;
000a94 e3a00000 MOV r0,#0
000a98 e51f18a0 LDR r1,|L1.512|
000a9c e5810000 STR r0,[r1,#0] ; NFConDone_1G08
;;;829 rNFCONT|=(1<<9);
000aa0 e3a0044e MOV r0,#0x4e000000
000aa4 e5900004 LDR r0,[r0,#4]
000aa8 e3800f80 ORR r0,r0,#0x200
000aac e3a0144e MOV r1,#0x4e000000
000ab0 e5810004 STR r0,[r1,#4]
;;;830 rNFCONT|=(1<<10);
000ab4 e3a0044e MOV r0,#0x4e000000
000ab8 e5900004 LDR r0,[r0,#4]
000abc e3800e40 ORR r0,r0,#0x400
000ac0 e3a0144e MOV r1,#0x4e000000
000ac4 e5810004 STR r0,[r1,#4]
;;;831 pISR_NFCON= (unsigned)NFCon_Int_1G08;
000ac8 e51f0738 LDR r0,|L1.920|
000acc e51f1738 LDR r1,|L1.924|
000ad0 e5810f80 STR r0,[r1,#0xf80]
;;;832 rSRCPND=BIT_NFCON;
000ad4 e3a00740 MOV r0,#0x1000000
000ad8 e3a0144a MOV r1,#0x4a000000
000adc e5810000 STR r0,[r1,#0]
;;;833 rINTMSK=~(BIT_NFCON);
000ae0 e3e00740 MVN r0,#0x1000000
000ae4 e3a0144a MOV r1,#0x4a000000
000ae8 e5810008 STR r0,[r1,#8]
;;;834
;;;835 NF_RSTECC(); // Initialize ECC
000aec e3a0044e MOV r0,#0x4e000000
000af0 e5900004 LDR r0,[r0,#4]
000af4 e3800010 ORR r0,r0,#0x10
000af8 e3a0144e MOV r1,#0x4e000000
000afc e5810004 STR r0,[r1,#4]
;;;836 NF_MECC_UnLock();
000b00 e3a0044e MOV r0,#0x4e000000
000b04 e5900004 LDR r0,[r0,#4]
000b08 e3c00020 BIC r0,r0,#0x20
000b0c e3a0144e MOV r1,#0x4e000000
000b10 e5810004 STR r0,[r1,#4]
;;;837 blockPage=(block<<6)+page;
000b14 e0897306 ADD r7,r9,r6,LSL #6
;;;838
;;;839 NF_nFCE_L();
000b18 e3a0044e MOV r0,#0x4e000000
000b1c e5900004 LDR r0,[r0,#4]
000b20 e3c00002 BIC r0,r0,#2
000b24 e3a0144e MOV r1,#0x4e000000
000b28 e5810004 STR r0,[r1,#4]
;;;840 NF_CMD(0x80); // Write 1st command
000b2c e3a00080 MOV r0,#0x80
000b30 e3a0144e MOV r1,#0x4e000000
000b34 e5810008 STR r0,[r1,#8]
;;;841 NF_ADDR(0); // Column (A[7:0]) = 0
000b38 e3a00000 MOV r0,#0
000b3c e3a0144e MOV r1,#0x4e000000
000b40 e581000c STR r0,[r1,#0xc]
;;;842 NF_ADDR(0); // A[11:8]
000b44 e3a00000 MOV r0,#0
000b48 e3a0144e MOV r1,#0x4e000000
000b4c e581000c STR r0,[r1,#0xc]
;;;843 NF_ADDR((blockPage)&0xff); // A[19:12]
000b50 e20700ff AND r0,r7,#0xff
000b54 e3a0144e MOV r1,#0x4e000000
000b58 e581000c STR r0,[r1,#0xc]
;;;844 NF_ADDR((blockPage>>8)&0xff); // A[27:20]
000b5c e1a00807 MOV r0,r7,LSL #16
000b60 e1a00c20 MOV r0,r0,LSR #24
000b64 e3a0144e MOV r1,#0x4e000000
000b68 e581000c STR r0,[r1,#0xc]
;;;845
;;;846
;;;847 #if TRANS_MODE==C_LANG
;;;848
;;;849 for(i=0;i<2048;i++) {
;;;850 NF_WRDATA8(*bufPt++); // Write one page to NFM from buffer
;;;851 }
;;;852 #elif TRANS_MODE==DMA
;;;853
;;;854 // Memory to Nand dma setting
;;;855 rSRCPND=BIT_DMA0; // Init DMA src pending.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -