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

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

?? usb_monitor.c

?? USB-TEST是USB通信的例子
?? 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一区二区三区免费野_久草精品视频
国产亚洲一本大道中文在线| 日韩一区二区三区四区| 久久精品99国产国产精| 亚洲电影在线免费观看| 亚洲福中文字幕伊人影院| 亚洲精品高清在线观看| 亚洲最新在线观看| 亚洲二区在线观看| 午夜伦欧美伦电影理论片| 五月天激情综合| 久草中文综合在线| 国产91综合一区在线观看| 国产寡妇亲子伦一区二区| 国产999精品久久久久久绿帽| 国产福利一区在线| av中文字幕不卡| 在线免费观看一区| 欧美一区二区观看视频| 精品国产91乱码一区二区三区 | 久久久久国产一区二区三区四区 | 波多野结衣欧美| 97精品久久久久中文字幕| 欧美自拍偷拍午夜视频| 欧美日韩一区二区三区四区| 日韩三级中文字幕| 国产欧美一区二区精品性| 亚洲天堂2014| 日韩精品1区2区3区| 国产乱子伦视频一区二区三区| 国产成人在线电影| 欧美写真视频网站| 精品国产sm最大网站免费看| 亚洲天堂2014| 免费高清视频精品| 色婷婷综合激情| 日韩欧美国产精品一区| 国产精品视频yy9299一区| 亚洲网友自拍偷拍| 福利电影一区二区三区| 精品视频一区二区不卡| 久久一夜天堂av一区二区三区| 亚洲色图清纯唯美| 久久国产精品99久久久久久老狼| 成人高清在线视频| 欧美一级高清片| 亚洲精品亚洲人成人网在线播放| 国产福利视频一区二区三区| 成人三级在线视频| 91精品国产综合久久久久久久久久 | 国产精品综合视频| 欧美三级电影一区| 中文字幕视频一区| 韩国女主播成人在线观看| 99riav久久精品riav| 日韩精品一区二区三区视频播放| 亚洲精品免费在线观看| 国产91对白在线观看九色| 欧美一区二区在线播放| 一区二区三区四区激情| 成人av网站在线观看| 精品国产伦理网| 日韩精品免费专区| 在线观看日韩毛片| 亚洲欧美日韩在线播放| 国产成人免费av在线| 精品美女一区二区| 免费看日韩精品| 欧美精品一卡二卡| 五月天丁香久久| 在线观看免费成人| 亚洲一卡二卡三卡四卡五卡| 91农村精品一区二区在线| 久久精品视频网| 国产一区二区三区免费看| 精品国产一区二区三区久久久蜜月| 午夜欧美2019年伦理| 欧美日韩高清在线播放| 亚洲一区二区三区四区的| 一本久道久久综合中文字幕| 国产精品国产自产拍高清av王其| 国产成人亚洲综合a∨婷婷图片| 2021中文字幕一区亚洲| 国产成人亚洲综合a∨婷婷| 国产网站一区二区| 成人97人人超碰人人99| 国产精品高潮呻吟久久| 91福利社在线观看| 舔着乳尖日韩一区| 日韩欧美高清在线| 国产精品亚洲一区二区三区在线| 久久久久久久久久久久久女国产乱| 国产一区二区三区免费观看| 亚洲国产高清aⅴ视频| 波多野结衣中文字幕一区二区三区 | 欧美日韩另类一区| 亚洲va欧美va国产va天堂影院| 欧美视频在线播放| 蜜桃久久久久久久| 国产校园另类小说区| www.在线欧美| 无码av中文一区二区三区桃花岛| 91精品国产综合久久精品图片| 久久国产精品99久久久久久老狼| 2020国产精品久久精品美国| 成人h动漫精品一区二区| 亚洲一区在线观看免费| 精品国产一区二区在线观看| 国产a精品视频| 亚洲丶国产丶欧美一区二区三区| 日韩午夜激情视频| 99麻豆久久久国产精品免费| 亚洲国产精品久久人人爱蜜臀 | 国产综合色在线视频区| 国产精品美女一区二区三区| 欧美午夜精品一区二区三区 | 久久久久久久性| 欧美影院一区二区三区| 精品在线亚洲视频| 亚洲乱码中文字幕综合| 精品国产一区二区三区不卡| 91福利视频在线| 国产高清不卡二三区| 无码av中文一区二区三区桃花岛| 国产亚洲欧美中文| 欧美精品一二三区| 91在线观看视频| 国产一区二区三区蝌蚪| 午夜精品123| 专区另类欧美日韩| 日本一区二区三区电影| 日韩一级片在线播放| 在线免费观看日本欧美| caoporn国产精品| 黄网站免费久久| 免费在线看成人av| 亚洲成人av一区| 日韩码欧中文字| 中文字幕第一区综合| 精品久久国产字幕高潮| 欧美精品色一区二区三区| 97久久超碰国产精品| 国产91富婆露脸刺激对白| 国产在线播放一区| 久久国产综合精品| 男人的天堂久久精品| 午夜欧美视频在线观看| 亚洲一二三区不卡| 亚洲伊人伊色伊影伊综合网| 亚洲视频一二三区| 亚洲人123区| 亚洲裸体xxx| 亚洲婷婷在线视频| 亚洲免费观看高清完整版在线观看熊 | 欧美亚洲日本一区| 一本色道久久综合亚洲精品按摩| 成人av资源网站| 99麻豆久久久国产精品免费优播| 波多野结衣中文一区| 99久久久免费精品国产一区二区| 成人在线综合网站| av午夜精品一区二区三区| 成人网页在线观看| eeuss鲁片一区二区三区| 99久久久精品免费观看国产蜜| 97久久超碰国产精品| 91麻豆蜜桃一区二区三区| 91猫先生在线| 欧美精品久久99久久在免费线| 欧美日韩黄视频| 日韩区在线观看| 国产亚洲综合av| 国产精品久久看| 亚洲午夜日本在线观看| 午夜精品福利视频网站 | 精品日产卡一卡二卡麻豆| 精品少妇一区二区三区在线播放| 久久婷婷一区二区三区| 国产精品久久久久久久久快鸭 | 97se亚洲国产综合自在线 | 毛片av一区二区三区| 韩国欧美国产1区| av成人老司机| 欧美日本高清视频在线观看| 久久伊人蜜桃av一区二区| 国产精品久久国产精麻豆99网站| 一区二区三区**美女毛片| 青青草国产精品97视觉盛宴| 丰满亚洲少妇av| 欧美色手机在线观看| 2023国产精华国产精品| 一区二区三区中文免费| 老司机精品视频在线| 97久久人人超碰| 精品久久久久久久久久久久久久久久久 | 国产成人免费av在线| 欧美三级电影在线看| 国产精品毛片无遮挡高清| 日韩不卡在线观看日韩不卡视频| 成人综合在线网站| 日韩精品一区二区三区在线观看|