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

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

?? usbout.c

?? 三星S3C2460 USB DEVICE /USB HOST 監(jiān)控代碼
?? C
字號:
/****************************************************************
 NAME: usbout.c
 DESC: USB bulk-OUT operation related functions
 HISTORY:
 
 ****************************************************************/

#include <stdio.h> 
#include <string.h>

#include "option.h"
#include "2460addr.h"
#include "2460lib.h"

#include "2460usb.h"
#include "usbmain.h"
#include "usb.h"
#include "usblib.h"
#include "usbsetup.h"
#include "usbout.h"
#include "2460MON.h"



static void PrintEpoPkt(unsigned char *pt,int cnt);
static void RdPktEp3_CheckSum(unsigned char *buf,int num);



// ===================================================================
// All following commands will operate in case 
// - out_csr3 is valid.
// ===================================================================

 

#define CLR_EP3_OUT_PKT_READY() rOUT_CSR1_REG= ( out_csr3 &(~ EPO_WR_BITS)\
					&(~EPO_OUT_PKT_READY) ) 
#define SET_EP3_SEND_STALL()	rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)\
					| EPO_SEND_STALL) )
#define CLR_EP3_SENT_STALL()	rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)\
					&(~EPO_SENT_STALL) )
#define FLUSH_EP3_FIFO() 	rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)\
					|EPO_FIFO_FLUSH) )

// ***************************
// *** VERY IMPORTANT NOTE ***
// ***************************
// Prepare for the packit size constraint!!!

// EP3 = OUT end point. 

unsigned char ep3Buf[EP3_PKT_SIZE];
static unsigned char tempBuf[64+1];

void Ep3Handler(void)
{
    unsigned char out_csr3;
    int fifoCnt;
    rINDEX_REG=3;

    out_csr3=rOUT_CSR1_REG;
    
    DbgPrintf("<3:%x]",out_csr3);

    if(out_csr3 & EPO_OUT_PKT_READY)
    {   
	fifoCnt=rOUT_FIFO_CNT1_REG; 
#if 0
	RdPktEp3(ep3Buf,fifoCnt);
	PrintEpoPkt(ep3Buf,fifoCnt);
#else

	if(downloadFileSize==0)
	{
   	    RdPktEp3((unsigned char *)downPt,8); 	
   	    
   	    if(download_run==0)
   	    {
			downloadAddress=tempDownloadAddress;
	    }
	    else
	    {
	    	downloadAddress=
	    		*((unsigned char *)(downPt+0))+
				(*((unsigned char *)(downPt+1))<<8)+
				(*((unsigned char *)(downPt+2))<<16)+
				(*((unsigned char *)(downPt+3))<<24);
//				SRAMKey_Run=downloadAddress;
	    }
	    downloadFileSize=
	    	*((unsigned char *)(downPt+4))+
			(*((unsigned char *)(downPt+5))<<8)+
			(*((unsigned char *)(downPt+6))<<16)+
			(*((unsigned char *)(downPt+7))<<24);
	    checkSum=0;
	    downPt=(unsigned char *)downloadAddress;

  	    RdPktEp3_CheckSum((unsigned char *)downPt,fifoCnt-8); //The first 8-bytes are deleted.	    
  	    downPt+=fifoCnt-8;  
  	    
  	#if USBDMA
     	    //CLR_EP3_OUT_PKT_READY() is not executed. 
     	    //So, USBD may generate NAK until DMA2 is configured for USB_EP3;
     	rINTMSK|=BIT_USB; //for debug
	    rINTSUBMSK|=BIT_SUB_USBD;

      	return;	
  	#endif	
	}
	else
	{
	#if USBDMA    	
	    printf("<ERROR>");
	#endif    
	    RdPktEp3_CheckSum((unsigned char *)downPt,fifoCnt); 	    
	    downPt+=fifoCnt;  //fifoCnt=64
	}
#endif
   	CLR_EP3_OUT_PKT_READY();

	// sw workaround for fixing lost last interrupt : 02.25,'04
	#if 1
	if(((rOUT_CSR1_REG&0x1)==1) && ((rEP_INT_REG & 0x8)==0))
  	{
  		fifoCnt=rOUT_FIFO_CNT1_REG; 
		RdPktEp3_CheckSum((unsigned char *)downPt,fifoCnt); 	    
	    downPt+=fifoCnt;  //fifoCnt=64
	    CLR_EP3_OUT_PKT_READY();
	}
	#endif
	return;
    }

    
    //I think that EPO_SENT_STALL will not be set to 1.
    if(out_csr3 & EPO_SENT_STALL)
    {   
	   	DbgPrintf("[STALL]");
	   	CLR_EP3_SENT_STALL();
	   	return;
    }	
}



void PrintEpoPkt(unsigned char *pt,int cnt)
{
    int i;
    DbgPrintf("[BOUT:%d:",cnt);
    for(i=0;i<cnt;i++)
    	DbgPrintf("%x,",pt[i]);
    DbgPrintf("]");
}


void RdPktEp3_CheckSum(unsigned char *buf,int num)
{
    int i;
    	
    for(i=0;i<num;i++)
    {
        buf[i]=(unsigned char)rEP3_FIFO;
        checkSum+=buf[i];
    }
}



void __irq IsrDma2(void)
{
    unsigned char out_csr3;
    unsigned int nextTotalDmaCount;
    unsigned char saveIndexReg=rINDEX_REG;

    rINDEX_REG=3;
    out_csr3=rOUT_CSR1_REG;

    rSUBSRCPND|=BIT_SUB_DMA2;
    ClearPending(BIT_DMA_SBUS);	    
    
    totalDmaCount+=0x80000;

    if(totalDmaCount>=downloadFileSize)// is last?
    {
    	totalDmaCount=downloadFileSize;
	
    	ConfigEp3IntMode();	

    	if(out_csr3& EPO_OUT_PKT_READY)
    	{
   	    CLR_EP3_OUT_PKT_READY();
	}
        rINTMSK|=BIT_DMA_SBUS;  

	    rINTMSK&=~(BIT_USB);  
	    rINTSUBMSK&=~(BIT_SUB_USBD); 

    }
    else
    {
    	if((totalDmaCount+0x80000)<downloadFileSize)	
    	{
	    nextTotalDmaCount=totalDmaCount+0x80000;
    
    	    if((nextTotalDmaCount+0x80000)<downloadFileSize)
    	    {
        	//for (2~n)th autoreload.	 
		while((rDSTAT2&0xfffff)==0); //wait until autoreload occurs.
		rDIDST2=((unsigned int)downloadAddress+nextTotalDmaCount-8);  
		rDIDSTC2=(0<<1)|(0<<0);  
			#if USBDMA_BURST
    	    	rDCON2=rDCON2&~(0xfffff)|(0x20000); 
    	    #else
    	    	rDCON2=rDCON2&~(0xfffff)|(0x80000); 
    	    #endif
    	    	
    	    	while(rEP3_DMA_TTC<0xfffff)
    	    	{
    	    	    rEP3_DMA_TTC_L=0xff;
    	    	    rEP3_DMA_TTC_M=0xff;
    	    	    rEP3_DMA_TTC_H=0xf;
    	    	    //0xfffff;
    	    	}
    	    }
 	    else
 	    {
		while((rDSTAT2&0xfffff)==0); //wait until autoreload occurs.
   	        rDIDST2=((unsigned int)downloadAddress+nextTotalDmaCount-8);  
      	        rDIDSTC2=(0<<1)|(0<<0);  
      	       #if USBDMA_BURST
      	        rDCON2=rDCON2&~(0xfffff)|((downloadFileSize-nextTotalDmaCount)/4+1); 		
      	       #else
      	        rDCON2=rDCON2&~(0xfffff)|(downloadFileSize-nextTotalDmaCount); 		
      	       #endif
    	    	while(rEP3_DMA_TTC<0xfffff)
    	    	{
    	    	    rEP3_DMA_TTC_L=0xff;
    	    	    rEP3_DMA_TTC_M=0xff;
    	    	    rEP3_DMA_TTC_H=0xf;
    	    	    //0xfffff;
    	    	}
	    }
	}
	else
	{
	    while((rDSTAT2&0xfffff)==0); //wait until autoreload occurs.
  	    rDIDST2=((unsigned int)downloadAddress+downloadFileSize-8);  //for next autoreload.	    		
  	    rDIDSTC2=(0<<1)|(0<<0);
  	    rDCON2=rDCON2&~(0xfffff)|(0); 		
		//There is no 2nd autoreload. This will not be used.  	    
	    	//rDMA_TX+=0x0; //USBD register		
	}
    }
    rINDEX_REG=saveIndexReg;
}


void ClearEp3OutPktReady(void)
{
    unsigned char out_csr3;
    rINDEX_REG=3;
    out_csr3=rOUT_CSR1_REG;
    CLR_EP3_OUT_PKT_READY();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人午夜电影| 色视频成人在线观看免| 免费欧美高清视频| 亚洲成在人线免费| 亚洲bt欧美bt精品| 亚洲3atv精品一区二区三区| 亚洲va欧美va人人爽| 亚洲成精国产精品女| 日韩电影在线免费观看| 奇米影视一区二区三区| 精品亚洲porn| 国产精品一区专区| 不卡视频在线观看| 91丨porny丨最新| 欧美性生活一区| 欧美日本一区二区| 欧美tickle裸体挠脚心vk| 精品成人在线观看| 国产精品日日摸夜夜摸av| 国产精品久久久久久久岛一牛影视| 国产精品久久毛片| 亚洲尤物在线视频观看| 日本少妇一区二区| 国产在线精品国自产拍免费| 成人免费视频国产在线观看| 91蝌蚪porny成人天涯| 欧美三级韩国三级日本三斤| 欧美高清视频在线高清观看mv色露露十八 | 欧美中文字幕久久 | 首页国产欧美久久| 激情欧美一区二区| gogo大胆日本视频一区| 欧美色区777第一页| 日韩欧美国产精品| 国产精品伦理在线| 偷窥少妇高潮呻吟av久久免费| 久久精品国产精品亚洲精品| 成人黄色在线网站| 欧美精品一二三区| 欧美国产禁国产网站cc| 亚洲一区二区黄色| 国产一区免费电影| 在线观看日韩高清av| 精品国产三级电影在线观看| 亚洲欧洲精品一区二区三区不卡| 婷婷久久综合九色综合绿巨人| 韩国av一区二区| 91精品1区2区| 久久久久久久久99精品| 亚洲午夜视频在线观看| 国产一区二区三区四区在线观看 | 精品国产自在久精品国产| 国产精品毛片无遮挡高清| 视频一区二区中文字幕| 成人综合婷婷国产精品久久免费| 欧美视频自拍偷拍| 国产精品免费网站在线观看| 日韩国产精品久久| 91在线国产福利| 欧美mv日韩mv亚洲| 亚洲一区二区av在线| 国产91在线观看丝袜| 欧美剧情片在线观看| 国产精品福利电影一区二区三区四区| 日韩中文字幕1| 色婷婷亚洲精品| 国产日韩欧美制服另类| 日韩成人免费看| 久久久精品tv| 日本一区中文字幕| 在线免费观看成人短视频| 国产天堂亚洲国产碰碰| 日本aⅴ亚洲精品中文乱码| 色香蕉久久蜜桃| 国产精品久久久久久久午夜片| 蜜桃精品视频在线观看| 欧美性色欧美a在线播放| 久久先锋影音av鲁色资源| 天天亚洲美女在线视频| 一本一道综合狠狠老| 欧美国产乱子伦| 国产成人精品免费网站| 精品久久一区二区三区| 日韩电影一区二区三区| 欧美日韩一区成人| 一区二区三区在线播| 成人av网在线| 国产日产欧美一区| 国产裸体歌舞团一区二区| 91精品国产综合久久久蜜臀图片 | 91丨九色丨尤物| 日本一区二区高清| 国产一区二区三区四区五区美女| 欧美一区二区三区四区久久 | 99riav久久精品riav| 久久精品亚洲精品国产欧美| 免费看欧美女人艹b| 3atv一区二区三区| 日韩av中文在线观看| 欧美日本韩国一区二区三区视频| 亚洲精品视频自拍| 91福利在线看| 亚洲综合丁香婷婷六月香| 91视频免费看| 一片黄亚洲嫩模| 欧美性大战久久久久久久| 亚洲无线码一区二区三区| 91国产成人在线| 亚洲超丰满肉感bbw| 91精品国产福利在线观看| 蜜桃视频一区二区三区在线观看| 日韩小视频在线观看专区| 国产自产高清不卡| 国产欧美日韩麻豆91| 菠萝蜜视频在线观看一区| 亚洲免费在线播放| 欧美亚洲另类激情小说| 视频一区视频二区在线观看| 欧美一二三四在线| 国产在线乱码一区二区三区| 日本一区二区三区免费乱视频| 粉嫩aⅴ一区二区三区四区五区 | 国产高清精品在线| 最新中文字幕一区二区三区| 在线免费亚洲电影| 日韩精品乱码免费| 久久综合九色综合欧美就去吻| 国产精品香蕉一区二区三区| 国产精品美女久久久久久久网站| 色婷婷av一区| 日日欢夜夜爽一区| 久久视频一区二区| 波多野结衣亚洲一区| 亚洲午夜久久久久久久久久久| 在线成人av网站| 国产一区二区不卡在线| 国产精品久久久久久久裸模 | 亚洲美女区一区| 欧美一级片免费看| 成人免费毛片嘿嘿连载视频| 一区二区三区国产精华| 日韩美女一区二区三区四区| 国产成人在线观看免费网站| 亚洲精品成人a在线观看| 日韩欧美成人午夜| 成人av电影免费在线播放| 亚洲成a人片在线观看中文| 久久亚洲精华国产精华液 | 久久综合成人精品亚洲另类欧美 | 波多野结衣在线aⅴ中文字幕不卡| 亚洲一区二区三区视频在线| 精品国产免费视频| 色妞www精品视频| 精品制服美女丁香| 亚洲一区二区在线视频| 久久人人爽人人爽| 欧美日韩国产精品成人| 丁香婷婷综合激情五月色| 午夜精品免费在线观看| 亚洲国产经典视频| 日韩欧美国产小视频| 在线免费观看成人短视频| 国产成人午夜99999| 调教+趴+乳夹+国产+精品| 国产精品视频你懂的| 欧美一级久久久久久久大片| 91视频精品在这里| 国产精品自拍一区| 日韩精品电影一区亚洲| 亚洲欧洲99久久| 精品国产一区二区三区忘忧草| 一本久久综合亚洲鲁鲁五月天 | 韩国一区二区三区| 日韩av电影一区| 亚洲欧美aⅴ...| 欧美激情综合在线| 日韩欧美一区电影| 欧美日韩久久一区二区| 99久久综合狠狠综合久久| 国产麻豆成人精品| 国内精品国产成人国产三级粉色| 亚洲aⅴ怡春院| 亚洲在线视频一区| 亚洲乱码国产乱码精品精可以看 | 日韩精品一二区| 一区二区日韩电影| 亚洲日本va在线观看| 久久久久久久久久美女| 日韩精品一区二区三区中文精品| 欧美日韩精品一区二区三区四区| 色香色香欲天天天影视综合网| 不卡的av网站| 波波电影院一区二区三区| 成人av网在线| 99视频在线精品| 一本大道av伊人久久综合| av中文字幕不卡| 99麻豆久久久国产精品免费 | 成人激情黄色小说| proumb性欧美在线观看|