亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb_monitor.c

?? 英蓓特2410開發箱的軟件包
?? C
字號:
/*********************************************************************************************
* File:		usb_monitor.c
* Author:	embest
* Desc:		Usb monitor entry point,menu,download
*			To measure up to large time, The WDT interrupt is used.
* History:	
*			purnnamu, Sep.03.2002
*				To remove the power noise in the USB signal, the unused CLKOUT0,1 is disabled
*			R.X.Huang, March 12, 2005
*				Programming modify, style of the program: nomenclature, commentary
*			Y.J.Guo, April 28, 2005
*				Modifying and reusing  of S3C2410X u24xmon
*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/
/*                                     include files	                                    */
/*------------------------------------------------------------------------------------------*/
#include <string.h>

#include "2410lib.h"
#include "mmu.h"
#include "profile.h"
#include "usbmain.h"
#include "usbout.h"
#include "usblib.h"
#include "2410usb.h"

/*------------------------------------------------------------------------------------------*/
/*                                     global variables                                     */
/*------------------------------------------------------------------------------------------*/
extern char Image_RW_Limit[];
extern void (*run)(void);

volatile UINT32T downloadAddress;
volatile unsigned char *downPt;
volatile UINT32T downloadFileSize;
volatile UINT16T checkSum;
volatile unsigned int err=0;
volatile UINT32T totalDmaCount;
volatile int isUsbdSetConfiguration;

int download_run=0;
int menuUsed=0;
int consoleNum;
UINT32T *pMagicNum=(UINT32T *)Image_RW_Limit;
UINT32T tempDownloadAddress;

/*------------------------------------------------------------------------------------------*/
/*                                     function declare                                     */
/*------------------------------------------------------------------------------------------*/
void usb_isr_init(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);
void HaltDabort(void);
void Lcd_Off(void);
void down_wait(void);
void down_menu(void);

/*********************************************************************************************
* name:		usb_memory_test
* func:		memory operation
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void usb_memory_test(void)
{
    int i;
    UINT32T data;
    int memError=0;
    UINT32T *pt;
    
    // memory test
    Uart_Printf("Memory Test(%xh-%xh):WR",_RAM_STARTADDRESS,(_ISR_STARTADDRESS&0xfff0000));

    pt=(UINT32T *)_RAM_STARTADDRESS;
    while((UINT32T)pt<(_ISR_STARTADDRESS&0xffff0000))
    {
		*pt=(UINT32T)pt;
		pt++;
   }

    Uart_Printf("\b\bRD");
    pt=(UINT32T *)_RAM_STARTADDRESS;
	
    while((UINT32T)pt<(_ISR_STARTADDRESS&0xffff0000))
    {
		data=*pt;
		if(data!=(UINT32T)pt)
		{
		    memError=1;
		    Uart_Printf("\b\bFAIL:0x%x=0x%x\n",i,data);
		    break;
		}
		pt++;
   }

    if(memError==0)Uart_Printf("\b\bO.K.\n");
}

/*********************************************************************************************
* name:		usb_monitor
* func:		usb operation main code
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void usb_monitor(void)
{
    char *mode;
    int i;
    UINT8T key;

    ChangeClockDivider(1,1);    // 1:2:4    
    //ChangeMPllValue(82,2,1);  //FCLK=135.0Mhz     
    //ChangeMPllValue(82,1,1);    //FCLK=180.0Mhz     
    ChangeMPllValue(161,3,1); //FCLK=202.8Mhz     
    
    Port_Init();
    
    rGPHCON = rGPHCON&~(0xf<<18)|(0x5<<18);   
    //To enhance the USB signal quality.
    //CLKOUT 0,1=OUTPUT to reduce the power consumption.
    
    usb_isr_init();
    if(*pMagicNum!=0x12345678)
    	consoleNum=0;
    else
    	consoleNum=1;
    	
    Uart_Init(0,115200);
    Uart_Select(consoleNum);

    rMISCCR=rMISCCR&~(1<<3);                                    // USBD is selected instead of USBH1 
    rMISCCR=rMISCCR&~(1<<13);                                   // USB port 1 is enabled.

    // USBD should be initialized first of all.
    isUsbdSetConfiguration=0;

#if 0
    UsbdMain(); 
    MMU_Init();                                                 //MMU should be reconfigured or turned off for the debugger, 
    //After downloading, MMU should be turned off for the MMU based program,such as WinCE.	
#else
    //MMU_EnableICache();  
    UsbdMain(); 
#endif
    Delay(0);                                                   //calibrate Delay()
    
    pISR_SWI=(_ISR_STARTADDRESS+0xf0);                          //for pSOS

    Led_Display(0x6);

#if USBDMA
    mode="DMA";
#else
    mode="Int";
#endif

    Uart_Printf("\n\n");
    Uart_Printf("+---------------------------------------------+\n");
    Uart_Printf("| S3C2410X USB Downloader ver R1.11 April/28/05 |\n");
    Uart_Printf("+---------------------------------------------+\n");
    Uart_Printf("FCLK=%dMHz,%s mode\n",FCLK/1000000,mode); 
    Uart_Printf("USB: IN_ENDPOINT:1 OUT_ENDPOINT:3\n"); 
    Uart_Printf("FORMAT: <ADDR(DATA):4>+<SIZE(n+10):4>+<DATA:n>+<CS:2>\n");
    Uart_Printf("NOTE: 1. Power off/on or press the reset button for 1 sec\n");
    Uart_Printf("         in order to get a valid USB device address.\n");
    Uart_Printf("      2. For additional menu, Press any key. \n");
    Uart_Printf("\n");

    download_run=1;                                             //The default menu is the Download & Run mode.

    while(1)
    {
    	if(menuUsed==1)down_menu();
    	down_wait();    
   }

}

/*********************************************************************************************
* name:		down_menu
* func:		download selection menu
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void down_menu(void)
{
    int i;
    UINT8T key;
    menuUsed=1;
    while(1)
    {
        Uart_Printf("\n###### Select Menu ######\n");
        //Uart_Printf(" [0] Download & Run\n");
        Uart_Printf(" [1] Download Only\n");
        Uart_Printf(" [2] Test SDRAM \n");
        Uart_Printf(" [3] Change The Console UART Ch.\n");
        key=Uart_Getch();
        
        switch(key)
        {
        //case '0':
        //    Uart_Printf("\nDownload&Run is selected.\n\n");
        //    download_run=1;
        //    return;
        case '1':
            Uart_Printf("\nDownload Only is selected.\n");
            Uart_Printf("Enter a new temporary download address(0x3...):");
            tempDownloadAddress=Uart_GetIntNum();
            download_run=0;
            Uart_Printf("The temporary download address is 0x%x.\n\n",tempDownloadAddress);
            return;
        case '2':
            Uart_Printf("\nMemory Test is selected.\n");        
	        usb_memory_test();
	        down_menu();
	    return;
            break;
        case '3':
            Uart_Printf("\nWhich UART channel do you want to use for the console?[0/1]\n");
            if(Uart_Getch()!='1')
            {
	    	*pMagicNum=0x0;
		Uart_Printf("UART ch.0 will be used for console at next boot.\n");        	    	
	   }
	    else
	    {
	        *pMagicNum=0x12345678;
 		Uart_Printf("UART ch.1 will be used for console at next boot.\n");        
                Uart_Printf("UART ch.0 will be used after long power-off.\n");
	   }
            Uart_Printf("System is waiting for a reset. Please, Reboot!!!\n");
            while(1);
            break;

        default:
            break;
	}	
   }	    

}

/*********************************************************************************************
* name:		down_wait
* func:		waiting download
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void down_wait(void)
{
    UINT32T i;
    UINT32T j;
    UINT16T cs;
    UINT32T temp;
    UINT16T dnCS;
    int first=1;
    float time;
    UINT8T tempMem[16];
    UINT8T key;
    
    checkSum=0;
    downloadAddress=(UINT32T)tempMem;                           //_RAM_STARTADDRESS; 
    downPt=(unsigned char *)downloadAddress;
	//This address is used for receiving first 8 byte.
    downloadFileSize=0;
    
#if 0
    MMU_DisableICache(); 
        //For multi-ICE. 
        //If ICache is not turned-off, debugging is started with ICache-on.
#endif

    /*******************************/
    /*    Test program download    */
    /*******************************/
    j=0;

    if(isUsbdSetConfiguration==0)
    {
	Uart_Printf("USB host is not connected yet.\n");
   }

    while(downloadFileSize==0)
    {
        if(first==1 && isUsbdSetConfiguration!=0)
        {
            Uart_Printf("USB host is connected. Waiting a download.\n");
            first=0;
       }

	if(j%0x50000==0)Led_Display(0x6);
	if(j%0x50000==0x28000)Led_Display(0x9);
	j++;

	key=Uart_GetKey();
	if(key!=0)
	{
	    down_menu();
            first=1;                                            //To display the message,"USB host ...."
	}

   }

    timer_initex();      
    timer_startex();  

#if USBDMA    

    rINTMSK &=~(BIT_DMA2);  

    ClearEp3OutPktReady(); 
    	// indicate the first packit is processed.
    	// has been delayed for DMA2 cofiguration.

    if(downloadFileSize>EP3_PKT_SIZE)
    {
        if(downloadFileSize<=(0x80000))
        {
      	    ConfigEp3DmaMode(downloadAddress+EP3_PKT_SIZE-8,downloadFileSize-EP3_PKT_SIZE);	
  	    //wait until DMA reload occurs.
	    while((rDSTAT2&0xfffff)==0);

      	    //will not be used.
       	    rDIDST2=(downloadAddress+downloadFileSize-EP3_PKT_SIZE);  
       	    rDIDSTC2=(0<<1)|(0<<0);  
	    rDCON2=rDCON2&~(0xfffff)|(0);        	    
		}
		else
		{
			ConfigEp3DmaMode(downloadAddress+EP3_PKT_SIZE-8,0x80000-EP3_PKT_SIZE);
			//wait until DMA reload occurs.
			while((rDSTAT2&0xfffff)==0);
	      	    
			if(downloadFileSize>(0x80000*2))                    //for 1st autoreload
			{
				rDIDST2=(downloadAddress+0x80000-8);                //for 1st autoreload.
				rDIDSTC2=(0<<1)|(0<<0);  
				rDCON2=rDCON2&~(0xfffff)|(0x80000);        	  
	
				while(rEP3_DMA_TTC<0xfffff)
				{
					rEP3_DMA_TTC_L=0xff; 
					rEP3_DMA_TTC_M=0xff;
					rEP3_DMA_TTC_H=0xf;
				}
			}	
	 	    else
	 	    {
	 	        rDIDST2=(downloadAddress+0x80000-8);                //for 1st autoreload.
	      	        rDIDSTC2=(0<<1)|(0<<0);  
	 	        rDCON2=rDCON2&~(0xfffff)|(downloadFileSize-0x80000); 		
	
		  		while(rEP3_DMA_TTC<0xfffff)
		  		{
		  		    rEP3_DMA_TTC_L=0xff; 
		  		    rEP3_DMA_TTC_M=0xff;
		  		    rEP3_DMA_TTC_H=0xf;
		  		}
			}
		}
 		totalDmaCount=0;
	}
    else
	{
		totalDmaCount=downloadFileSize;
	}
#endif

    Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n",
    		downloadAddress,downloadFileSize);
    Uart_Printf("RECEIVED FILE SIZE:%8d",0);

#if USBDMA    
    j=0x10000;

    while(1)
	{
    	if( (rDCDST2-(UINT32T)downloadAddress+8)>=j)
		{
			Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
			j+=0x10000;
		}
		if(totalDmaCount>=downloadFileSize)break;
	}

#else
    j=0x10000;

    while(((UINT32T)downPt-downloadAddress)<(downloadFileSize-8))
    {
	if( ((UINT32T)downPt-downloadAddress)>=j)
	{
	    Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
   	    j+=0x10000;
	}
   }
#endif
    time=timer_stopex();
    Uart_Printf("\b\b\b\b\b\b\b\b%8d",downloadFileSize);	
    Uart_Printf("(%5.1fKB/S,%3.1fS)\n",(float)(downloadFileSize/time/1000.),time);
    
#if USBDMA    
    /*******************************/
    /*     Verify check sum        */
    /*******************************/

    Uart_Printf("Now, Checksum calculation\n");

    cs=0;    
    i=(downloadAddress);
    j=(downloadAddress+downloadFileSize-10)&0xfffffffc;
    while(i<j)
    {
    	temp=*((UINT32T *)i);
    	i+=4;
    	cs+=(UINT16T)(temp&0xff);
    	cs+=(UINT16T)((temp&0xff00)>>8);
    	cs+=(UINT16T)((temp&0xff0000)>>16);
    	cs+=(UINT16T)((temp&0xff000000)>>24);
   }

    i=(downloadAddress+downloadFileSize-10)&0xfffffffc;
    j=(downloadAddress+downloadFileSize-10);
    while(i<j)
    {
  	cs+=*((UINT8T *)i++);
   }
    
    checkSum=cs;
#else
    //checkSum was calculated including dnCS. So, dnCS should be subtracted.
    checkSum=checkSum - *((unsigned char *)(downloadAddress+downloadFileSize-8-2))
	     - *( (unsigned char *)(downloadAddress+downloadFileSize-8-1) );	
#endif	  

    dnCS=*((unsigned char *)(downloadAddress+downloadFileSize-8-2))+
	(*( (unsigned char *)(downloadAddress+downloadFileSize-8-1) )<<8);

    if(checkSum!=dnCS)
    {
	Uart_Printf("Checksum Error!!! MEM:%x DN:%x\n",checkSum,dnCS);
	return;
   }

    Uart_Printf("Download O.K.\n\n");
    Uart_TxEmpty(consoleNum);


    if(download_run==1)
    {
        rINTMSK = BIT_ALLMSK;
    	run=(void (*)(void))DOWNLOAD_ADDRESS;
		run();
   }
}

/*********************************************************************************************
* name:		usb_isr_init
* func:		initialize interrupt settings for usb
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void usb_isr_init(void)
{

#if 1
    pISR_USBD =(unsigned)IsrUsbd;
    pISR_DMA2 =(unsigned)IsrDma2;
#else
    pISR_IRQ =(unsigned)IsrUsbd;	
    	//Why doesn't it receive the big file if use this. (???)
    	//It always stops when 327680 bytes are received.
#endif    
    ClearPending(BIT_DMA2);
    ClearPending(BIT_USBD);
    //rINTMSK&=~(BIT_USBD);  
   
    //pISR_FIQ,pISR_IRQ must be initialized
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利电影一区二区三区| 欧美一区二区视频免费观看| 欧美日韩1234| 中文字幕在线观看一区| 奇米在线7777在线精品| 色8久久精品久久久久久蜜| 久久久国产精品不卡| 午夜精品123| 色悠悠久久综合| 欧美激情中文字幕| 久久激五月天综合精品| 欧美久久久久久蜜桃| 亚洲女性喷水在线观看一区| 高清成人在线观看| 亚洲一二三区不卡| 99精品热视频| 亚洲天天做日日做天天谢日日欢 | 欧美电影免费观看高清完整版在线 | 中文字幕在线不卡一区二区三区| 美国一区二区三区在线播放| 欧美久久久影院| 天天色图综合网| 欧美日韩色一区| 亚洲另类中文字| 91黄视频在线| 亚洲黄色av一区| 91成人在线免费观看| 亚洲精品视频一区| 一本色道亚洲精品aⅴ| 亚洲激情图片一区| 欧美性色欧美a在线播放| 最新中文字幕一区二区三区| 99久久久国产精品| 亚洲精品国产高清久久伦理二区| 91在线porny国产在线看| 亚洲欧美aⅴ...| 欧美丝袜丝交足nylons图片| 亚洲国产一区视频| 91精品在线观看入口| 久久精品99国产国产精| 精品久久久网站| 成人av资源网站| 一二三区精品视频| 欧美视频三区在线播放| 日韩电影免费在线看| 精品国产凹凸成av人导航| 国内精品久久久久影院薰衣草| 久久久一区二区三区捆绑**| 成人av影院在线| 亚洲综合色自拍一区| 欧美一区二区三区不卡| 国产综合色产在线精品| 亚洲区小说区图片区qvod| 欧美日韩国产综合久久| 精油按摩中文字幕久久| 国产精品家庭影院| 欧美男生操女生| 国产成人日日夜夜| 亚洲制服丝袜av| 久久精品夜色噜噜亚洲aⅴ| 91亚洲男人天堂| 九九国产精品视频| 亚洲色图.com| www欧美成人18+| 欧美艳星brazzers| 国产乱人伦偷精品视频不卡| 亚洲乱码国产乱码精品精的特点| 日韩亚洲欧美高清| 91香蕉视频污| 激情图片小说一区| 亚洲国产精品一区二区尤物区| 精品99一区二区| 欧美日韩中文一区| 高清国产一区二区| 久久91精品久久久久久秒播| 亚洲麻豆国产自偷在线| 久久这里只精品最新地址| 在线观看www91| 国产激情视频一区二区在线观看| 亚洲成年人影院| 亚洲免费资源在线播放| 久久综合色8888| 欧美日韩一二三区| 91偷拍与自偷拍精品| 国产一区二区网址| 日韩专区欧美专区| 亚洲综合色婷婷| 国产精品视频在线看| 久久久久免费观看| 日韩一级二级三级| 欧美高清一级片在线| 一本在线高清不卡dvd| 波多野结衣亚洲| 丰满放荡岳乱妇91ww| 国产在线精品一区二区夜色 | 亚洲啪啪综合av一区二区三区| 日韩欧美一区电影| 欧美日韩国产片| 欧美亚洲高清一区| 91欧美一区二区| 99精品欧美一区二区蜜桃免费| 国产精品88av| 国产一区二区三区久久悠悠色av| 日韩精品一级中文字幕精品视频免费观看| 亚洲欧美日韩中文播放| 国产精品剧情在线亚洲| 国产亚洲成av人在线观看导航 | 欧美日韩成人综合| 欧美四级电影网| 欧美日韩高清影院| 欧美色倩网站大全免费| 欧美丝袜第三区| 欧美日韩成人综合天天影院| 欧美日韩亚洲不卡| 欧美美女直播网站| 欧美一区二区久久久| 欧美一区二区在线免费观看| 欧美卡1卡2卡| 欧美一级免费观看| 欧美成人精精品一区二区频| 精品国精品国产| 国产日产欧美精品一区二区三区| 国产亚洲欧洲997久久综合| 欧美经典一区二区| 亚洲日本中文字幕区| 亚洲在线视频免费观看| 日韩中文字幕麻豆| 奇米影视在线99精品| 国产精一品亚洲二区在线视频| 懂色av中文一区二区三区| 成人晚上爱看视频| 欧美网站大全在线观看| 91精品国产乱码| 国产欧美日韩亚州综合| 亚洲欧洲色图综合| 午夜精品视频一区| 丰满放荡岳乱妇91ww| 欧美性感一区二区三区| 欧美一区二区福利在线| 久久久99精品久久| 亚洲成人一二三| 国产成人丝袜美腿| 欧美色图天堂网| 久久精品夜色噜噜亚洲aⅴ| 亚洲免费电影在线| 精品一区二区在线看| 91在线一区二区三区| 欧美一区二区日韩一区二区| 国产精品私人自拍| 天天综合天天综合色| 高清不卡一二三区| 欧美日韩日日摸| 国产精品素人视频| 美女一区二区视频| 色综合久久天天| 久久综合丝袜日本网| 亚洲一区影音先锋| 国产一本一道久久香蕉| 欧美伊人久久大香线蕉综合69| 久久九九久久九九| 日本成人超碰在线观看| 99久久精品一区二区| 欧美va在线播放| 亚洲国产日韩av| yourporn久久国产精品| 精品日韩一区二区三区| 亚洲一区二区三区三| 成人一道本在线| 亚洲精品在线电影| 视频一区中文字幕国产| av亚洲产国偷v产偷v自拍| 欧美成人一区二区三区片免费| 一区二区三区影院| 成人精品免费网站| 欧美电视剧在线看免费| 亚洲大片免费看| 色综合久久综合网97色综合| 国产日产亚洲精品系列| 黄色日韩三级电影| 日韩视频一区二区在线观看| 亚洲国产精品一区二区久久| 成人性生交大片| 久久精品视频一区| 蜜桃一区二区三区四区| 7777精品伊人久久久大香线蕉经典版下载 | 视频一区视频二区中文| 91高清视频在线| 亚洲美女淫视频| 色综合中文字幕| 亚洲免费观看高清完整版在线观看 | 欧美一区二区三区在线看| 亚洲成人福利片| 欧美日本视频在线| 亚洲123区在线观看| 色婷婷综合激情| 亚洲一区中文在线| 欧美三级在线播放| 日韩精品成人一区二区三区 | 老司机一区二区| 精品久久国产字幕高潮|