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

📄 k9k2g16.txt

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0002a4  e3c00080          BIC      r0,r0,#0x80
0002a8  e51f1094          LDR      r1,|L1.540|
0002ac  e5810004          STR      r0,[r1,#4]
;;;394            
;;;395        NF_CMD(0x80);   // Write 1st command
0002b0  e3a00080          MOV      r0,#0x80
0002b4  e1c11000          BIC      r1,r1,r0
0002b8  e5810008          STR      r0,[r1,#8]
;;;396        
;;;397    	NF_ADDR((0)&0xff);			// 2048= 0x0800
0002bc  e3a00000          MOV      r0,#0
0002c0  e1c11000          BIC      r1,r1,r0
0002c4  e581000c          STR      r0,[r1,#0xc]
;;;398    	NF_ADDR(((0)>>8)&0xff);	// A[10:8]
0002c8  e3a00000          MOV      r0,#0
0002cc  e1c11000          BIC      r1,r1,r0
0002d0  e581000c          STR      r0,[r1,#0xc]
;;;399    	NF_ADDR((blockPage)&0xff);	// A[11;18]
0002d4  e20500ff          AND      r0,r5,#0xff
0002d8  e581000c          STR      r0,[r1,#0xc]
;;;400    	NF_ADDR((blockPage>>8)&0xff);	// A[26:19]
0002dc  e1a00805          MOV      r0,r5,LSL #16
0002e0  e1a00c20          MOV      r0,r0,LSR #24
0002e4  e581000c          STR      r0,[r1,#0xc]
;;;401    	NF_ADDR((blockPage>>16)&0xff);	// A[27]
0002e8  e1a00405          MOV      r0,r5,LSL #8
0002ec  e1a00c20          MOV      r0,r0,LSR #24
0002f0  e581000c          STR      r0,[r1,#0xc]
;;;402    	
;;;403        for(i=0;i<1024;i++)
0002f4  e3a04000          MOV      r4,#0
                  |L1.760|
0002f8  e3540e40          CMP      r4,#0x400
0002fc  aa000006          BGE      |L1.796|
000300  ea000001          B        |L1.780|
                  |L1.772|
000304  e2844001          ADD      r4,r4,#1
000308  eafffffa          B        |L1.760|
;;;404        {
;;;405    	NF_WRDATA(0xffff);		
                  |L1.780|
00030c  e59f00e8          LDR      r0,|L1.1020|
000310  e51f10fc          LDR      r1,|L1.540|
000314  e5810010          STR      r0,[r1,#0x10]
;;;406        }  	
000318  eafffff9          B        |L1.772|
;;;407    	
;;;408        for(i=0;i<32;i++)
                  |L1.796|
00031c  e3a04000          MOV      r4,#0
                  |L1.800|
000320  e3540020          CMP      r4,#0x20
000324  aa000008          BGE      |L1.844|
000328  ea000001          B        |L1.820|
                  |L1.812|
00032c  e2844001          ADD      r4,r4,#1
000330  eafffffa          B        |L1.800|
;;;409        {
;;;410    	NF_WRDATA(se16Buf[i]);	// Write spare array
                  |L1.820|
000334  e51f0110          LDR      r0,|L1.556|
000338  e0800084          ADD      r0,r0,r4,LSL #1
00033c  e1d000b0          LDRH     r0,[r0,#0]
000340  e51f112c          LDR      r1,|L1.540|
000344  e5810010          STR      r0,[r1,#0x10]
;;;411        }
000348  eafffff7          B        |L1.812|
;;;412    
;;;413        NF_CMD(0x10);   // Write 2nd command
                  |L1.844|
00034c  e3a00010          MOV      r0,#0x10
000350  e51f113c          LDR      r1,|L1.540|
000354  e5810008          STR      r0,[r1,#8]
;;;414        
;;;415        for(i=0;i<10;i++);  //tWB = 100ns. ///???????
000358  e3a04000          MOV      r4,#0
                  |L1.860|
00035c  e354000a          CMP      r4,#0xa
000360  aa000001          BGE      |L1.876|
000364  e2844001          ADD      r4,r4,#1
000368  eafffffb          B        |L1.860|
;;;416    
;;;417        NF_TRANSRnB();      // Wait tPROG(200~500us)
                  |L1.876|
00036c  e1a00000          NOP      
                  |L1.880|
000370  e51f015c          LDR      r0,|L1.540|
000374  e590002c          LDR      r0,[r0,#0x2c]
000378  e3100d80          TST      r0,#0x2000
00037c  0afffffb          BEQ      |L1.880|
;;;418      
;;;419        NF_CMD(0x70);
000380  e3a00070          MOV      r0,#0x70
000384  e51f1170          LDR      r1,|L1.540|
000388  e5810008          STR      r0,[r1,#8]
;;;420        
;;;421        for(i=0;i<3;i++);  //twhr=60ns////??????
00038c  e3a04000          MOV      r4,#0
                  |L1.912|
000390  e3540003          CMP      r4,#3
000394  aa000001          BGE      |L1.928|
000398  e2844001          ADD      r4,r4,#1
00039c  eafffffb          B        |L1.912|
;;;422        
;;;423        if (NF_RDDATA()&0x1) // Spare arrray write error
                  |L1.928|
0003a0  e51f018c          LDR      r0,|L1.540|
0003a4  e5900010          LDR      r0,[r0,#0x10]
0003a8  e3100001          TST      r0,#1
0003ac  0a000007          BEQ      |L1.976|
;;;424        {	
;;;425        	NF_nFCE_H();
0003b0  e51f019c          LDR      r0,|L1.540|
0003b4  e5900004          LDR      r0,[r0,#4]
0003b8  e3800080          ORR      r0,r0,#0x80
0003bc  e51f11a8          LDR      r1,|L1.540|
0003c0  e5810004          STR      r0,[r1,#4]
;;;426        	Uart_Printf("[Program error is occurred but ignored]\n");
0003c4  e28f0034          ADR      r0,|L1.1024|
0003c8  ebfffffe          BL       _printf
0003cc  ea000004          B        |L1.996|
;;;427        }
;;;428        else 
;;;429        {
;;;430        	NF_nFCE_H();
                  |L1.976|
0003d0  e51f01bc          LDR      r0,|L1.540|
0003d4  e5900004          LDR      r0,[r0,#4]
0003d8  e3800080          ORR      r0,r0,#0x80
0003dc  e51f11c8          LDR      r1,|L1.540|
0003e0  e5810004          STR      r0,[r1,#4]
;;;431        }
;;;432    
;;;433        Uart_Printf("[block #%d is marked as a bad block]\n",block);
                  |L1.996|
0003e4  e1a01006          MOV      r1,r6
0003e8  e28f003c          ADR      r0,|L1.1068|
0003ec  ebfffffe          BL       _printf
;;;434        return 1;
0003f0  e3a00001          MOV      r0,#1
;;;435    }
0003f4  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                  |L1.1016|
0003f8  00004444          DCD      0x00004444
                  |L1.1020|
0003fc  0000ffff          DCD      0x0000ffff
                  |L1.1024|
000400  6f72505b          DCB      "[Pro"
000404  6d617267          DCB      "gram"
000408  72726520          DCB      " err"
00040c  6920726f          DCB      "or i"
000410  636f2073          DCB      "s oc"
000414  72727563          DCB      "curr"
000418  62206465          DCB      "ed b"
00041c  69207475          DCB      "ut i"
000420  726f6e67          DCB      "gnor"
000424  0a5d6465          DCB      "ed]\n"
000428  00000000          DCB      "\0\0\0\0"
                  |L1.1068|
00042c  6f6c625b          DCB      "[blo"
000430  23206b63          DCB      "ck #"
000434  69206425          DCB      "%d i"
000438  616d2073          DCB      "s ma"
00043c  64656b72          DCB      "rked"
000440  20736120          DCB      " as "
000444  61622061          DCB      "a ba"
000448  6c622064          DCB      "d bl"
00044c  5d6b636f          DCB      "ock]"
000450  0000000a          DCB      "\n\0\0\0"
                          ENDP

                  NF16_WritePage PROC
;;;544    static int NF16_WritePage(U32 block,U32 page,U16 *buffer)
;;;545    {
000454  e92d43f8          STMFD    sp!,{r3-r9,lr}
000458  e1a05000          MOV      r5,r0
00045c  e1a07001          MOV      r7,r1
000460  e1a08002          MOV      r8,r2
;;;546        int i;
;;;547        U32 blockPage=(block<<6)+page;
000464  e0876305          ADD      r6,r7,r5,LSL #6
;;;548        U16 *bufPt=buffer;
000468  e1a09008          MOV      r9,r8
;;;549    
;;;550    	// Port setting for SMC_WP
;;;551    	   rGPCON_L =  (rGPCON_L & ~(0x3<<2))|(0x1<<2);
00046c  e59f0358          LDR      r0,|L1.1996|
000470  e5900008          LDR      r0,[r0,#8]
000474  e3c0000c          BIC      r0,r0,#0xc
000478  e3800004          ORR      r0,r0,#4
00047c  e59f1348          LDR      r1,|L1.1996|
000480  e5810008          STR      r0,[r1,#8]
;;;552    	   rGPDAT |=(1<<1);	
000484  e1a00001          MOV      r0,r1
000488  e590000c          LDR      r0,[r0,#0xc]
00048c  e3800002          ORR      r0,r0,#2
000490  e581000c          STR      r0,[r1,#0xc]
;;;553    	   
;;;554        NF_RSTECC();    // Initialize ECC
000494  e24107f0          SUB      r0,r1,#0x3c00000
000498  e5900004          LDR      r0,[r0,#4]
00049c  e3800f40          ORR      r0,r0,#0x100
0004a0  e24117f0          SUB      r1,r1,#0x3c00000
0004a4  e5810004          STR      r0,[r1,#4]
;;;555        
;;;556        NF_MECC_UnLock();
0004a8  e1a00001          MOV      r0,r1
0004ac  e5900004          LDR      r0,[r0,#4]
0004b0  e3c00f80          BIC      r0,r0,#0x200
0004b4  e5810004          STR      r0,[r1,#4]
;;;557      
;;;558        NF_CLRRnB();
0004b8  e1a00001          MOV      r0,r1
0004bc  e590002c          LDR      r0,[r0,#0x2c]
0004c0  e3800d80          ORR      r0,r0,#0x2000
0004c4  e581002c          STR      r0,[r1,#0x2c]
;;;559        NF_nFCE_L(); 
0004c8  e1a00001          MOV      r0,r1
0004cc  e5900004          LDR      r0,[r0,#4]
0004d0  e3c00080          BIC      r0,r0,#0x80
0004d4  e5810004          STR      r0,[r1,#4]
;;;560        
;;;561        NF_CMD(0x80);   // Write 1st command
0004d8  e3a00080          MOV      r0,#0x80
0004dc  e1c11000          BIC      r1,r1,r0
0004e0  e5810008          STR      r0,[r1,#8]
;;;562        for(i=0;i<10;i++);  
0004e4  e3a04000          MOV      r4,#0
                  |L1.1256|
0004e8  e354000a          CMP      r4,#0xa
0004ec  aa000001          BGE      |L1.1272|
0004f0  e2844001          ADD      r4,r4,#1
0004f4  eafffffb          B        |L1.1256|
;;;563    	
;;;564    	NF_ADDR(0); 	// Column (A[7:0]) = 0
                  |L1.1272|
0004f8  e3a00000          MOV      r0,#0
0004fc  e51f12e8          LDR      r1,|L1.540|
000500  e581000c          STR      r0,[r1,#0xc]
;;;565    	NF_ADDR(0);		// A[10:8]
000504  e3a00000          MOV      r0,#0
000508  e1c11000          BIC      r1,r1,r0
00050c  e581000c          STR      r0,[r1,#0xc]
;;;566    	NF_ADDR((blockPage)&0xff);	// A[18:11]
000510  e20600ff          AND      r0,r6,#0xff
000514  e581000c          STR      r0,[r1,#0xc]
;;;567    	NF_ADDR((blockPage>>8)&0xff);	// A[26:19]
000518  e1a00806          MOV      r0,r6,LSL #16
00051c  e1a00c20          MOV      r0,r0,LSR #24
000520  e581000c          STR      r0,[r1,#0xc]
;;;568    	NF_ADDR((blockPage>>16)&0xff);  // A7
000524  e1a00406          MOV      r0,r6,LSL #8
000528  e1a00c20          MOV      r0,r0,LSR #24
00052c  e581000c          STR      r0,[r1,#0xc]
;;;569    
;;;570    #if 0
;;;571    		//data write into main data area
;;;572    		for(i=0;i<1024;i++)
;;;573    		{
;;;574    		NF_WRDATA(*bufPt++);	
;;;575    		
;;;576    	//	if(page==0){
;;;577    	//	if(i%8==0)
;;;578    	//	Uart_Printf("\n%xh:",i);
;;;579    	//	Uart_Printf("%04x ",*bufPt++);	
;;;580    	//	}
;;;581    		}
;;;582    
;;;583    #elif 1
;;;584    			//DMA 
;;;585    		  
;;;586    		//	  rINTMSK=~(BIT_DMA);
;;;587    		//	  rINTSUBMSK=~(BIT_SUB_DMA0);
;;;588    			  rSUBSRCPND=BIT_SUB_DMA0;	
000530  e3a00780          MOV      r0,#0x2000000
000534  e24118a0          SUB      r1,r1,#0xa00000
000538  e5810018          STR      r0,[r1,#0x18]
;;;589    		
;;;590    			  rDISRC0=(unsigned)bufPt;
00053c  e28005f9          ADD      r0,r0,#0x3e400000
000540  e5809000          STR      r9,[r0,#0]
;;;591    			  rDISRCC0=(0<<1)|(0<<0); //arc=AHB,src_addr=inc
000544  e3a00000          MOV      r0,#0
000548  e2811980          ADD      r1,r1,#0x200000
00054c  e5810004          STR      r0,[r1,#4]
;;;592    			  rDIDST0=0x40c00010; //NF_WRDATA()
000550  e51f0334          LDR      r0,|L1.548|
000554  e0011000          AND      r1,r1,r0
000558  e5810008          STR      r0,[r1,#8]
;;;593    			  rDIDSTC0=(0<<1)|(1<<0); //dst=AHB,dst_addr=fix;
00055c  e3a00001          MOV      r0,#1
000560  e1c11000          BIC      r1,r1,r0
000564  e581000c          STR      r0,[r1,#0xc]
;;;594    			  rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(1<<20)|(2048/2);
000568  e59f0260          LDR      r0,|L1.2000|
00056c  e0011000          AND      r1,r1,r0
000570  e5810010          STR      r0,[r1,#0x10]
;;;595    			  //Handshake,AHB,interrupt,(UNIT),whole,S/W,no_autoreload,16bit,count=2048/2;
;;;596    			  
;;;597    			  rDMASKTRIG0=(1<<1)|(1<<0);
000574  e3a00003          MOV      r0,#3
000578  e1c11000          BIC      r1,r1,r0
00057c  e5810020          STR      r0,[r1,#0x20]
;;;598    		  
;;;599    		  //   while(dmaDone==0);
;;;600    		  
;;;601    		  //   rINTSUBMSK=BIT_ALLMSK;
;;;602    		  //	rINTMSK=BIT_ALLMSK;
;;;603    		  
;;;604    			  while(!(rSUBSRCPND & BIT_SUB_DMA0));
000580  e1a00000          NOP      
                  |L1.1412|
000584  e51f036c          LDR      r0,|L1.544|
000588  e5900018          LDR      r0,[r0,#0x18]
00058c  e3100780          TST      r0,#0x2000000
000590  0afffffb          BEQ      |L1.1412|
;;;605    			  rSUBSRCPND=BIT_SUB_DMA0;
000594  e3a00780          MOV      r0,#0x2000000

⌨️ 快捷键说明

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