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

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

?? u241mon.c

?? linux下測試usb端口
?? C
字號:
/****************************************************************
 NAME: u241mon.c
 DESC: u241mon entry point,menu,download
 HISTORY:
 Mar.25.2002:purnnamu: S3C2400X profile.c is ported for S3C2410X.
 Mar.27.2002:purnnamu: DMA is enabled.
 Apr.01.2002:purnnamu: isDownloadReady flag is added.
 Apr.10.2002:purnnamu: - Selecting menu is available in the waiting loop. 
                         So, isDownloadReady flag gets not needed
                       - UART ch.1 can be selected for the console.
 Aug.20.2002:purnnamu: revision number change 0.2 -> R1.1       
 Sep.03.2002:purnnamu: To remove the power noise in the USB signal, the unused CLKOUT0,1 is disabled.
 ****************************************************************/

#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"

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


#include "2410main.h"

void Isr_Init(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);
void HaltDabort(void);
void Lcd_Off(void);
void WaitDownload(void);
void Menu(void);

//#define DOWNLOAD_ADDRESS _RAM_STARTADDRESS
volatile U32 downloadAddress;

void (*restart)(void)=(void (*)(void))0x0;
void (*run)(void);


volatile unsigned char *downPt;
volatile U32 downloadFileSize;
volatile U16 checkSum;
volatile unsigned int err=0;
volatile U32 totalDmaCount;

volatile int isUsbdSetConfiguration;

int download_run=0;
U32 tempDownloadAddress;
int menuUsed=1;

extern char Image$$RW$$Limit[];
U32 *pMagicNum=(U32 *)Image$$RW$$Limit;
int consoleNum;
void DownloadRamdiskAndLinux(void);

extern void Lcd_Test_Ts(void);
void Linux_Start(void);

void Main(void)
{
    char *mode;
    int i;
    U8 key;
   

     ChangeClockDivider(1,1);    // 1:2:4   
     // rCLKDIVN=0x4;    //  1:4:4
    //ChangeMPllValue(82,2,1);     //FCLK=135.0Mhz     
    ChangeMPllValue(82,1,1);       //FCLK=180.0Mhz    
    
    Port_Init();
    
    rGPHCON = rGPHCON&~(0xf<<18)|(0x5<<18);   
    //To enhance the USB signal quality.
    //CLKOUT 0,1=OUTPUT to reduce the power consumption.
    
    Isr_Init();
    
    	
    Uart_Init(0,115200);
    Uart_Select(0);

    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.12 05/20/03  *\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)
    		Menu();
    	//else
    	//Lcd_Test_Ts();	     		
    	//WaitDownload();    
    }

}



void Menu(void)
{
    int i;
    U8 key;
    U8 ch;
    menuUsed=1;
    
    //Lcd_Test_Ts();
    
    while(1)
    {
        Uart_Printf("\n*************** Select Menu ******************");
	    Uart_Printf("\n*                                            *");
        Uart_Printf("\n* [0] Download Linux and Ramdisk and Run     *");
        //Uart_Printf("\n* [1] Download data Only                     *");
        //Uart_Printf("\n* [2] Test SDRAM                             *");
        //Uart_Printf("\n* [3] Change The Console UART Ch             *");
       // Uart_Printf("\n* [4] Test Other Devices                     *");
        Uart_Printf("\n* [1] Start Linux Operate System             *");
	Uart_Printf("\n*                                            *");
	Uart_Printf("\n**********************************************\n");
        key=Uart_Getch();
        
        switch(key)
        {
        case '0':
            Uart_Printf("\nDownload&Run is selected.\n\n");
            DownloadRamdiskAndLinux();
            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");        
	    //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;
        case '4':
            Uart_Printf("\nTest Other Devices!\n");
            //MMU_DisableICache();
            //rINTMSK=BIT_ALLMSK;	  // All interrupt is masked.
	  // OtherMain();
	   //MMU_EnableICache();
	   break;*/
	   case '1':
            Uart_Printf("\nLinux OS is selected.\n");        
	        Linux_Start();
	        break;

        default:
            break;
	}	
    }	    

}



void WaitDownload(void)
{
    U32 i;
    U32 j;
    U16 cs;
    U32 temp;
    U16 dnCS;
    int first=1;
    float time;
    U8 tempMem[16];
    U8 key;
    
    checkSum=0;
    downloadAddress=(U32)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)
	{
	    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-(U32)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(((U32)downPt-downloadAddress)<(downloadFileSize-8))
    {
	if( ((U32)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=*((U32 *)i);
    	i+=4;
    	cs+=(U16)(temp&0xff);
    	cs+=(U16)((temp&0xff00)>>8);
    	cs+=(U16)((temp&0xff0000)>>16);
    	cs+=(U16)((temp&0xff000000)>>24);
    }

    i=(downloadAddress+downloadFileSize-10)&0xfffffffc;
    j=(downloadAddress+downloadFileSize-10);
    while(i<j)
    {
  	cs+=*((U8 *)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))downloadAddress;
	run();
    }
}




void Isr_Init(void)
{
    pISR_UNDEF=(unsigned)HaltUndef;
    pISR_SWI  =(unsigned)HaltSwi;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;
    rINTMOD=0x0;	  // All=IRQ mode
    rINTMSK=BIT_ALLMSK;	  // All 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
}


void HaltUndef(void)
{
    Uart_Printf("Undefined instruction exception!!!\n");
    while(1);
}

void HaltSwi(void)
{
    Uart_Printf("SWI exception!!!\n");
    while(1);
}

void HaltPabort(void)
{
    Uart_Printf("Pabort exception!!!\n");
    while(1);
}

void HaltDabort(void)
{
    Uart_Printf("Dabort exception!!!\n");
    while(1);
}



void DownloadRamdiskAndLinux(void)

{
       Uart_Printf("\n\nRun linux from SDRAM,Please first download ramdisk to 0x30800000,\n");
       Uart_Printf("and then download linux image to 0x30f00000!\n\n");
       Uart_Printf("**First downlaod ramdiks to 0x30800000...:\n\n");
       tempDownloadAddress=0x30800000;
       download_run=0;
       WaitDownload();
       Uart_Printf("**Ramdiks has been downloaded!!!!!\n\n\n\n");
       Uart_Printf("**Now downlaod Linux iamge to 0x30f00000 and run...:\n\n");
       tempDownloadAddress=0x30f00000;
       download_run=1;
       WaitDownload();
       return;
}

typedef (*FUNC)(void);

void Linux_Start(void)
{
 	
    unsigned int *org,*org1;
    unsigned int *dst,*dst1;
    unsigned int len,len1;
    unsigned int i;

    FUNC    fp;
    
  org1 = (unsigned int *)0x0100000;
  dst1 = (unsigned int *)0x030800000;
  
  org = (unsigned int *)0x060000;
  dst = (unsigned int *)0x030f00000;
  
  fp  = (FUNC)dst;
  
  /* BOOT LOADER BIN SIZE(IN BYTES) / 4 */
  /* 64K BYTES */
  len = (0x96000)>>2;

  for (i=0;i<len;i++)
  	*dst++ = *org++;
  
  
  len1 = (0x2cccd0)>>2;

  for (i=0;i<len1;i++)
  	*dst1++ = *org1++;
  /* Go there for execution */
 
  (*fp)();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情男女视频| 久久嫩草精品久久久精品一| 国产精品一区专区| 精品一区二区三区视频在线观看| 午夜电影一区二区| 五月婷婷综合网| 天使萌一区二区三区免费观看| 亚洲地区一二三色| 日韩精品一二三| 裸体歌舞表演一区二区| 国内精品写真在线观看| 国产乱一区二区| 成人手机在线视频| av中文字幕在线不卡| 91精品办公室少妇高潮对白| 色播五月激情综合网| 欧美日韩一区二区三区高清| 91精品国产综合久久久久久| wwwwww.欧美系列| 国产亚洲精品aa午夜观看| 国产精品拍天天在线| 一区二区欧美国产| 奇米888四色在线精品| 韩国av一区二区| 99视频精品在线| 欧美一区二区啪啪| 久久综合视频网| 中文字幕一区免费在线观看| 亚洲观看高清完整版在线观看| 日韩精品免费视频人成| 国产aⅴ精品一区二区三区色成熟| jlzzjlzz亚洲女人18| 欧美精品aⅴ在线视频| 久久亚洲二区三区| 亚洲码国产岛国毛片在线| 日韩在线一二三区| 成人av电影在线观看| 欧美久久久久久蜜桃| 久久九九99视频| 亚洲电影中文字幕在线观看| 国产精品亚洲成人| 欧美日韩的一区二区| 亚洲国产精品激情在线观看| 五月天中文字幕一区二区| 国产成人精品免费在线| 欧美精品日韩综合在线| 亚洲特黄一级片| 国内精品久久久久影院薰衣草| 欧美亚洲高清一区二区三区不卡| 久久久蜜桃精品| 日韩av网站在线观看| 色婷婷久久综合| 国产女同互慰高潮91漫画| 热久久免费视频| 在线观看av一区| 国产精品成人网| 韩国精品一区二区| 日韩欧美二区三区| 亚洲高清不卡在线观看| 91丨porny丨蝌蚪视频| 久久网站最新地址| 久久福利视频一区二区| 欧美精品久久99| 亚洲国产欧美日韩另类综合| jlzzjlzz欧美大全| 国产精品久久久久久久久久久免费看 | 一区二区三区国产豹纹内裤在线| 国产高清久久久| 欧美不卡一区二区| 日韩成人伦理电影在线观看| 在线观看欧美日本| 悠悠色在线精品| 日本韩国欧美在线| 亚洲摸摸操操av| 色婷婷久久久久swag精品| 日韩伦理av电影| 91美女福利视频| 一区二区三区.www| 欧美日韩三级一区| 日韩电影在线观看一区| 欧美精品 国产精品| 日本aⅴ亚洲精品中文乱码| 欧美肥大bbwbbw高潮| 琪琪一区二区三区| 欧美成人综合网站| 国产传媒欧美日韩成人| 中文一区一区三区高中清不卡| 国产iv一区二区三区| 日韩毛片精品高清免费| 欧洲一区二区三区在线| 婷婷开心激情综合| 精品国产乱码久久久久久久久| 国产伦精品一区二区三区免费| 久久久高清一区二区三区| jvid福利写真一区二区三区| 一区二区三区四区在线播放 | 亚洲午夜激情av| 欧美日韩免费电影| 久久99国产精品麻豆| 国产午夜亚洲精品不卡| 一本一道久久a久久精品| 亚洲国产一区二区a毛片| 精品理论电影在线| 成人免费毛片a| 午夜精品久久久久久久久久久 | 夫妻av一区二区| 成人免费视频在线观看| 欧美日韩视频在线第一区| 久久不见久久见免费视频7| 国产欧美视频一区二区| 欧美伊人精品成人久久综合97| 人人精品人人爱| 综合av第一页| 91精品国产免费| 97精品电影院| 裸体一区二区三区| 亚洲婷婷国产精品电影人久久| 91麻豆精品国产综合久久久久久| 国产精品99久久久| 五月天亚洲婷婷| 亚洲成人手机在线| 久久久久久久久蜜桃| 欧美视频完全免费看| 成人亚洲一区二区一| 秋霞午夜鲁丝一区二区老狼| **性色生活片久久毛片| 日韩精品最新网址| 精品视频一区三区九区| av资源网一区| 国产成人免费视频| 蜜臀av性久久久久av蜜臀妖精| 亚洲免费在线视频一区 二区| 精品国产乱码久久久久久牛牛| 欧美日韩一区成人| 91色|porny| 成人午夜电影小说| 国产一区二区伦理片| 石原莉奈在线亚洲三区| 亚洲综合无码一区二区| 国产精品国产精品国产专区不蜜 | av一区二区不卡| 国产一区二区在线免费观看| 午夜精品一区在线观看| 亚洲人快播电影网| 国产精品高清亚洲| 国产欧美一二三区| 中文字幕高清不卡| 国产欧美日韩在线视频| 国产亚洲精品福利| 国产日产欧美一区二区视频| 久久久久久久综合日本| 26uuu亚洲| 亚洲免费在线播放| 亚洲视频一二区| 自拍偷自拍亚洲精品播放| 1000部国产精品成人观看| 国产精品国产馆在线真实露脸| 国产亚洲欧美在线| 国产精品色哟哟网站| 国产精品久久久久久妇女6080| 国产精品久久久久一区二区三区共| 国产亲近乱来精品视频| 国产精品久久久久一区二区三区| 国产精品初高中害羞小美女文| 中文字幕第一区| 最新国产の精品合集bt伙计| 一区二区三区欧美久久| 亚洲图片欧美综合| 麻豆国产91在线播放| 国产一二三精品| 99久久国产综合精品女不卡| 色哟哟精品一区| 欧美精品三级在线观看| 日韩精品一区二区三区老鸭窝| 欧美精品一区二区三区蜜臀| 中文字幕av一区二区三区高| 亚洲欧美成人一区二区三区| 香蕉成人伊视频在线观看| 人人爽香蕉精品| 成人开心网精品视频| 日本韩国视频一区二区| 91精品国产黑色紧身裤美女| 久久久久久一级片| 一区二区久久久久久| 日本不卡一二三区黄网| 国产91精品欧美| 欧美天堂亚洲电影院在线播放| 欧美一区二区三区四区五区| 欧美国产精品劲爆| 五月激情六月综合| 国产99久久精品| 欧美高清一级片在线| 日本一区二区动态图| 香蕉加勒比综合久久| 成人黄色大片在线观看| 日韩一区二区三区三四区视频在线观看| 国产亚洲欧美激情| 免费在线观看成人| 色婷婷亚洲综合| 国产嫩草影院久久久久|