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

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

?? usb_test.c

?? 英蓓特2410開(kāi)發(fā)箱的軟件包
?? C
字號(hào):
/*********************************************************************************************
* File:		u241mon.c
* Author:	Embest
* Desc:		u241mon entry point,menu,download
* History:	
*			Y.J.Guo, April 28, 2005
*				Modifying and reusing  of S3C2410X u24xmon
*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/
/*                                     include files	                                    */
/*------------------------------------------------------------------------------------------*/
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "2410lib.h"
#include "2410slib.h"
#include "mmu.h"
#include "profile.h"

#include "usbmain.h"
#include "usbout.h"
#include "usblib.h"
#include "2410usb.h"

/*------------------------------------------------------------------------------------------*/
/*                                     functions declare                                    */
/*------------------------------------------------------------------------------------------*/
void Isr_Init(void);
extern void debug_undef(void);
extern void debug_swi(void);
extern void debug_abort_d(void);
extern void debug_abort_d(void);
void Lcd_Off(void);
void WaitDownload(void);
void Menu(void);
//void (*restart)(void)=(void (*)(void))0x0;
void (*run)(void);

/*------------------------------------------------------------------------------------------*/
/*                                     global variablese                                    */
/*------------------------------------------------------------------------------------------*/
//#define DOWNLOAD_ADDRESS _RAM_STARTADDRESS
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;
UINT32T tempDownloadAddress;
UINT32T test_ram_start;
UINT32T test_ram_end;
int menuUsed=0;

extern char Image_RW_Limit[];
UINT32T *pMagicNum=(UINT32T *)Image_RW_Limit;
int consoleNum;

/*********************************************************************************************
* name:		MemoryTest
* func:		Test Ram 
* para:		none
* ret:		none
* modify:
* comment:	comparing the data writen to RAM and the data read from RAM
*********************************************************************************************/
void MemoryTest(void)
{
    int i;
    UINT32T data;
    int memError=0;
    UINT32T *pt;
    
    // memory test
	uart_printf("Enter a start address of ram to test(0x3...):"); 
	test_ram_start = uart_getintnum(); 
	uart_printf("Enter a end address of ram to test(0x3...):");
	test_ram_end = uart_getintnum();     
	uart_printf("Memory Test(%xh-%xh):WR",test_ram_start,test_ram_end);

    pt=(UINT32T *)(test_ram_start);
    while((UINT32T)pt<(test_ram_end))
    {
	*pt=(UINT32T)pt;
	pt++;
   }

    uart_printf("\b\bRD");
    pt=(UINT32T *)(test_ram_start);
	
    while((UINT32T)pt<(test_ram_end))
    {
	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_test
* func:		usb monitor entry
* para:		none
* ret:		none
* modify:
* comment:	
*********************************************************************************************/
void usb_test(void)
{
    char *mode;
    int i;
    UINT8T key;
 
    rGPHCON = rGPHCON&~(0xf<<18)|(0x5<<18);   
    //To enhance the USB signal quality.
    //CLKOUT 0,1=OUTPUT to reduce the power consumption.
    
    Isr_Init();
    if(*pMagicNum!=0x12345678)
    	consoleNum=0;
    else
    	consoleNum=1;
    	
    uart_init(0,115200,UART0);
    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;

    UsbdMain();
    delay(0);  //calibrate delay()
    
    pISR_SWI=(_ISR_STARTADDRESS+0xf0);    //for pSOS


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

    uart_printf("\n");
    uart_printf("+---------------------------------------------+\n");
    uart_printf("| S3C2410X USB Downloader ver R1.11 APR/29/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=0; //The default menu is the Download mode.

	while(1)
	{
    	if(menuUsed==1) Menu();
    	WaitDownload();
#ifdef BOARDTEST
		break;
#endif
	}
	uart_printf(" end.\n"); 
}


/*********************************************************************************************
* name:		Menu
* func:		usb monitor Menu
* para:		none
* ret:		none
* modify:
* comment:	
*********************************************************************************************/
void Menu(void)
{
    int i;
    UINT8T key;
    menuUsed=1;
	g_nKeyPress = 1;
	while(g_nKeyPress==1)						// only for board test to exit
	{
	    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");
        
		while(g_nKeyPress==1)
		{
			if(key = uart_getkey()) break;
		}
        
        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. please wait a little long time.\n");
   
		    MemoryTest();
		    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:		WaitDownload
* func:		usb downloader
* para:		none
* ret:		none
* modify:
* comment:	
*********************************************************************************************/
void WaitDownload(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 1
    MMU_DisableICache(); 
        //For multi-ICE. 
        //If ICache is not turned-off, debugging is started with ICache-on.
#endif

    /*******************************/
    /*    Test program download    */
    /*******************************/

    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;
		}

		key=uart_getkey();
		if(key!=0)
		{
			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(downloadFileSize<1024*4)
	for (i=0;i<downloadFileSize;i++)
		uart_printf("%c",*(unsigned char *)(downloadAddress+i));
	
    if(checkSum!=dnCS)
    {
		uart_printf(" Checksum Error!!! MEM:%x DN:%x\n",checkSum,dnCS);
		return;
	}

    uart_printf("\n Download O.K.\n\n");
    uart_txempty(consoleNum);
	
    if(download_run==1)
	{
        rINTMSK = BIT_ALLMSK;
    	run=(void (*)(void))downloadAddress;
		run();
	}
}

/*********************************************************************************************
* name:		Isr_Init
* func:		Initialization of Isr
* para:		none
* ret:		none
* modify:
* comment:	
*********************************************************************************************/
void Isr_Init(void)
{
    pISR_UNDEF=(unsigned)debug_undef;
    pISR_SWI  =(unsigned)debug_swi;
    pISR_PABORT=(unsigned)debug_abort_d;
    pISR_DABORT=(unsigned)debug_abort_d;
    rINTMOD=0x0;                                                // All=IRQ mode
    rSRCPND    = rSRCPND;                 // clear all interrupt
    rINTPND    = rINTPND;                 // clear all interrupt
    rINTMSK    = BIT_ALLMSK;              // All interrupt is masked.
    rINTSUBMSK = BIT_SUB_ALLMSK;          // All sub-interrupt is masked.

    //pISR_URXD0=(unsigned)Uart0_RxInt;	
    //rINTMSK=~(BIT_URXD0);   //enable UART0 RX Default value=0xffffffff

#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一区二区三区免费野_久草精品视频
在线精品视频一区二区| 中文字幕av一区二区三区免费看| 欧美午夜精品理论片a级按摩| 99re热视频这里只精品| 国v精品久久久网| 成人污视频在线观看| 国产成人h网站| 成人国产精品免费| 成人av电影在线观看| eeuss影院一区二区三区| 99久久精品国产一区| 欧洲激情一区二区| 欧美视频一区二区三区四区| 欧美伊人精品成人久久综合97| 欧美日韩久久久| 91麻豆精品国产91久久久资源速度| 欧美精品 日韩| 日韩欧美另类在线| 国产日韩视频一区二区三区| 欧美激情在线看| 亚洲另类在线制服丝袜| 香蕉成人啪国产精品视频综合网 | 中文字幕精品一区| 国产精品国产自产拍高清av | 亚洲国产日韩av| 午夜欧美电影在线观看| 久久99热国产| 99久久国产免费看| 欧美天堂亚洲电影院在线播放| 欧美日本在线播放| 欧美精品一区二区高清在线观看| 国产日产欧产精品推荐色| 成人欧美一区二区三区小说| 亚洲午夜久久久久久久久电影网 | 久草热8精品视频在线观看| 国产精品一区二区不卡| 99久久99久久精品免费观看| 亚洲精品日韩一| 中文字幕精品三区| 亚洲高清视频中文字幕| 麻豆一区二区99久久久久| 成人开心网精品视频| 欧美天堂一区二区三区| 精品精品国产高清a毛片牛牛 | 中文在线免费一区三区高中清不卡| 国产精品欧美一级免费| 亚洲电影中文字幕在线观看| 国内精品伊人久久久久av影院| 91在线免费看| 日韩精品一区二区三区四区 | 国产精品18久久久久久久久久久久 | 成人一区二区在线观看| 欧美日韩在线播放一区| 国产婷婷精品av在线| 亚洲午夜视频在线| 春色校园综合激情亚洲| 欧美一区二区三区性视频| 国产精品国产三级国产有无不卡 | 97久久精品人人澡人人爽| 91精品国产综合久久久久久久 | 国产欧美1区2区3区| 天堂在线一区二区| 91亚洲午夜精品久久久久久| 91精品国产福利在线观看 | 国产在线麻豆精品观看| 色成年激情久久综合| 久久久国产精品麻豆| 午夜精品久久久久久| av在线一区二区三区| www日韩大片| 视频一区视频二区中文| 91蝌蚪porny成人天涯| 久久精品综合网| 男女男精品网站| 欧美日韩亚洲综合| 国产精品蜜臀av| 国产成人一区在线| 欧美mv日韩mv国产网站app| 亚洲国产一二三| 在线视频国内自拍亚洲视频| 国产精品久久久久久久久久免费看 | 欧美日本一道本在线视频| 中文字幕一区三区| 成人在线综合网| 欧美精品一区二区三区蜜臀| 青青草国产成人99久久| 欧美日韩一区二区在线视频| 亚洲精品国产视频| 成a人片亚洲日本久久| 色偷偷成人一区二区三区91| 精品视频1区2区3区| 亚洲免费伊人电影| 99久久婷婷国产精品综合| 国产日产欧美一区二区视频| 久久激情五月婷婷| 日韩免费高清视频| 蜜乳av一区二区| 欧美一区二区三区视频在线观看 | 成人综合婷婷国产精品久久蜜臀| xnxx国产精品| 国产激情一区二区三区| 国产偷国产偷精品高清尤物| 国产自产高清不卡| 久久综合九色综合欧美98 | 欧美大片拔萝卜| 欧美日韩国产天堂| 亚洲午夜三级在线| 欧美日韩电影在线播放| 亚洲国产综合视频在线观看| 91丨九色丨黑人外教| 亚洲欧美日韩电影| wwwwww.欧美系列| 色哟哟欧美精品| 亚洲高清视频在线| 91色视频在线| 麻豆成人综合网| 国产精品亲子伦对白| 欧美日韩一区二区在线观看| 国产一区欧美一区| 怡红院av一区二区三区| 精品国产1区二区| 91亚洲精品一区二区乱码| 麻豆精品视频在线观看免费| 国产精品理论在线观看| 91麻豆精品国产91久久久使用方法 | 欧美在线免费观看亚洲| 国产一区二区网址| 亚洲综合一区在线| 久久精品亚洲乱码伦伦中文| 欧美日韩在线直播| 高清久久久久久| 美女视频黄久久| 亚洲精品videosex极品| 久久久久久久久久美女| 欧美久久久一区| 99re6这里只有精品视频在线观看| 日本成人在线看| 亚洲精品视频自拍| 欧美精品一区二区三区蜜桃| 欧美在线观看视频一区二区| 国产毛片一区二区| 日韩国产精品91| 一区二区视频在线| 国产欧美精品一区二区三区四区| 在线91免费看| 在线免费av一区| 成人性生交大片免费看中文| 日本亚洲最大的色成网站www| 亚洲视频资源在线| 欧美精彩视频一区二区三区| 宅男噜噜噜66一区二区66| 色成人在线视频| 99精品黄色片免费大全| 国产精品自在在线| 老司机精品视频线观看86| 亚洲成av人**亚洲成av**| 中文字幕制服丝袜一区二区三区| 在线视频亚洲一区| 免费人成网站在线观看欧美高清| 亚洲人成网站在线| 国产欧美日韩在线| 精品国产sm最大网站免费看| 777欧美精品| 欧美久久久久久久久久| 欧美视频一区二区三区在线观看| 91蜜桃在线观看| 不卡的av中国片| 成人午夜视频在线| 国产精品一级片| 国产一区二区三区高清播放| 全部av―极品视觉盛宴亚洲| 午夜在线成人av| 午夜久久久影院| 亚洲高清免费观看| 午夜欧美在线一二页| 亚洲福利视频三区| 一区二区三区在线不卡| 亚洲黄色性网站| 一区二区三区四区在线播放| 椎名由奈av一区二区三区| 中文字幕一区在线| 日韩久久一区二区| 亚洲精品一卡二卡| 亚洲午夜电影网| 日韩高清不卡一区二区| 青青草97国产精品免费观看| 免费高清在线视频一区·| 久国产精品韩国三级视频| 精品一区二区三区久久| 激情成人综合网| 国产成人免费在线观看不卡| 成人丝袜高跟foot| 波多野结衣亚洲一区| 99久久精品一区| 欧美少妇bbb| 这里是久久伊人| 久久亚洲精精品中文字幕早川悠里| 久久综合视频网| 国产精品久久久久毛片软件| 亚洲欧美激情在线|