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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb_monitor.c

?? S3C2410處理器集成的USB DEVICE設(shè)備控制驅(qū)動(dòng)程序
?? C
字號(hào):
/*********************************************************************************************
* 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
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
偷拍日韩校园综合在线| 美女在线视频一区| 久久毛片高清国产| 欧美日韩精品一区二区| 成人国产视频在线观看| 国产米奇在线777精品观看| 丝袜脚交一区二区| 亚洲一级二级在线| 亚洲精品国久久99热| 成人免费在线视频观看| 国产精品美女视频| 欧美日韩在线亚洲一区蜜芽| 国产91精品久久久久久久网曝门 | 亚洲自拍与偷拍| 亚洲男女毛片无遮挡| 亚洲特级片在线| 成人欧美一区二区三区1314| 成人欧美一区二区三区黑人麻豆| 国产精品私人影院| ...av二区三区久久精品| 中文字幕在线观看不卡| 国产精品盗摄一区二区三区| 国产精品久99| 亚洲电影中文字幕在线观看| 爽好多水快深点欧美视频| 免费在线观看成人| 国产麻豆一精品一av一免费| 国产精品99久久久久久久vr| 成人黄色综合网站| 欧美亚洲高清一区| 精品国产乱码久久久久久蜜臀 | 激情五月婷婷综合网| 粉嫩aⅴ一区二区三区四区五区| 99久久久久久| 国产精品灌醉下药二区| 一区二区三区四区在线免费观看 | 免费成人在线网站| 国产成人综合在线观看| 日本高清视频一区二区| 欧美日韩激情一区| 欧美日韩黄色一区二区| 日韩一级完整毛片| 亚洲精品第1页| 国产九色精品成人porny | 欧美激情一区在线| 婷婷开心激情综合| 99精品欧美一区二区三区小说 | 欧美午夜寂寞影院| 国产精品久久久久久久久果冻传媒 | 日韩电影在线免费| 日本久久精品电影| 国产欧美一区二区精品性色| 色综合色狠狠综合色| 国产欧美日本一区视频| 韩国女主播成人在线观看| 欧美日韩亚洲国产综合| 亚洲精品成人少妇| 成人动漫一区二区三区| 久久久另类综合| 麻豆精品久久久| 日韩精品中文字幕在线一区| 亚洲福中文字幕伊人影院| 欧美视频一区在线观看| 国产麻豆视频精品| 久久综合色综合88| 激情久久久久久久久久久久久久久久| 欧美日韩一区二区三区在线看| 亚洲欧美精品午睡沙发| 91久久国产综合久久| 亚洲午夜精品17c| 欧美男女性生活在线直播观看| 亚洲视频图片小说| 99免费精品视频| 亚洲精品一区在线观看| 国产成人免费9x9x人网站视频| 精品成a人在线观看| 成人黄页在线观看| 午夜一区二区三区视频| 日韩一区二区三区免费观看| 极品尤物av久久免费看| 中文字幕第一区二区| 欧美三级一区二区| 久久激五月天综合精品| 国产精品久久综合| 欧美日韩国产一级| 国产精品一区二区黑丝| 亚洲欧美精品午睡沙发| 欧美哺乳videos| 91天堂素人约啪| 九九视频精品免费| 亚洲一区二区三区四区五区黄| 精品人在线二区三区| 91麻豆国产在线观看| 久久精品72免费观看| 一区二区不卡在线视频 午夜欧美不卡在| 欧美日韩精品三区| 色婷婷精品大在线视频| 国产精品一区二区久久不卡 | 风间由美性色一区二区三区| 亚洲一区二区在线观看视频| 精品国产露脸精彩对白| 欧美三电影在线| 日韩视频免费观看高清完整版在线观看 | 粉嫩aⅴ一区二区三区四区| 日韩和的一区二区| 亚洲与欧洲av电影| 亚洲三级电影网站| 日韩视频在线一区二区| 丰满亚洲少妇av| 久久国产尿小便嘘嘘尿| 蜜桃av噜噜一区二区三区小说| 亚洲一区二区三区四区在线| 一区精品在线播放| 久久久午夜电影| 欧美电影精品一区二区| 欧美老肥妇做.爰bbww视频| 91在线看国产| 一本一本大道香蕉久在线精品| 成人a免费在线看| zzijzzij亚洲日本少妇熟睡| 国产乱人伦精品一区二区在线观看 | 国产精品青草综合久久久久99| 亚洲123区在线观看| 一区二区三区国产精品| 一区二区三区日韩精品视频| 亚洲精品视频观看| 亚洲最大成人综合| 丝袜a∨在线一区二区三区不卡| 一区二区久久久久| 亚洲日本护士毛茸茸| 一区二区三区四区五区视频在线观看| 玉足女爽爽91| 亚洲国产一区视频| 精品一区二区成人精品| 国产成人综合在线| 91国产丝袜在线播放| 3atv一区二区三区| 国产午夜精品在线观看| 精品一区二区三区免费毛片爱| 免费高清成人在线| 99视频超级精品| 精品久久人人做人人爱| 国产精品三级av| 亚洲国产成人精品视频| 国产曰批免费观看久久久| 一本大道久久a久久精二百| 日韩一区二区在线观看| 亚洲视频香蕉人妖| 久久国产精品99久久久久久老狼 | 国产成人在线视频网站| 一本色道亚洲精品aⅴ| 欧美一区二区性放荡片| 国产精品家庭影院| 老司机一区二区| 91亚洲国产成人精品一区二区三| 欧美电影一区二区三区| 日韩一区欧美一区| 亚洲h精品动漫在线观看| 成人小视频免费观看| 欧美一区二区三区免费大片| 欧美v国产在线一区二区三区| 国产精品沙发午睡系列990531| 美女视频免费一区| 日本久久电影网| 自拍av一区二区三区| 国产一区二区剧情av在线| 欧美久久婷婷综合色| 7777精品伊人久久久大香线蕉的 | 26uuu精品一区二区在线观看| 亚洲综合免费观看高清完整版在线 | 视频一区二区三区在线| 欧美日本一区二区三区| 肉肉av福利一精品导航| 欧美综合一区二区三区| 亚洲成人免费电影| 精品美女一区二区三区| 极品销魂美女一区二区三区| 久久综合久久综合久久| 国产中文字幕精品| 国产精品少妇自拍| 欧美日韩一级黄| 日韩av网站在线观看| 精品成人佐山爱一区二区| 粉嫩aⅴ一区二区三区四区| 久久99精品国产麻豆婷婷| 中文字幕精品一区二区精品绿巨人| 不卡av在线免费观看| 亚洲欧洲综合另类在线| 色噜噜狠狠色综合欧洲selulu| 丝袜亚洲另类欧美| 国产精品免费人成网站| 欧美少妇bbb| 国产高清亚洲一区| 亚洲精品视频观看| 欧美大片日本大片免费观看| 色成年激情久久综合| 日本不卡视频在线观看| 国产精品国产三级国产普通话三级| 91福利精品视频| 韩国欧美国产一区|