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

📄 k9d1g08.txt

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

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

⌨️ 快捷键说明

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