⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k9k2g16.txt

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000598  e51f1380          LDR      r1,|L1.544|
00059c  e5810018          STR      r0,[r1,#0x18]
;;;606    		  
;;;607    		  //	  while(!(rNF_STAT&(1<<10)));
;;;608    		
;;;609    #elif 0
;;;610    		__WrPage1024(bufPt);
;;;611    #endif
;;;612      
;;;613        NF_MECC_Lock();     
0005a0  e28005fb          ADD      r0,r0,#0x3ec00000
0005a4  e5900004          LDR      r0,[r0,#4]
0005a8  e3800f80          ORR      r0,r0,#0x200
0005ac  e28118a0          ADD      r1,r1,#0xa00000
0005b0  e5810004          STR      r0,[r1,#4]
;;;614    
;;;615    
;;;616    #if ECC_CHECK_x16 	
;;;617    	//ECC generation from main area ECC status.    
;;;618        // Ecc lower
;;;619        se16Buf[0]=rNFMECC0&0xff;
0005b4  e1a00001          MOV      r0,r1
0005b8  e5900038          LDR      r0,[r0,#0x38]
0005bc  e20000ff          AND      r0,r0,#0xff
0005c0  e51f139c          LDR      r1,|L1.556|
0005c4  e1c100b0          STRH     r0,[r1,#0]  ; se16Buf
;;;620        se16Buf[1]=(rNFMECC0>>8)&0xff;
0005c8  e51f03b4          LDR      r0,|L1.540|
0005cc  e5900038          LDR      r0,[r0,#0x38]
0005d0  e1a00800          MOV      r0,r0,LSL #16
0005d4  e1a00c20          MOV      r0,r0,LSR #24
0005d8  e51f13b4          LDR      r1,|L1.556|
0005dc  e1c100b2          STRH     r0,[r1,#2]  ; se16Buf
;;;621        se16Buf[2]=(rNFMECC0>>16)&0xff;
0005e0  e51f03cc          LDR      r0,|L1.540|
0005e4  e5900038          LDR      r0,[r0,#0x38]
0005e8  e1a00400          MOV      r0,r0,LSL #8
0005ec  e1a00c20          MOV      r0,r0,LSR #24
0005f0  e51f13cc          LDR      r1,|L1.556|
0005f4  e1c100b4          STRH     r0,[r1,#4]  ; se16Buf
;;;622        se16Buf[3]=(rNFMECC0>>24)&0xff;	
0005f8  e51f03e4          LDR      r0,|L1.540|
0005fc  e5900038          LDR      r0,[r0,#0x38]
000600  e1a00c20          MOV      r0,r0,LSR #24
000604  e51f13e0          LDR      r1,|L1.556|
000608  e1c100b6          STRH     r0,[r1,#6]  ; se16Buf
;;;623        // Ecc higher
;;;624        se16Buf[0] |=(((rNFMECC1)&0xff)<<8);
00060c  e51f03e8          LDR      r0,|L1.556|
000610  e1d010b0          LDRH     r1,[r0,#0]  ; se16Buf
000614  e51f0400          LDR      r0,|L1.540|
000618  e590003c          LDR      r0,[r0,#0x3c]
00061c  e1810400          ORR      r0,r1,r0,LSL #8
000620  e51f13fc          LDR      r1,|L1.556|
000624  e1c100b0          STRH     r0,[r1,#0]  ; se16Buf
;;;625        se16Buf[1] |=(((rNFMECC1>>8)&0xff)<<8);
000628  e51f0404          LDR      r0,|L1.556|
00062c  e1d000b2          LDRH     r0,[r0,#2]  ; se16Buf
000630  e51f141c          LDR      r1,|L1.540|
000634  e591103c          LDR      r1,[r1,#0x3c]
000638  e2011cff          AND      r1,r1,#0xff00
00063c  e1800001          ORR      r0,r0,r1
000640  e51f141c          LDR      r1,|L1.556|
000644  e1c100b2          STRH     r0,[r1,#2]  ; se16Buf
;;;626        se16Buf[2] |=(((rNFMECC1>>16)&0xff)<<8);
000648  e51f0424          LDR      r0,|L1.556|
00064c  e1d000b4          LDRH     r0,[r0,#4]  ; se16Buf
000650  e51f143c          LDR      r1,|L1.540|
000654  e591103c          LDR      r1,[r1,#0x3c]
000658  e3a02cff          MOV      r2,#0xff00
00065c  e0021421          AND      r1,r2,r1,LSR #8
000660  e1800001          ORR      r0,r0,r1
000664  e51f1440          LDR      r1,|L1.556|
000668  e1c100b4          STRH     r0,[r1,#4]  ; se16Buf
;;;627        se16Buf[3] |=(((rNFMECC1>>24)&0xff)<<8);	
00066c  e51f0448          LDR      r0,|L1.556|
000670  e1d000b6          LDRH     r0,[r0,#6]  ; se16Buf
000674  e51f1460          LDR      r1,|L1.540|
000678  e591103c          LDR      r1,[r1,#0x3c]
00067c  e1a01c21          MOV      r1,r1,LSR #24
000680  e1800401          ORR      r0,r0,r1,LSL #8
000684  e51f1460          LDR      r1,|L1.556|
000688  e1c100b6          STRH     r0,[r1,#6]  ; se16Buf
;;;628    
;;;629    	
;;;630        se16Buf[5] =0xffff;		// Marking good block
00068c  e3e00000          MVN      r0,#0
000690  e51f146c          LDR      r1,|L1.556|
000694  e1c100ba          STRH     r0,[r1,#0xa]  ; se16Buf
;;;631        
;;;632    /*	
;;;633    		// ECC generation from spare area ECC status.	 
;;;634    		se16Buf[?]=rNFSECC&0xff;
;;;635    		se16Buf[!]=(rNFSECC>>8)&0xff;
;;;636    		se16Buf[?]|=(((rNFSECC>>16)&0xff)<<8);
;;;637    		se16Buf[!]|=(((rNFSECC>>24)&0xff)<<8);	  
;;;638    		se16Buf[5]=0xff;		// Marking good block
;;;639    		
;;;640    		//write  spare ECC  into another spare area
;;;641    		
;;;642    */
;;;643    
;;;644    	//write ECC into spare area   
;;;645    	//write spare ECC into another spare area 	
;;;646        for(i=0;i<32;i++)
000698  e3a04000          MOV      r4,#0
                  |L1.1692|
00069c  e3540020          CMP      r4,#0x20
0006a0  aa000013          BGE      |L1.1780|
0006a4  ea000001          B        |L1.1712|
                  |L1.1704|
0006a8  e2844001          ADD      r4,r4,#1
0006ac  eafffffa          B        |L1.1692|
;;;647        {
;;;648    		NF_WRDATA(se16Buf[i]);	// Write spare array(ECC and Mark)
                  |L1.1712|
0006b0  e51f048c          LDR      r0,|L1.556|
0006b4  e0800084          ADD      r0,r0,r4,LSL #1
0006b8  e1d000b0          LDRH     r0,[r0,#0]
0006bc  e51f14a8          LDR      r1,|L1.540|
0006c0  e5810010          STR      r0,[r1,#0x10]
;;;649    		
;;;650    		if(page==0)
0006c4  e3570000          CMP      r7,#0
0006c8  1a000008          BNE      |L1.1776|
;;;651    		{
;;;652    		if(i%16==0)
0006cc  e314000f          TST      r4,#0xf
0006d0  1a000001          BNE      |L1.1756|
;;;653    		Uart_Printf("\nW-SECC:");
0006d4  e28f00f8          ADR      r0,|L1.2004|
0006d8  ebfffffe          BL       _printf
;;;654    		Uart_Printf("%04x ",se16Buf[i]);
                  |L1.1756|
0006dc  e51f04b8          LDR      r0,|L1.556|
0006e0  e0800084          ADD      r0,r0,r4,LSL #1
0006e4  e1d010b0          LDRH     r1,[r0,#0]
0006e8  e28f00f0          ADR      r0,|L1.2016|
0006ec  ebfffffe          BL       _printf
;;;655    		}
;;;656    		
;;;657        }  
                  |L1.1776|
0006f0  eaffffec          B        |L1.1704|
;;;658    
;;;659    #endif
;;;660    
;;;661        NF_CMD(0x10);   // Write 2nd command
                  |L1.1780|
0006f4  e3a00010          MOV      r0,#0x10
0006f8  e51f14e4          LDR      r1,|L1.540|
0006fc  e5810008          STR      r0,[r1,#8]
;;;662        
;;;663        for(i=0;i<10;i++);  
000700  e3a04000          MOV      r4,#0
                  |L1.1796|
000704  e354000a          CMP      r4,#0xa
000708  aa000001          BGE      |L1.1812|
00070c  e2844001          ADD      r4,r4,#1
000710  eafffffb          B        |L1.1796|
;;;664        
;;;665        NF_TRANSRnB();  //wait tPROG 200~500us;
                  |L1.1812|
000714  e1a00000          NOP      
                  |L1.1816|
000718  e51f0504          LDR      r0,|L1.540|
00071c  e590002c          LDR      r0,[r0,#0x2c]
000720  e3100d80          TST      r0,#0x2000
000724  0afffffb          BEQ      |L1.1816|
;;;666     
;;;667         
;;;668        NF_CMD(0x70);   // Read status command   
000728  e3a00070          MOV      r0,#0x70
00072c  e51f1518          LDR      r1,|L1.540|
000730  e5810008          STR      r0,[r1,#8]
;;;669        
;;;670        for(i=0;i<3;i++); 
000734  e3a04000          MOV      r4,#0
                  |L1.1848|
000738  e3540003          CMP      r4,#3
00073c  aa000001          BGE      |L1.1864|
000740  e2844001          ADD      r4,r4,#1
000744  eafffffb          B        |L1.1848|
;;;671        
;;;672        
;;;673        if (NF_RDDATA()&0x1) // Page write error
                  |L1.1864|
000748  e51f0534          LDR      r0,|L1.540|
00074c  e5900010          LDR      r0,[r0,#0x10]
000750  e3100001          TST      r0,#1
000754  0a000010          BEQ      |L1.1948|
;;;674        {	
;;;675        	NF_nFCE_H();
000758  e51f0544          LDR      r0,|L1.540|
00075c  e5900004          LDR      r0,[r0,#4]
000760  e3800080          ORR      r0,r0,#0x80
000764  e51f1550          LDR      r1,|L1.540|
000768  e5810004          STR      r0,[r1,#4]
;;;676    	Uart_Printf("[PROGRAM_ERROR:block#=%d]\n",block);
00076c  e1a01005          MOV      r1,r5
000770  e28f0070          ADR      r0,|L1.2024|
000774  ebfffffe          BL       _printf
;;;677    	NF16_MarkBadBlock(block);
000778  e1a00005          MOV      r0,r5
00077c  ebfffffe          BL       NF16_MarkBadBlock
;;;678    	   rGPCON_L =  (rGPCON_L & ~(0x3<<2))|(0x3<<2);		
000780  e59f0044          LDR      r0,|L1.1996|
000784  e5900008          LDR      r0,[r0,#8]
000788  e380000c          ORR      r0,r0,#0xc
00078c  e59f1038          LDR      r1,|L1.1996|
000790  e5810008          STR      r0,[r1,#8]
;;;679    	return 0;
000794  e3a00000          MOV      r0,#0
;;;680        }
;;;681        else 
;;;682        {
;;;683        
;;;684        	NF_nFCE_H();
;;;685        	//Uart_Printf("[PROGRAM_OK:block#=%d]\n",block);
;;;686    	   rGPCON_L =  (rGPCON_L & ~(0x3<<2))|(0x3<<2);	    	
;;;687    	return 1;
;;;688    
;;;689        }
;;;690    
;;;691    }
                  |L1.1944|
000798  e8bd83f8          LDMFD    sp!,{r3-r9,pc}
                  |L1.1948|
00079c  e51f0588          LDR      r0,|L1.540|           ;684
0007a0  e5900004          LDR      r0,[r0,#4]            ;684
0007a4  e3800080          ORR      r0,r0,#0x80           ;684
0007a8  e51f1594          LDR      r1,|L1.540|           ;684
0007ac  e5810004          STR      r0,[r1,#4]            ;684
0007b0  e28107f0          ADD      r0,r1,#0x3c00000      ;686
0007b4  e5900008          LDR      r0,[r0,#8]            ;686
0007b8  e380000c          ORR      r0,r0,#0xc            ;686
0007bc  e28117f0          ADD      r1,r1,#0x3c00000      ;686
0007c0  e5810008          STR      r0,[r1,#8]            ;686
0007c4  e3a00001          MOV      r0,#1                 ;687
0007c8  eafffff2          B        |L1.1944|             ;687
                  |L1.1996|
0007cc  44800000          DCD      0x44800000            ;687
                  |L1.2000|
0007d0  e8500400          DCD      0xe8500400            ;687
                  |L1.2004|
0007d4  532d570a          DCB      "\nW-S"               ;687
0007d8  3a434345          DCB      "ECC:"                ;687
0007dc  00000000          DCB      "\0\0\0\0"            ;687
                  |L1.2016|
0007e0  78343025          DCB      "%04x"                ;687
0007e4  00000020          DCB      " \0\0\0"             ;687
                  |L1.2024|
0007e8  4f52505b          DCB      "[PRO"                ;687
0007ec  4d415247          DCB      "GRAM"                ;687
0007f0  5252455f          DCB      "_ERR"                ;687
0007f4  623a524f          DCB      "OR:b"                ;687
0007f8  6b636f6c          DCB      "lock"                ;687
0007fc  64253d23          DCB      "#=%d"                ;687
000800  00000a5d          DCB      "]\n\0\0"             ;687
                          ENDP

                  NF16_EraseBlock PROC
;;;333    static int NF16_EraseBlock(U32 block)
;;;334    {
000804  e92d4070          STMFD    sp!,{r4-r6,lr}
000808  e1a04000          MOV      r4,r0
;;;335        U32 blockPage;
;;;336        int i;
;;;337    
;;;338    	// Port setting for SMC_WP
;;;339    	   rGPCON_L =  (rGPCON_L & ~(0x3<<2))|(0x1<<2);
00080c  e51f0048          LDR      r0,|L1.1996|
000810  e5900008          LDR      r0,[r0,#8]
000814  e3c0000c          BIC      r0,r0,#0xc
000818  e3800004          ORR      r0,r0,#4
00081c  e51f1058          LDR      r1,|L1.1996|
000820  e5810008          STR      r0,[r1,#8]
;;;340    	   rGPDAT |=(1<<1);
000824  e1a00001          MOV      r0,r1
000828  e590000c          LDR      r0,[r0,#0xc]
00082c  e3800002          ORR      r0,r0,#2
000830  e581000c          STR      r0,[r1,#0xc]
;;;341    
;;;342    
;;;343        blockPage=(block<<6);
000834  e1a05304          MOV      r5,r4,LSL #6
;;;344    
;;;345    
;;;346        NF_nFCE_L();
000838  e24107f0          SUB      r0,r1,#0x3c00000
00083c  e5900004          LDR      r0,[r0,#4]
000840  e3c00080          BIC      r0,r0,#0x80
000844  e24117f0          SUB      r1,r1,#0x3c00000
000848  e5810004          STR      r0,[r1,#4]
;;;347        
;;;348        NF_CMD(0x60);   // Erase one block 1st command
00084c  e3a00060          MOV      r0,#0x60
000850  e1c11000          BIC      r1,r1,r0
000854  e5810008          STR      r0,[r1,#8]
;;;349    
;;;350    	// Address 3-cycle
;;;351    	NF_ADDR(blockPage&0xff);	    // A[18:11]
000858  e20500ff          AND      r0,r5,#0xff
00085c  e581000c          STR      r0,[r1,#0xc]
;;;352    	NF_ADDR((blockPage>>8)&0xff);   // A[26:19]
000860  e1a00805          MOV      r0,r5,LSL #16
000864  e1a00c20          MOV      r0,r0,LSR #24
000868  e581000c          STR      r0,[r1,#0xc]
;;;353    	NF_ADDR((blockPage>>16)&0xff);	// A27
00086c  e1a00405          MOV      r0,r5,LSL #8
000870  e1a00c20          MOV      r0,r0,LSR #24
000874  e581000c          STR      r0,[r1,#0xc]
;;;354    
;;;355        NF_CLRRnB();	   
000878  e1a00001          MOV      r0,r1
00087c  e590002c          LDR      r0,[r0,#0x2c]
000880  e3800d80          ORR      r0,r0,#0x2000
000884  e581002c          STR      r0,[r1,#0x2c]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -