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

📄 usbdown.txt

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

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

                          AREA ||.text||, CODE, READONLY

                  WaitDownload PROC
;;;277    void WaitDownload(void)
;;;278    {
                  |L1.0|
000000  e92d47f0          STMFD    sp!,{r4-r10,lr}
000004  e24dd030          SUB      sp,sp,#0x30
;;;279        U32 i;
;;;280        U32 j;
;;;281        U16 cs;
;;;282        U32 temp;
;;;283        U16 dnCS;
;;;284        int first=1;
000008  e3a0a001          MOV      r10,#1
;;;285        float time;
;;;286        U8 tempMem[16];
;;;287        U8 key;
;;;288        
;;;289        checkSum=0;
00000c  e3a00000          MOV      r0,#0
000010  e59f129c          LDR      r1,|L1.692|
000014  e1c100b0          STRH     r0,[r1,#0]  ; checkSum
;;;290        downloadAddress_u=(U32)tempMem; //_RAM_STARTADDRESS; 
000018  e28d0020          ADD      r0,sp,#0x20
00001c  e59f1294          LDR      r1,|L1.696|
000020  e5810000          STR      r0,[r1,#0]  ; downloadAddress_u
;;;291        downPt=(unsigned char *)downloadAddress_u;
000024  e59f028c          LDR      r0,|L1.696|
000028  e5900000          LDR      r0,[r0,#0]  ; downloadAddress_u
00002c  e59f1288          LDR      r1,|L1.700|
000030  e5810000          STR      r0,[r1,#0]  ; downPt
;;;292    	//This address is used for receiving first 8 byte.
;;;293        downloadFileSize=0;
000034  e3a00000          MOV      r0,#0
000038  e59f1280          LDR      r1,|L1.704|
00003c  e5810000          STR      r0,[r1,#0]  ; downloadFileSize
;;;294        
;;;295    
;;;296        /*******************************/
;;;297        /*    Test program download    */
;;;298        /*******************************/
;;;299        j=0;
000040  e3a04000          MOV      r4,#0
;;;300         
;;;301       
;;;302       Uart_Printf("Enter a new temporary download address(0x1...):");
000044  e28f0f9e          ADR      r0,|L1.708|
000048  ebfffffe          BL       _printf
;;;303       tempdownloadAddress=Uart_GetIntNum();
00004c  ebfffffe          BL       Uart_GetIntNum
000050  e59f129c          LDR      r1,|L1.756|
000054  e5810000          STR      r0,[r1,#0]  ; tempdownloadAddress
;;;304       download_run=0;
000058  e3a00000          MOV      r0,#0
00005c  e59f1294          LDR      r1,|L1.760|
000060  e5810000          STR      r0,[r1,#0]  ; download_run
;;;305       //Uart_Printf("The temporary download address is 0x%x.\n\n",tempdownloadAddress);
;;;306        Uart_Printf(" Waiting a download.\n"); 
000064  e28f0fa4          ADR      r0,|L1.764|
000068  ebfffffe          BL       _printf
;;;307        while(downloadFileSize==0)
00006c  e1a00000          NOP      
                  |L1.112|
000070  e59f0248          LDR      r0,|L1.704|
000074  e5900000          LDR      r0,[r0,#0]  ; downloadFileSize
000078  e3500000          CMP      r0,#0
00007c  1a00000f          BNE      |L1.192|
;;;308        {
;;;309                 
;;;310    	if(j%0x50000==0)Led_Display(0x6);
000080  e1a01004          MOV      r1,r4
000084  e3a00a50          MOV      r0,#0x50000
000088  ebfffffe          BL       __rt_udiv
00008c  e3510000          CMP      r1,#0
000090  1a000001          BNE      |L1.156|
000094  e3a00006          MOV      r0,#6
000098  ebfffffe          BL       Led_Display
;;;311    	if(j%0x50000==0x28000)Led_Display(0x9);
                  |L1.156|
00009c  e1a01004          MOV      r1,r4
0000a0  e3a00a50          MOV      r0,#0x50000
0000a4  ebfffffe          BL       __rt_udiv
0000a8  e3510ba0          CMP      r1,#0x28000
0000ac  1a000001          BNE      |L1.184|
0000b0  e3a00009          MOV      r0,#9
0000b4  ebfffffe          BL       Led_Display
;;;312    	j++;
                  |L1.184|
0000b8  e2844001          ADD      r4,r4,#1
;;;313        }
0000bc  eaffffeb          B        |L1.112|
;;;314        Uart_Printf(" download address: 0x%x, download file size: 0x%x\n\n",downloadAddress_u, downloadFileSize-0x0a);
                  |L1.192|
0000c0  e59f01f8          LDR      r0,|L1.704|
0000c4  e5900000          LDR      r0,[r0,#0]  ; downloadFileSize
0000c8  e240200a          SUB      r2,r0,#0xa
0000cc  e59f01e4          LDR      r0,|L1.696|
0000d0  e5901000          LDR      r1,[r0,#0]  ; downloadAddress_u
0000d4  e28f0f8e          ADR      r0,|L1.788|
0000d8  ebfffffe          BL       _printf
;;;315        Timer_InitEx();      
0000dc  ebfffffe          BL       Timer_InitEx
;;;316        Timer_StartEx();  
0000e0  ebfffffe          BL       Timer_StartEx
;;;317    
;;;318    #if USBDMA    
;;;319    
;;;320        rINTMSK&=~(BIT_DMA);
;;;321        rINTSUBMSK&=~(BIT_SUB_DMA2);
;;;322    
;;;323        ClearEp3OutPktReady(); 
;;;324        	// indicate the first packit is processed.
;;;325        	// has been delayed for DMA2 cofiguration.
;;;326       
;;;327        
;;;328        if(downloadFileSize>EP3_PKT_SIZE)
;;;329        {
;;;330            if(downloadFileSize<=(0x80000))
;;;331            {
;;;332          	    ConfigEp3DmaMode(downloadAddress_u+EP3_PKT_SIZE-8,downloadFileSize-EP3_PKT_SIZE);	
;;;333      	    //wait until DMA reload occurs.
;;;334    	    while((rDSTAT2&0xfffff)==0);
;;;335    
;;;336          	    //will not be used.
;;;337           	    rDIDST2=(downloadAddress_u+downloadFileSize-EP3_PKT_SIZE);  
;;;338           	    rDIDSTC2=(0<<1)|(0<<0);  
;;;339    	    rDCON2=rDCON2&~(0xfffff)|(0);        	    
;;;340    	}
;;;341          	else
;;;342          	{
;;;343          	    ConfigEp3DmaMode(downloadAddress_u+EP3_PKT_SIZE-8,0x80000-EP3_PKT_SIZE);
;;;344      	    //wait until DMA reload occurs.
;;;345    	    while((rDSTAT2&0xfffff)==0);
;;;346          	    
;;;347        	    if(downloadFileSize>(0x80000*2))//for 1st autoreload
;;;348        	    {
;;;349            	rDIDST2=(downloadAddress_u+0x80000-8);  //for 1st autoreload.
;;;350            	rDIDSTC2=(0<<1)|(0<<0);  
;;;351        	       rDCON2=rDCON2&~(0xfffff)|(0x80000);        	  
;;;352    
;;;353      		while(rEP3_DMA_TTC<0xfffff)
;;;354      		{
;;;355      		    rEP3_DMA_TTC_L=0xff; 
;;;356      		    rEP3_DMA_TTC_M=0xff;
;;;357      		    rEP3_DMA_TTC_H=0xf;
;;;358      		}
;;;359        	    }	
;;;360     	    else
;;;361     	    {
;;;362     	        rDIDST2=(downloadAddress_u+0x80000-8);  //for 1st autoreload.
;;;363          	        rDIDSTC2=(0<<1)|(0<<0);  
;;;364     	        rDCON2=rDCON2&~(0xfffff)|(downloadFileSize-0x80000); 		
;;;365    
;;;366      		while(rEP3_DMA_TTC<0xfffff)
;;;367      		{
;;;368      		    rEP3_DMA_TTC_L=0xff; 
;;;369      		    rEP3_DMA_TTC_M=0xff;
;;;370      		    rEP3_DMA_TTC_H=0xf;
;;;371      		}
;;;372    	    }
;;;373    	}
;;;374     	totalDmaCount=0;
;;;375        }
;;;376        else
;;;377        {
;;;378    	totalDmaCount=downloadFileSize;
;;;379        }
;;;380    #endif
;;;381    
;;;382        Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n",
0000e4  e59f01d4          LDR      r0,|L1.704|
0000e8  e5902000          LDR      r2,[r0,#0]  ; downloadFileSize
0000ec  e59f01c4          LDR      r0,|L1.696|
0000f0  e5901000          LDR      r1,[r0,#0]  ; downloadAddress_u
0000f4  e28f0f93          ADR      r0,|L1.840|
0000f8  ebfffffe          BL       _printf
;;;383        		downloadAddress_u,downloadFileSize);
;;;384        Uart_Printf("RECEIVED FILE SIZE:%8d",0);
0000fc  e3a01000          MOV      r1,#0
000100  e28f0f9b          ADR      r0,|L1.884|
000104  ebfffffe          BL       _printf
;;;385    
;;;386    #if USBDMA    
;;;387        j=0x10000;
;;;388    
;;;389        while(1)
;;;390        {
;;;391        	if( (rDCDST2-(U32)downloadAddress_u+8)>=j)
;;;392    	{
;;;393    	    Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
;;;394       	    j+=0x10000;
;;;395    	}
;;;396    	if(totalDmaCount>=downloadFileSize)break;
;;;397        }
;;;398    
;;;399    #else
;;;400        j=0x10000;
000108  e3a04b40          MOV      r4,#0x10000
;;;401    
;;;402        while(((U32)downPt-downloadAddress_u)<(downloadFileSize-8))
00010c  e1a00000          NOP      
                  |L1.272|
000110  e59f01a4          LDR      r0,|L1.700|
000114  e5900000          LDR      r0,[r0,#0]  ; downPt
000118  e59f1198          LDR      r1,|L1.696|
00011c  e5911000          LDR      r1,[r1,#0]  ; downloadAddress_u
000120  e0400001          SUB      r0,r0,r1
000124  e59f1194          LDR      r1,|L1.704|
000128  e5911000          LDR      r1,[r1,#0]  ; downloadFileSize
00012c  e2411008          SUB      r1,r1,#8
000130  e1500001          CMP      r0,r1
000134  2a00000b          BCS      |L1.360|
;;;403        {
;;;404    	if( ((U32)downPt-downloadAddress_u)>=j)
000138  e59f017c          LDR      r0,|L1.700|
00013c  e5900000          LDR      r0,[r0,#0]  ; downPt
000140  e59f1170          LDR      r1,|L1.696|
000144  e5911000          LDR      r1,[r1,#0]  ; downloadAddress_u
000148  e0400001          SUB      r0,r0,r1
00014c  e1500004          CMP      r0,r4
000150  3a000003          BCC      |L1.356|
;;;405    	{
;;;406    	    Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
000154  e1a01004          MOV      r1,r4
000158  e28f0f8b          ADR      r0,|L1.908|
00015c  ebfffffe          BL       _printf
;;;407       	    j+=0x10000;
000160  e2844b40          ADD      r4,r4,#0x10000
;;;408    	}
;;;409        }
                  |L1.356|
000164  eaffffe9          B        |L1.272|
;;;410    #endif
;;;411      
;;;412    
;;;413        time=Timer_StopEx();
                  |L1.360|
000168  ebfffffe          BL       Timer_StopEx
00016c  e1a06000          MOV      r6,r0
;;;414        Uart_Printf("\b\b\b\b\b\b\b\b%8d",downloadFileSize);	
000170  e59f0148          LDR      r0,|L1.704|
000174  e5901000          LDR      r1,[r0,#0]  ; downloadFileSize
000178  e28f0f83          ADR      r0,|L1.908|
00017c  ebfffffe          BL       _printf
;;;415        Uart_Printf("(%5.1fKB/S,%3.1fS)\n",(float)(downloadFileSize/time/1000.),time);
000180  e1a00006          MOV      r0,r6
000184  ebfffffe          BL       _f2d
000188  e58d0018          STR      r0,[sp,#0x18]
00018c  e58d101c          STR      r1,[sp,#0x1c]
000190  e59f0128          LDR      r0,|L1.704|
000194  e5900000          LDR      r0,[r0,#0]  ; downloadFileSize
000198  ebfffffe          BL       _ffltu
00019c  e1a09000          MOV      r9,r0
0001a0  e1a01006          MOV      r1,r6
0001a4  ebfffffe          BL       _fdiv
0001a8  e1a08000          MOV      r8,r0
0001ac  ebfffffe          BL       _f2d
0001b0  e88d0003          STMIA    sp,{r0,r1}
0001b4  e28f0f77          ADR      r0,|L1.920|
0001b8  e890000c          LDMIA    r0,{r2,r3}
0001bc  e59d0000          LDR      r0,[sp,#0]
0001c0  ebfffffe          BL       _ddiv
0001c4  e58d0008          STR      r0,[sp,#8]
0001c8  e58d100c          STR      r1,[sp,#0xc]
0001cc  ebfffffe          BL       _d2f
0001d0  e1a07000          MOV      r7,r0
0001d4  ebfffffe          BL       _f2d
0001d8  e58d0010          STR      r0,[sp,#0x10]
0001dc  e58d1014          STR      r1,[sp,#0x14]
0001e0  e59d001c          LDR      r0,[sp,#0x1c]
0001e4  e58d0000          STR      r0,[sp,#0]
0001e8  e1a02001          MOV      r2,r1
0001ec  e28f0f6b          ADR      r0,|L1.928|
0001f0  e59d1010          LDR      r1,[sp,#0x10]
0001f4  e59d3018          LDR      r3,[sp,#0x18]
0001f8  ebfffffe          BL       printf
;;;416        
;;;417    #if USBDMA    
;;;418        /*******************************/
;;;419        /*     Verify check sum        */
;;;420        /*******************************/
;;;421    
;;;422        Uart_Printf("Now, Checksum calculation\n");
;;;423    
;;;424        cs=0;    
;;;425        i=(downloadAddress_u);
;;;426        j=(downloadAddress_u+downloadFileSize-10)&0xfffffffc;
;;;427        while(i<j)
;;;428        {
;;;429        	temp=*((U32 *)i);
;;;430        	i+=4;
;;;431        	cs+=(U16)(temp&0xff);
;;;432        	cs+=(U16)((temp&0xff00)>>8);
;;;433        	cs+=(U16)((temp&0xff0000)>>16);
;;;434        	cs+=(U16)((temp&0xff000000)>>24);
;;;435        }
;;;436    
;;;437        i=(downloadAddress_u+downloadFileSize-10)&0xfffffffc;
;;;438        j=(downloadAddress_u+downloadFileSize-10);
;;;439        while(i<j)
;;;440        {
;;;441      	cs+=*((U8 *)i++);
;;;442        }
;;;443        
;;;444        checkSum=cs;
;;;445    #else
;;;446        //checkSum was calculated including dnCS. So, dnCS should be subtracted.
;;;447        checkSum=checkSum - *((unsigned char *)(downloadAddress_u+downloadFileSize-8-2))
0001fc  e59f00b4          LDR      r0,|L1.696|
000200  e5900000          LDR      r0,[r0,#0]  ; downloadAddress_u
000204  e59f10b4          LDR      r1,|L1.704|
000208  e5911000          LDR      r1,[r1,#0]  ; downloadFileSize
00020c  e0800001          ADD      r0,r0,r1
000210  e550000a          LDRB     r0,[r0,#-0xa]
000214  e59f1098          LDR      r1,|L1.692|
000218  e1d110b0          LDRH     r1,[r1,#0]  ; checkSum
00021c  e0410000          SUB      r0,r1,r0
000220  e59f1090          LDR      r1,|L1.696|
000224  e5911000          LDR      r1,[r1,#0]  ; downloadAddress_u
000228  e59f2090          LDR      r2,|L1.704|
00022c  e5922000          LDR      r2,[r2,#0]  ; downloadFileSize
000230  e0811002          ADD      r1,r1,r2
000234  e5511009          LDRB     r1,[r1,#-9]
000238  e0400001          SUB      r0,r0,r1
00023c  e59f1070          LDR      r1,|L1.692|
000240  e1c100b0          STRH     r0,[r1,#0]  ; checkSum
;;;448    	     - *( (unsigned char *)(downloadAddress_u+downloadFileSize-8-1) );	
;;;449    #endif	  
;;;450    
;;;451        dnCS=*((unsigned char *)(downloadAddress_u+downloadFileSize-8-2))+
000244  e59f006c          LDR      r0,|L1.696|
000248  e5900000          LDR      r0,[r0,#0]  ; downloadAddress_u
00024c  e59f106c          LDR      r1,|L1.704|
000250  e5911000          LDR      r1,[r1,#0]  ; downloadFileSize
000254  e0800001          ADD      r0,r0,r1
000258  e550000a          LDRB     r0,[r0,#-0xa]
00025c  e59f1054          LDR      r1,|L1.696|
000260  e5911000          LDR      r1,[r1,#0]  ; downloadAddress_u
000264  e59f2054          LDR      r2,|L1.704|
000268  e5922000          LDR      r2,[r2,#0]  ; downloadFileSize
00026c  e0811002          ADD      r1,r1,r2
000270  e5511009          LDRB     r1,[r1,#-9]
000274  e0800401          ADD      r0,r0,r1,LSL #8
000278  e3c05b40          BIC      r5,r0,#0x10000
;;;452    	(*( (unsigned char *)(downloadAddress_u+downloadFileSize-8-1) )<<8);
;;;453    
;;;454        download_end=1;
00027c  e3a00001          MOV      r0,#1
000280  e59f112c          LDR      r1,|L1.948|
000284  e5810000          STR      r0,[r1,#0]  ; download_end
;;;455        if(checkSum!=dnCS)
000288  e59f0024          LDR      r0,|L1.692|
00028c  e1d000b0          LDRH     r0,[r0,#0]  ; checkSum
000290  e1500005          CMP      r0,r5

⌨️ 快捷键说明

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