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

📄 k9s1208.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0002b0  e5810008          STR      r0,[r1,#8]
;;;395        
;;;396        for(i=0;i<3;i++);  //twhr=60ns////??????
0002b4  e3a04000          MOV      r4,#0
                  |L1.696|
0002b8  e3540003          CMP      r4,#3
0002bc  aa000001          BGE      |L1.712|
0002c0  e2844001          ADD      r4,r4,#1
0002c4  eafffffb          B        |L1.696|
;;;397        
;;;398        if (NF_RDDATA()&0x1) // Spare arrray write error
                  |L1.712|
0002c8  e51f013c          LDR      r0,|L1.404|
0002cc  e5900010          LDR      r0,[r0,#0x10]
0002d0  e3100001          TST      r0,#1
0002d4  0a000007          BEQ      |L1.760|
;;;399        {	
;;;400        	NF_nFCE_H();
0002d8  e51f014c          LDR      r0,|L1.404|
0002dc  e5900004          LDR      r0,[r0,#4]
0002e0  e3800080          ORR      r0,r0,#0x80
0002e4  e51f1158          LDR      r1,|L1.404|
0002e8  e5810004          STR      r0,[r1,#4]
;;;401        	Uart_Printf("[Program error is occurred but ignored]\n");
0002ec  e28f0030          ADR      r0,|L1.804|
0002f0  ebfffffe          BL       _printf
0002f4  ea000004          B        |L1.780|
;;;402        }
;;;403        else 
;;;404        {
;;;405        	NF_nFCE_H();
                  |L1.760|
0002f8  e51f016c          LDR      r0,|L1.404|
0002fc  e5900004          LDR      r0,[r0,#4]
000300  e3800080          ORR      r0,r0,#0x80
000304  e51f1178          LDR      r1,|L1.404|
000308  e5810004          STR      r0,[r1,#4]
;;;406        }
;;;407    
;;;408        Uart_Printf("[block #%d is marked as a bad block]\n",block);
                  |L1.780|
00030c  e1a01006          MOV      r1,r6
000310  e28f0038          ADR      r0,|L1.848|
000314  ebfffffe          BL       _printf
;;;409        return 1;
000318  e3a00001          MOV      r0,#1
;;;410    }
00031c  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                  |L1.800|
000320  00000000          DCD      ||.data$0||
                  |L1.804|
000324  6f72505b          DCB      "[Pro"
000328  6d617267          DCB      "gram"
00032c  72726520          DCB      " err"
000330  6920726f          DCB      "or i"
000334  636f2073          DCB      "s oc"
000338  72727563          DCB      "curr"
00033c  62206465          DCB      "ed b"
000340  69207475          DCB      "ut i"
000344  726f6e67          DCB      "gnor"
000348  0a5d6465          DCB      "ed]\n"
00034c  00000000          DCB      "\0\0\0\0"
                  |L1.848|
000350  6f6c625b          DCB      "[blo"
000354  23206b63          DCB      "ck #"
000358  69206425          DCB      "%d i"
00035c  616d2073          DCB      "s ma"
000360  64656b72          DCB      "rked"
000364  20736120          DCB      " as "
000368  61622061          DCB      "a ba"
00036c  6c622064          DCB      "d bl"
000370  5d6b636f          DCB      "ock]"
000374  0000000a          DCB      "\n\0\0\0"
                          ENDP

                  NF_WritePage PROC
;;;494    static int NF_WritePage(U32 block,U32 page,U8 *buffer)
;;;495    {
000378  e92d43f8          STMFD    sp!,{r3-r9,lr}
00037c  e1a05000          MOV      r5,r0
000380  e1a08001          MOV      r8,r1
000384  e1a07002          MOV      r7,r2
;;;496        int i;
;;;497        U32 blockPage=(block<<5)+page;
000388  e0886285          ADD      r6,r8,r5,LSL #5
;;;498        U8 *bufPt=buffer;
00038c  e1a09007          MOV      r9,r7
;;;499    
;;;500    	// Port setting for SMC_WP
;;;501    	   rGPCON_L =  (rGPCON_L & ~(0x3<<2))|(0x1<<2);
000390  e59f0280          LDR      r0,|L1.1560|
000394  e5900008          LDR      r0,[r0,#8]
000398  e3c0000c          BIC      r0,r0,#0xc
00039c  e3800004          ORR      r0,r0,#4
0003a0  e59f1270          LDR      r1,|L1.1560|
0003a4  e5810008          STR      r0,[r1,#8]
;;;502    	   rGPDAT |=(1<<1);	
0003a8  e1a00001          MOV      r0,r1
0003ac  e590000c          LDR      r0,[r0,#0xc]
0003b0  e3800002          ORR      r0,r0,#2
0003b4  e581000c          STR      r0,[r1,#0xc]
;;;503    	   
;;;504        NF_RSTECC();    // Initialize ECC
0003b8  e24107f0          SUB      r0,r1,#0x3c00000
0003bc  e5900004          LDR      r0,[r0,#4]
0003c0  e3800f40          ORR      r0,r0,#0x100
0003c4  e24117f0          SUB      r1,r1,#0x3c00000
0003c8  e5810004          STR      r0,[r1,#4]
;;;505        
;;;506        NF_MECC_UnLock();
0003cc  e1a00001          MOV      r0,r1
0003d0  e5900004          LDR      r0,[r0,#4]
0003d4  e3c00f80          BIC      r0,r0,#0x200
0003d8  e5810004          STR      r0,[r1,#4]
;;;507      
;;;508        NF_CLRRnB(); 
0003dc  e1a00001          MOV      r0,r1
0003e0  e590002c          LDR      r0,[r0,#0x2c]
0003e4  e3800d80          ORR      r0,r0,#0x2000
0003e8  e581002c          STR      r0,[r1,#0x2c]
;;;509        NF_nFCE_L(); 
0003ec  e1a00001          MOV      r0,r1
0003f0  e5900004          LDR      r0,[r0,#4]
0003f4  e3c00080          BIC      r0,r0,#0x80
0003f8  e5810004          STR      r0,[r1,#4]
;;;510        
;;;511        
;;;512        NF_CMD(0x0);// for programming 'A' area
0003fc  e3a00000          MOV      r0,#0
000400  e1c11000          BIC      r1,r1,r0
000404  e5810008          STR      r0,[r1,#8]
;;;513        NF_CMD(0x80);   // Write 1st command
000408  e3a00080          MOV      r0,#0x80
00040c  e1c11000          BIC      r1,r1,r0
000410  e5810008          STR      r0,[r1,#8]
;;;514        NF_ADDR(0);			    // Column 0
000414  e3a00000          MOV      r0,#0
000418  e1c11000          BIC      r1,r1,r0
00041c  e581000c          STR      r0,[r1,#0xc]
;;;515        NF_ADDR(blockPage&0xff);	    //
000420  e20600ff          AND      r0,r6,#0xff
000424  e581000c          STR      r0,[r1,#0xc]
;;;516        NF_ADDR((blockPage>>8)&0xff);   // Block & page num.
000428  e1a00806          MOV      r0,r6,LSL #16
00042c  e1a00c20          MOV      r0,r0,LSR #24
000430  e581000c          STR      r0,[r1,#0xc]
;;;517        NF_ADDR((blockPage>>16)&0xff);  //
000434  e1a00406          MOV      r0,r6,LSL #8
000438  e1a00c20          MOV      r0,r0,LSR #24
00043c  e581000c          STR      r0,[r1,#0xc]
;;;518    
;;;519    #if 0
;;;520    			
;;;521    			//data write into main data area
;;;522    			
;;;523    			for(i=0;i<512;i++)
;;;524    			{
;;;525    			NF_WRDATA(*bufPt++);	
;;;526    			}  
;;;527    
;;;528    	
;;;529    #elif 1
;;;530    				//DMA 
;;;531    			  
;;;532    			//	  rINTMSK=~(BIT_DMA);
;;;533    			//	  rINTSUBMSK=~(BIT_SUB_DMA0);
;;;534    				  rSUBSRCPND=BIT_SUB_DMA0;	
000440  e3a00780          MOV      r0,#0x2000000
000444  e24118a0          SUB      r1,r1,#0xa00000
000448  e5810018          STR      r0,[r1,#0x18]
;;;535    			
;;;536    				  rDISRC0=(unsigned)bufPt;
00044c  e1a07009          MOV      r7,r9
000450  e28005f9          ADD      r0,r0,#0x3e400000
000454  e5809000          STR      r9,[r0,#0]
;;;537    				  rDISRCC0=(0<<1)|(0<<0); //arc=AHB,src_addr=inc
000458  e3a00000          MOV      r0,#0
00045c  e2811980          ADD      r1,r1,#0x200000
000460  e5810004          STR      r0,[r1,#4]
;;;538    				  rDIDST0=0x40c00010; //NF_WRDATA()
000464  e51f02d0          LDR      r0,|L1.412|
000468  e0011000          AND      r1,r1,r0
00046c  e5810008          STR      r0,[r1,#8]
;;;539    				  rDIDSTC0=(0<<1)|(1<<0); //dst=AHB,dst_addr=fix;
000470  e3a00001          MOV      r0,#1
000474  e1c11000          BIC      r1,r1,r0
000478  e581000c          STR      r0,[r1,#0xc]
;;;540    				  rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(0<<20)|(512);
00047c  e51f02e4          LDR      r0,|L1.416|
000480  e0011000          AND      r1,r1,r0
000484  e5810010          STR      r0,[r1,#0x10]
;;;541    				  //Handshake,AHB,interrupt,(UNIT),whole,S/W,no_autoreload,Byte,count=512;
;;;542    				  
;;;543    				  rDMASKTRIG0=(1<<1)|(1<<0);
000488  e3a00003          MOV      r0,#3
00048c  e1c11000          BIC      r1,r1,r0
000490  e5810020          STR      r0,[r1,#0x20]
;;;544    			  
;;;545    			  //   while(dmaDone==0);
;;;546    			  
;;;547    			  //   rINTSUBMSK=BIT_ALLMSK;
;;;548    			  //	rINTMSK=BIT_ALLMSK;
;;;549    			  
;;;550    				  while(!(rSUBSRCPND & BIT_SUB_DMA0));
000494  e1a00000          NOP      
                  |L1.1176|
000498  e51f0308          LDR      r0,|L1.408|
00049c  e5900018          LDR      r0,[r0,#0x18]
0004a0  e3100780          TST      r0,#0x2000000
0004a4  0afffffb          BEQ      |L1.1176|
;;;551    				  rSUBSRCPND=BIT_SUB_DMA0;
0004a8  e3a00780          MOV      r0,#0x2000000
0004ac  e51f131c          LDR      r1,|L1.408|
0004b0  e5810018          STR      r0,[r1,#0x18]
;;;552    			  
;;;553    			  //	  while(!(rNF_STAT&(1<<10)));
;;;554    			
;;;555    #elif 0
;;;556    			__WrPage512(bufPt);
;;;557    #endif
;;;558    	
;;;559        NF_MECC_Lock();     
0004b4  e28005fb          ADD      r0,r0,#0x3ec00000
0004b8  e5900004          LDR      r0,[r0,#4]
0004bc  e3800f80          ORR      r0,r0,#0x200
0004c0  e28118a0          ADD      r1,r1,#0xa00000
0004c4  e5810004          STR      r0,[r1,#4]
;;;560    
;;;561    #if ECC_CHECK 		
;;;562    	//ECC generation from main area ECC status.  
;;;563    
;;;564        seBuf[0]=rNFMECC0&0xff;
0004c8  e1a00001          MOV      r0,r1
0004cc  e5900038          LDR      r0,[r0,#0x38]
0004d0  e51f11b8          LDR      r1,|L1.800|
0004d4  e5c10000          STRB     r0,[r1,#0]  ; seBuf
;;;565        seBuf[1]=(rNFMECC0>>8)&0xff;
0004d8  e51f034c          LDR      r0,|L1.404|
0004dc  e5900038          LDR      r0,[r0,#0x38]
0004e0  e1a00800          MOV      r0,r0,LSL #16
0004e4  e1a00c20          MOV      r0,r0,LSR #24
0004e8  e51f11d0          LDR      r1,|L1.800|
0004ec  e5c10001          STRB     r0,[r1,#1]  ; seBuf
;;;566        seBuf[2]=(rNFMECC0>>16)&0xff;
0004f0  e51f0364          LDR      r0,|L1.404|
0004f4  e5900038          LDR      r0,[r0,#0x38]
0004f8  e1a00400          MOV      r0,r0,LSL #8
0004fc  e1a00c20          MOV      r0,r0,LSR #24
000500  e51f11e8          LDR      r1,|L1.800|
000504  e5c10002          STRB     r0,[r1,#2]  ; seBuf
;;;567        //seBuf[3]=(rNFMECC0>>24)&0xff;	
;;;568        seBuf[5]=0xff;		// Marking good block
000508  e3a000ff          MOV      r0,#0xff
00050c  e51f11f4          LDR      r1,|L1.800|
000510  e5c10005          STRB     r0,[r1,#5]  ; seBuf
;;;569        /*	
;;;570    		// ECC generation from spare area ECC status.	    
;;;571        seBuf[?]=rNFSECC&0xff;
;;;572        seBuf[?]=(rNFSECC>>8)&0xff;
;;;573        seBuf[5]=0xff;		// Marking good block
;;;574        
;;;575    		//write  spare ECC  into another spare area 
;;;576    */
;;;577    	//write ECC into spare area   
;;;578    	//write spare ECC into another spare area	
;;;579    		
;;;580    	for(i=0;i<16;i++)
000514  e3a04000          MOV      r4,#0
                  |L1.1304|
000518  e3540010          CMP      r4,#0x10
00051c  aa000007          BGE      |L1.1344|
000520  ea000001          B        |L1.1324|
                  |L1.1316|
000524  e2844001          ADD      r4,r4,#1
000528  eafffffa          B        |L1.1304|
;;;581    	{
;;;582    	NF_WRDATA(seBuf[i]);
                  |L1.1324|
00052c  e51f0214          LDR      r0,|L1.800|
000530  e7d00004          LDRB     r0,[r0,r4]
000534  e51f13a8          LDR      r1,|L1.404|
000538  e5810010          STR      r0,[r1,#0x10]
;;;583    	}  
00053c  eafffff8          B        |L1.1316|
;;;584    #endif
;;;585    
;;;586       
;;;587        NF_CMD(0x10);   // Write 2nd command
                  |L1.1344|
000540  e3a00010          MOV      r0,#0x10
000544  e51f13b8          LDR      r1,|L1.404|
000548  e5810008          STR      r0,[r1,#8]
;;;588        
;;;589        for(i=0;i<10;i++);  
00054c  e3a04000          MOV      r4,#0
                  |L1.1360|
000550  e354000a          CMP      r4,#0xa
000554  aa000001          BGE      |L1.1376|
000558  e2844001          ADD      r4,r4,#1
00055c  eafffffb          B        |L1.1360|
;;;590        
;;;591        NF_TRANSRnB();  //wait tPROG 200~500us;
                  |L1.1376|
000560  e1a00000          NOP      
                  |L1.1380|
000564  e51f03d8          LDR      r0,|L1.404|
000568  e590002c          LDR      r0,[r0,#0x2c]
00056c  e3100d80          TST      r0,#0x2000
000570  0afffffb          BEQ      |L1.1380|
;;;592     
;;;593         
;;;594        NF_CMD(0x70);   // Read status command   
000574  e3a00070          MOV      r0,#0x70
000578  e51f13ec          LDR      r1,|L1.404|
00057c  e5810008          STR      r0,[r1,#8]
;;;595        
;;;596        for(i=0;i<3;i++); 
000580  e3a04000          MOV      r4,#0
                  |L1.1412|
000584  e3540003          CMP      r4,#3

⌨️ 快捷键说明

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