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

📄 k9d1g08.txt

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 842]

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

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

⌨️ 快捷键说明

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