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

📄 k9s1208.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\k9s1208.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  NF_ReadPage PROC
;;;412    static int NF_ReadPage(U32 block,U32 page,U8 *buffer)
;;;413    {
                  |L1.0|
000000  e92d41f0          STMFD    sp!,{r4-r8,lr}
000004  e1a06000          MOV      r6,r0
000008  e1a07001          MOV      r7,r1
00000c  e1a08002          MOV      r8,r2
;;;414        int i;
;;;415        register U8 * bufPt=buffer;
000010  e1a04008          MOV      r4,r8
;;;416        unsigned int blockPage;    
;;;417        
;;;418        blockPage=(block<<5)+page;
000014  e0875286          ADD      r5,r7,r6,LSL #5
;;;419        NF_RSTECC();    // Reset ECC
000018  e59f0174          LDR      r0,|L1.404|
00001c  e5900004          LDR      r0,[r0,#4]
000020  e3800f40          ORR      r0,r0,#0x100
000024  e59f1168          LDR      r1,|L1.404|
000028  e5810004          STR      r0,[r1,#4]
;;;420        NF_MECC_UnLock();
00002c  e1a00001          MOV      r0,r1
000030  e5900004          LDR      r0,[r0,#4]
000034  e3c00f80          BIC      r0,r0,#0x200
000038  e5810004          STR      r0,[r1,#4]
;;;421        NF_CLRRnB(); 
00003c  e1a00001          MOV      r0,r1
000040  e590002c          LDR      r0,[r0,#0x2c]
000044  e3800d80          ORR      r0,r0,#0x2000
000048  e581002c          STR      r0,[r1,#0x2c]
;;;422        NF_nFCE_L();      // nCE enable
00004c  e1a00001          MOV      r0,r1
000050  e5900004          LDR      r0,[r0,#4]
000054  e3c00080          BIC      r0,r0,#0x80
000058  e5810004          STR      r0,[r1,#4]
;;;423        
;;;424        NF_CMD(0x00);   // Read command
00005c  e3a00000          MOV      r0,#0
000060  e1c11000          BIC      r1,r1,r0
000064  e5810008          STR      r0,[r1,#8]
;;;425        // Address 4 cycles
;;;426        NF_ADDR(0);	    // Column address
000068  e3a00000          MOV      r0,#0
00006c  e1c11000          BIC      r1,r1,r0
000070  e581000c          STR      r0,[r1,#0xc]
;;;427        NF_ADDR(blockPage&0xff);	    //  page address
000074  e20500ff          AND      r0,r5,#0xff
000078  e581000c          STR      r0,[r1,#0xc]
;;;428        NF_ADDR((blockPage>>8)&0xff);   // 
00007c  e1a00805          MOV      r0,r5,LSL #16
000080  e1a00c20          MOV      r0,r0,LSR #24
000084  e581000c          STR      r0,[r1,#0xc]
;;;429        NF_ADDR((blockPage>>16)&0xff);  //
000088  e1a00405          MOV      r0,r5,LSL #8
00008c  e1a00c20          MOV      r0,r0,LSR #24
000090  e581000c          STR      r0,[r1,#0xc]
;;;430       
;;;431    
;;;432    //    for(i=0;i<5;i++); //wait tWB(100ns)
;;;433        
;;;434        NF_TRANSRnB();    // Wait tRnB(max 12us)
000094  e1a00000          NOP      
                  |L1.152|
000098  e59f00f4          LDR      r0,|L1.404|
00009c  e590002c          LDR      r0,[r0,#0x2c]
0000a0  e3100d80          TST      r0,#0x2000
0000a4  0afffffb          BEQ      |L1.152|
;;;435    
;;;436    
;;;437    #if 0
;;;438        i=512;
;;;439        while(i--!=0)
;;;440        {
;;;441           
;;;442    	 *bufPt++=NF_RDDATA();	// Read one page
;;;443    	 
;;;444        }
;;;445    #elif 1
;;;446    		//DMA 
;;;447    	  
;;;448    	//	  rINTMSK=~(BIT_DMA);
;;;449    	//	  rINTSUBMSK=~(BIT_SUB_DMA0);
;;;450    		  rSUBSRCPND=BIT_SUB_DMA0;	
0000a8  e3a00780          MOV      r0,#0x2000000
0000ac  e59f10e4          LDR      r1,|L1.408|
0000b0  e5810018          STR      r0,[r1,#0x18]
;;;451    	
;;;452    		  rDISRC0=0x40c00010; //NF_RDDATA()
0000b4  e59f00e0          LDR      r0,|L1.412|
0000b8  e0811880          ADD      r1,r1,r0,LSL #17
0000bc  e5810000          STR      r0,[r1,#0]
;;;453    		  rDISRCC0=(0<<1)|(1<<0); //arc=AHB,src_addr=fix
0000c0  e3a00001          MOV      r0,#1
0000c4  e1c11000          BIC      r1,r1,r0
0000c8  e5810004          STR      r0,[r1,#4]
;;;454    		  rDIDST0=(unsigned)bufPt;
0000cc  e1c10000          BIC      r0,r1,r0
0000d0  e5804008          STR      r4,[r0,#8]
;;;455    		  rDIDSTC0=(0<<1)|(0<<0); //dst=AHB,dst_addr=inc;
0000d4  e3a00000          MOV      r0,#0
0000d8  e1c11000          BIC      r1,r1,r0
0000dc  e581000c          STR      r0,[r1,#0xc]
;;;456    		  rDCON0=(1<<31)|(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(1<<22)|(0<<20)|(512);
0000e0  e59f00b8          LDR      r0,|L1.416|
0000e4  e0011000          AND      r1,r1,r0
0000e8  e5810010          STR      r0,[r1,#0x10]
;;;457    		  //Handshake,AHB,interrupt,(UNIT),whole,S/W,no_autoreload,byte,count=512;
;;;458    		  
;;;459    		  rDMASKTRIG0=(1<<1)|(1<<0);
0000ec  e3a00003          MOV      r0,#3
0000f0  e1c11000          BIC      r1,r1,r0
0000f4  e5810020          STR      r0,[r1,#0x20]
;;;460    	  
;;;461    	  //   while(dmaDone==0);
;;;462    	  
;;;463    	  //   rINTSUBMSK=BIT_ALLMSK;
;;;464    	  //	rINTMSK=BIT_ALLMSK;
;;;465    	  
;;;466    		  while(!(rSUBSRCPND & BIT_SUB_DMA0));
0000f8  e1a00000          NOP      
                  |L1.252|
0000fc  e59f0094          LDR      r0,|L1.408|
000100  e5900018          LDR      r0,[r0,#0x18]
000104  e3100780          TST      r0,#0x2000000
000108  0afffffb          BEQ      |L1.252|
;;;467    		  rSUBSRCPND=BIT_SUB_DMA0;
00010c  e3a00780          MOV      r0,#0x2000000
000110  e59f1080          LDR      r1,|L1.408|
000114  e5810018          STR      r0,[r1,#0x18]
;;;468    	  
;;;469    	  //	  while(!(rNF_STAT&(1<<10)));
;;;470    	
;;;471    #elif 0
;;;472        __RdPage512(bufPt);
;;;473    #endif
;;;474        NF_MECC_Lock();
000118  e28005fb          ADD      r0,r0,#0x3ec00000
00011c  e5900004          LDR      r0,[r0,#4]
000120  e3800f80          ORR      r0,r0,#0x200
000124  e28118a0          ADD      r1,r1,#0xa00000
000128  e5810004          STR      r0,[r1,#4]
;;;475    
;;;476    
;;;477        rNFMECCDATA0=NF_RDDATA();
00012c  e1a00001          MOV      r0,r1
000130  e5900010          LDR      r0,[r0,#0x10]
000134  e5810014          STR      r0,[r1,#0x14]
;;;478        rNFMECCDATA1=NF_RDDATA();
000138  e1a00001          MOV      r0,r1
00013c  e5900010          LDR      r0,[r0,#0x10]
000140  e5810018          STR      r0,[r1,#0x18]
;;;479        rNFMECCDATA2=NF_RDDATA();
000144  e1a00001          MOV      r0,r1
000148  e5900010          LDR      r0,[r0,#0x10]
00014c  e581001c          STR      r0,[r1,#0x1c]
;;;480        rNFMECCDATA3=((rNFMECC0>>24)&0xff);
000150  e1a00001          MOV      r0,r1
000154  e5900038          LDR      r0,[r0,#0x38]
000158  e1a00c20          MOV      r0,r0,LSR #24
00015c  e5810020          STR      r0,[r1,#0x20]
;;;481    
;;;482        NF_nFCE_H();  
000160  e1a00001          MOV      r0,r1
000164  e5900004          LDR      r0,[r0,#4]
000168  e3800080          ORR      r0,r0,#0x80
00016c  e5810004          STR      r0,[r1,#4]
;;;483    
;;;484    
;;;485        if((rNFESTAT0&0x03)==0x0)
000170  e1a00001          MOV      r0,r1
000174  e5900030          LDR      r0,[r0,#0x30]
000178  e3100003          TST      r0,#3
00017c  1a000001          BNE      |L1.392|
;;;486        	{
;;;487        	     //Uart_Printf("[ECC OK!!!]\n");
;;;488          	     return 1;
000180  e3a00001          MOV      r0,#1
;;;489           }
;;;490         else  Uart_Printf("[ECC ERROR!!!]\n");
;;;491    
;;;492    }    	
                  |L1.388|
000184  e8bd81f0          LDMFD    sp!,{r4-r8,pc}
                  |L1.392|
000188  e28f0014          ADR      r0,|L1.420|           ;490
00018c  ebfffffe          BL       _printf               ;490
000190  eafffffb          B        |L1.388|
                  |L1.404|
000194  40c00000          DCD      0x40c00000
                  |L1.408|
000198  40200000          DCD      0x40200000
                  |L1.412|
00019c  40c00010          DCD      0x40c00010
                  |L1.416|
0001a0  e8400200          DCD      0xe8400200
                  |L1.420|
0001a4  4343455b          DCB      "[ECC"
0001a8  52524520          DCB      " ERR"
0001ac  2121524f          DCB      "OR!!"
0001b0  000a5d21          DCB      "!]\n\0"
                          ENDP

                  NF_MarkBadBlock PROC
;;;356    static int NF_MarkBadBlock(U32 block)
;;;357    {
0001b4  e92d4070          STMFD    sp!,{r4-r6,lr}
0001b8  e1a06000          MOV      r6,r0
;;;358        int i;
;;;359        U32 blockPage;
;;;360        blockPage=(block<<5);
0001bc  e1a05286          MOV      r5,r6,LSL #5
;;;361        
;;;362     
;;;363        seBuf[0]=0xff;
0001c0  e3a000ff          MOV      r0,#0xff
0001c4  e59f1154          LDR      r1,|L1.800|
0001c8  e5c10000          STRB     r0,[r1,#0]  ; seBuf
;;;364        seBuf[1]=0xff;    
0001cc  e3a000ff          MOV      r0,#0xff
0001d0  e59f1148          LDR      r1,|L1.800|
0001d4  e5c10001          STRB     r0,[r1,#1]  ; seBuf
;;;365        seBuf[2]=0xff;    
0001d8  e3a000ff          MOV      r0,#0xff
0001dc  e59f113c          LDR      r1,|L1.800|
0001e0  e5c10002          STRB     r0,[r1,#2]  ; seBuf
;;;366        //seBuf[3]=0xff;	
;;;367        seBuf[5]=0x44;   // Bad blcok mark=0
0001e4  e3a00044          MOV      r0,#0x44
0001e8  e59f1130          LDR      r1,|L1.800|
0001ec  e5c10005          STRB     r0,[r1,#5]  ; seBuf
;;;368    
;;;369      
;;;370      //  NF_CLRRnB(); 
;;;371        NF_nFCE_L(); 
0001f0  e51f0064          LDR      r0,|L1.404|
0001f4  e5900004          LDR      r0,[r0,#4]
0001f8  e3c00080          BIC      r0,r0,#0x80
0001fc  e51f1070          LDR      r1,|L1.404|
000200  e5810004          STR      r0,[r1,#4]
;;;372        
;;;373        
;;;374        NF_CMD(0x50);   
000204  e3a00050          MOV      r0,#0x50
000208  e1c11000          BIC      r1,r1,r0
00020c  e5810008          STR      r0,[r1,#8]
;;;375        NF_CMD(0x80);   // Write 1st command
000210  e3a00080          MOV      r0,#0x80
000214  e1c11000          BIC      r1,r1,r0
000218  e5810008          STR      r0,[r1,#8]
;;;376        
;;;377        NF_ADDR(0x0);		    // The mark of bad block is 
00021c  e3a00000          MOV      r0,#0
000220  e1c11000          BIC      r1,r1,r0
000224  e581000c          STR      r0,[r1,#0xc]
;;;378        NF_ADDR((blockPage)&0xff);	    // marked 5th spare array 
000228  e20500ff          AND      r0,r5,#0xff
00022c  e581000c          STR      r0,[r1,#0xc]
;;;379        NF_ADDR((blockPage>>8)&0xff);   // in the 1st page.
000230  e1a00805          MOV      r0,r5,LSL #16
000234  e1a00c20          MOV      r0,r0,LSR #24
000238  e581000c          STR      r0,[r1,#0xc]
;;;380        NF_ADDR((blockPage>>16)&0xff);  //
00023c  e1a00405          MOV      r0,r5,LSL #8
000240  e1a00c20          MOV      r0,r0,LSR #24
000244  e581000c          STR      r0,[r1,#0xc]
;;;381        
;;;382        for(i=0;i<16;i++)
000248  e3a04000          MOV      r4,#0
                  |L1.588|
00024c  e3540010          CMP      r4,#0x10
000250  aa000007          BGE      |L1.628|
000254  ea000001          B        |L1.608|
                  |L1.600|
000258  e2844001          ADD      r4,r4,#1
00025c  eafffffa          B        |L1.588|
;;;383        {
;;;384    	//NF_WRDATA(0,seBuf[i]);	// Write spare array
;;;385    	NF_WRDATA(seBuf[i]);	// Write spare array
                  |L1.608|
000260  e59f00b8          LDR      r0,|L1.800|
000264  e7d00004          LDRB     r0,[r0,r4]
000268  e51f10dc          LDR      r1,|L1.404|
00026c  e5810010          STR      r0,[r1,#0x10]
;;;386        }
000270  eafffff8          B        |L1.600|
;;;387    
;;;388        NF_CMD(0x10);   // Write 2nd command
                  |L1.628|
000274  e3a00010          MOV      r0,#0x10
000278  e51f10ec          LDR      r1,|L1.404|
00027c  e5810008          STR      r0,[r1,#8]
;;;389        
;;;390        for(i=0;i<10;i++);  //tWB = 100ns. ///???????
000280  e3a04000          MOV      r4,#0
                  |L1.644|
000284  e354000a          CMP      r4,#0xa
000288  aa000001          BGE      |L1.660|
00028c  e2844001          ADD      r4,r4,#1
000290  eafffffb          B        |L1.644|
;;;391    
;;;392        NF_TRANSRnB();      // Wait tPROG(200~500us)
                  |L1.660|
000294  e1a00000          NOP      
                  |L1.664|
000298  e51f010c          LDR      r0,|L1.404|
00029c  e590002c          LDR      r0,[r0,#0x2c]
0002a0  e3100d80          TST      r0,#0x2000
0002a4  0afffffb          BEQ      |L1.664|
;;;393      
;;;394        NF_CMD(0x70);
0002a8  e3a00070          MOV      r0,#0x70
0002ac  e51f1120          LDR      r1,|L1.404|

⌨️ 快捷键说明

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