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

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

?? udc.c

?? 君正早期ucos系統(只有早期的才不沒有打包成庫),MPLAYER,文件系統,圖片解碼,瀏覽,電子書,錄音,想學ucos,識貨的人就下吧 russblock fmradio explore set
?? C
?? 第 1 頁 / 共 2 頁
字號:
/********************** BEGIN LICENSE BLOCK ************************************ * * JZ4740  mobile_tv  Project  V1.0.0 * INGENIC CONFIDENTIAL--NOT FOR DISTRIBUTION IN SOURCE CODE FORM * Copyright (c) Ingenic Semiconductor Co. Ltd 2005. All rights reserved. *  * This file, and the files included with this file, is distributed and made  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.  *  * http://www.ingenic.cn  * ********************** END LICENSE BLOCK ************************************** * *  Author:  <dsqiu@ingenic.cn>  <jgao@ingenic.cn>  * *  Create:   2008-06-26, by dsqiu *             *  Maintain: 2008-06-26, by jgao *             * ******************************************************************************* */#include <ucos_ii.h>#include <jz4740.h>#include <bsp.h>#include "usb.h"#include "udc.h"#include "udcbus.h"#include "threadprio.h"#ifdef USE_MIDWARE#include "midware.h"#endif#define EP1_INTR_BIT 2#define EP_FIFO_NOEMPTY 2#define GPIO_UDC_DETE GPIO_UDC_DETE_PIN#define IRQ_GPIO_UDC_DETE (IRQ_GPIO_0 + GPIO_UDC_DETE)#define MAX_CABLE_DETE  3#define CABLE_DETE_TIME  500                //wait time in ms#define CABLE_CONNECTED          0#define CABLE_DISCONNECT         1#define DEBUGMSG 0#if DEBUGMSG#define dprintf printf#else#undef  dprintf#define dprintf(x...)#endif#define IS_CACHE(x) (x < 0xa0000000)#ifdef USE_MIDWAREvolatile static MIDSRC udcsrc;volatile static MIDSRCDTA res;volatile static u32 udcid;volatile static u32 cable_stat;volatile static u32 protocool_stat;static u8 err;#endiftypedef struct{	unsigned char ep;	unsigned char state;	unsigned short fifosize;		unsigned int curlen;	unsigned int totallen;	unsigned int data_addr;	unsigned int fifo_addr;}EPSTATE,*PEPSTATE;#define CPU_READ     0#define CPU_WRITE     1#define DMA_READ     2#define DMA_WRITE     3#define WRITE_FINISH  4#define READ_FINISH  5#define TXFIFOEP0 USB_FIFO_EP0EPSTATE epstat[3] = {	{0x00, 0,0,0,0,0,TXFIFOEP0 + 0},	{0x81, 0,0,0,0,0,TXFIFOEP0 + 4},	{0x01, 0,0,0,0,0,TXFIFOEP0 + 4}};#define GetEpState(x) (&epstat[x])static OS_EVENT *udcEvent;u8 USB_Version;volatile static unsigned char udc_irq_type = 0;//void (*tx_done)(void) = NULL;#define UDC_TASK_PRIO	UDC_THREAD_PRIO  //7#define UDC_TASK_STK_SIZE	1024 * 2static OS_STK udcTaskStack[UDC_TASK_STK_SIZE];#define PHYADDR(x) (x & 0x1fffffff)static void dma_receieve_data(PEPSTATE pep){	unsigned int size;	size = pep->totallen - (pep->totallen % pep->fifosize);	if(IS_CACHE(pep->data_addr))		dma_cache_wback_inv(pep->data_addr, pep->totallen);	//IntrOutMask = 0x0;			jz_writel(USB_REG_ADDR2,PHYADDR(pep->data_addr));	jz_writel(USB_REG_COUNT2,size);	jz_writel(USB_REG_CNTL2,0x001d);	jz_writeb(USB_REG_INDEX,1);		usb_setw(USB_REG_OUTCSR,0xa000);	//printf("dma receive %x\n",size);    	pep->curlen = size;		}static void dma_send_data(PEPSTATE pep){	  unsigned int size;	  	  size = pep->totallen - (pep->totallen % pep->fifosize);	  	  if(IS_CACHE(pep->data_addr))		  dma_cache_wback_inv(pep->data_addr, size);	  jz_writel(USB_REG_ADDR1,PHYADDR(pep->data_addr));	  jz_writel(USB_REG_COUNT1,size);//fifosize[ep]);	  jz_writel(USB_REG_CNTL1,0x001f);	  jz_writeb(USB_REG_INDEX, 1);	  usb_setw(USB_REG_INCSR,0x9400);	  	  //printf("dma send %x\n",size);	  pep->curlen = size;}static inline void dma_send_data_Finish(){	jz_writel(USB_REG_CNTL1,0x0);	jz_writeb(USB_REG_INDEX,1);	usb_clearw(USB_REG_INCSR,0x9400);	}static void dma_receieve_data_finish(){	dprintf("\n Disable DMA!");		jz_writel(USB_REG_CNTL2,0x0);	jz_writeb(USB_REG_INDEX,1);	usb_clearw(USB_REG_OUTCSR,0xa000);}void disable_device(unsigned int handle);static void udc_reset(unsigned int handle){//	PUDC_BUS pBus = (PUDC_BUS) handle;	u8 byte;	PEPSTATE pep;		//data init		//ep0state = USB_EP0_IDLE;//	IntrOutMask = 0x2;	// __cpm_stop_udc();	/* Enable the USB PHY */	//REG_CPM_SCR |= CPM_SCR_USBPHY_ENABLE;	/* Disable interrupts */	jz_writew(USB_REG_INTRINE,0);	jz_writew(USB_REG_INTROUTE, 0);	jz_writeb(USB_REG_INTRUSBE, 0);	jz_writeb(USB_REG_FADDR,0);//jz_writeb(USB_REG_POWER,0x60);   //High speed	jz_writeb(USB_REG_INDEX,0);	jz_writeb(USB_REG_CSR0,0xc0);	jz_writeb(USB_REG_INDEX,1);	jz_writew(USB_REG_INCSR,0x2048);	jz_writew(USB_REG_INMAXP,512);		jz_writeb(USB_REG_INDEX,1);	jz_writew(USB_REG_OUTCSR,0x0090);	jz_writew(USB_REG_OUTMAXP,512);	byte = jz_readb(USB_REG_POWER);	dprintf("REG_POWER: %02x\r\n",byte);	epstat[0].fifosize = 64;		if(epstat[1].state != WRITE_FINISH)		jz_readw(USB_REG_INTRIN);	if(epstat[2].state != READ_FINISH)		jz_readw(USB_REG_INTROUT);		epstat[0].state = 0;	epstat[1].state = WRITE_FINISH;	epstat[2].state = READ_FINISH;	epstat[0].curlen = 0;	epstat[1].curlen = 0;	epstat[2].curlen = 0;	epstat[0].totallen = 0;	epstat[1].totallen = 0;	epstat[2].totallen = 0;		if ((byte & 0x10)==0) 	{		jz_writeb(USB_REG_INDEX,1);		jz_writew(USB_REG_INMAXP,64);		jz_writew(USB_REG_INCSR,0x2048);		jz_writeb(USB_REG_INDEX,1);		jz_writew(USB_REG_OUTMAXP,64);		jz_writew(USB_REG_OUTCSR,0x0090);		USB_Version=USB_FS;		//fifosize[1]=64;      		epstat[1].fifosize = 64;		epstat[2].fifosize = 64;		printf("usb1.1\n");			}	else	{		jz_writeb(USB_REG_INDEX,1);		jz_writew(USB_REG_INMAXP,512);		jz_writew(USB_REG_INCSR,0x2048);		jz_writeb(USB_REG_INDEX,1);		jz_writew(USB_REG_OUTMAXP,512);		jz_writew(USB_REG_OUTCSR,0x0090);		USB_Version=USB_HS;		epstat[1].fifosize = 512;		epstat[2].fifosize = 512;		printf("usb2.0\n");			}//DMA USE	jz_writel(USB_REG_CNTL1,0);		jz_writel(USB_REG_ADDR1,0);	jz_writel(USB_REG_COUNT1,0);//fifosize[ep]);	jz_writel(USB_REG_CNTL2,0);	jz_writel(USB_REG_ADDR2,0);	jz_writel(USB_REG_COUNT2,0);//fifosize[ep]);	jz_readb(USB_REG_INTR); // clear dma interrupt	jz_writew(USB_REG_INTRINE,0x1);   //enable ep0 intr	jz_writeb(USB_REG_INTRUSBE,0x6);//	disable_device();	}static void udc_read_fifo(PEPSTATE pep, int size){	unsigned int *ptr = (unsigned int *)(pep->data_addr + pep->curlen);	unsigned int fifo = pep->fifo_addr;	unsigned char *c;	int s = size / 4;	unsigned int x;	if(((unsigned int )ptr & 3) == 0)	{		while(s--)			*ptr++ = REG32(fifo);				}	else	{		while(s--)		{			x = REG32(fifo);			*ptr++ = (x >> 0)& 0x0ff;			*ptr++ = (x >> 8)  & 0x0ff;			*ptr++ = (x >> 16) & 0x0ff;			*ptr++ = (x >> 24) & 0xff;		}	}		s = size & 3;	c = (unsigned char *)ptr;	while(s--)		*c++ = REG8(fifo);	pep->curlen += size;		#if 0	c = (unsigned char *)(pep->data_addr + pep->curlen - size);	dprintf("recv:(%d)", size);	for (s=0;s<size;s++) {		if (s % 16 == 0)			dprintf("\n");		dprintf(" %02x", *(c+s));	}	dprintf("\n");#endif}static void udc_write_fifo(PEPSTATE pep, int size){	unsigned int *d = (unsigned int *)(pep->data_addr + pep->curlen);	unsigned int fifo = pep->fifo_addr;	u8 *c;	int s, q;#if 0	unsigned char *ptr =(unsigned char *)d;		dprintf("send:fifo(%x) = (%d)",fifo, size);	for (s=0;s<size;s++) {		if (s % 16 == 0)			dprintf("\n");		dprintf(" %02x", ptr[s]);	}	dprintf("\n");#endif		if (size > 0) {		s = size >> 2;		while (s--)			REG32(fifo) = *d++;		q = size & 3;		if (q) {			c = (u8 *)d;			while (q--)				REG8(fifo) = *c++;		}	} 	pep->curlen += size;}void ep0_handler(unsigned int handle){    PEPSTATE pep = GetEpState(0);	unsigned char byCSR0;/* Read CSR0 */	jz_writeb(USB_REG_INDEX, 0);	byCSR0 = jz_readb(USB_REG_CSR0);   //	printf("EP0 CSR = %x\n",byCSR0);    if(byCSR0 == 0)		return;	/* Check for SentStall    if sendtall is set ,clear the sendstall bit*/	if (byCSR0 & USB_CSR0_SENTSTALL) 	{		jz_writeb(USB_REG_CSR0, (byCSR0 & ~USB_CSR0_SENDSTALL));		pep->state = CPU_READ;				printf("\nSentstall!");		return;	}/* Check for SetupEnd */	if (byCSR0 & USB_CSR0_SETUPEND) 	{		jz_writeb(USB_REG_CSR0, (byCSR0 | USB_CSR0_SVDSETUPEND));		pep->state = CPU_READ;		printf("\nSetupend!");		//return;	}/* Call relevant routines for endpoint 0 state */	if (pep->state == CPU_READ) 	{		if (byCSR0 & USB_CSR0_OUTPKTRDY)   //There are datas in fifo		{            USB_DeviceRequest dreq;			            *(unsigned int *) &dreq =  REG32(pep->fifo_addr);			*(unsigned int *) ((unsigned int)&dreq + 4)=  REG32(pep->fifo_addr);								dprintf("\nbmRequestType:%02x\nbRequest:%02x\n"					"wValue:%04x\nwIndex:%04x\n"					"wLength:%04x\n",					dreq.bmRequestType,					dreq.bRequest,					dreq.wValue,					dreq.wIndex,					dreq.wLength);			if ( dreq.bRequest == SET_CONFIGURATION )				protocool_stat = CABLE_CONNECTED;			if ( dreq.bRequest == SET_ADDRESS || dreq.bRequest == SET_CONFIGURATION || dreq.bRequest == CLEAR_FEATURE )				usb_setb(USB_REG_CSR0, 0x40 | USB_CSR0_DATAEND);//clear OUTRD bit and DATAEND			else				usb_setb(USB_REG_CSR0, 0x40);//clear OUTRD bit			BusNotify(handle,UDC_SETUP_PKG_FINISH,(unsigned char *)&dreq,8);		}		else 		{			dprintf("0:R DATA\n");					}			}		if (pep->state == CPU_WRITE) 	{		int sendsize;		sendsize = pep->totallen - pep->curlen;//		printf("send size = %d\r\n",sendsize);				if (sendsize < 64) 		{			udc_write_fifo(pep,sendsize);			pep->curlen = pep->totallen;			usb_setb(USB_REG_CSR0, USB_CSR0_INPKTRDY | USB_CSR0_DATAEND);			pep->state = CPU_READ;					} else 		{			if(sendsize)			{				udc_write_fifo(pep, 64);				usb_setb(USB_REG_CSR0, USB_CSR0_INPKTRDY);				pep->curlen += 64;							}else				pep->state = CPU_READ;					}	}//	printf("pep state = %d %d\r\n",CPU_WRITE,pep->state);	return;}void ep_in_handler(unsigned int handle,PEPSTATE pep){	unsigned int size;   		//fifo = fifoaddr[EP];	size = pep->totallen - pep->curlen;//	printf("pep->totallen = %d size = %d \n",pep->totallen,size);	if(size == 0)	{				pep->state = WRITE_FINISH;		usb_clearw(USB_REG_INTRINE,EP1_INTR_BIT);  // close ep1 in intr		BusNotify(handle,UDC_PROTAL_SEND_FINISH,(unsigned char *)pep->data_addr,pep->curlen);//		printf("Send finish \n");		return;			}		if(size < pep->fifosize)	{		udc_write_fifo(pep,size);	}else		udc_write_fifo(pep,pep->fifosize);	usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);	}void ep_out_handler(unsigned int handle,PEPSTATE pep){    unsigned int size;		jz_writeb(USB_REG_INDEX, 1);	size = jz_readw(USB_REG_OUTCOUNT);	 	udc_read_fifo(pep, size);	usb_clearb(USB_REG_OUTCSR,USB_OUTCSR_OUTPKTRDY);	pep->state = CPU_READ;	dprintf("EPOUT: totallen = %d curlen = %d",pep->totallen,pep->curlen);		if(pep->totallen == pep->curlen)	{		pep->state = READ_FINISH;		usb_clearw(USB_REG_INTROUTE,EP1_INTR_BIT);		BusNotify(handle,UDC_PROTAL_RECEIVE_FINISH,			  (unsigned char *)pep->data_addr,pep->curlen);					}		//	USB_HandleUFICmd();	dprintf("\nEPOUT_handle return!");}static int check_gpio(u32 pin){	int i ,j  = 0,k = 0;	for ( i = 0 ; i < 10 ; i ++ )	{		OSTimeDly(1);		if (__gpio_get_pin(pin))			j ++;		else k ++;	}		if ( j >= k ) return 1;	else return 0;}void udc_intrb_handler(unsigned int handle,unsigned char val){	unsigned char byte;		if (val & USB_INTR_RESET) 	{		printf("UDC reset intrupt!\r\n");  		if ( protocool_stat == CABLE_DISCONNECT && 		     cable_stat == CABLE_CONNECTED )		{			printf("USB cable insert! \n");			cable_stat = CABLE_CONNECTED;			udcsrc.Src = SRC_UDC;			udcsrc.Event = EVENT_USB_IN;			OSQPost(udcsrc.CurEvent1 , (void *)&udcid);			OSSemPost(udcsrc.CurEvent);			if ( res.Val == 1 )  //|| res.Val == 0xffff) //up layer said yes!			{//				protocool_stat = CABLE_CONNECTED;//				BusNotify((unsigned int)pBus,stat,0,0);				;			}			else           //up layer said no!			{				protocool_stat = CABLE_DISCONNECT;				//jz_writeb(USB_REG_POWER,0x00);   //High speed					disable_device(0);				printf("As power cable insert! \n");				return;							}		}		udc_reset(handle);				byte = jz_readb(USB_REG_POWER);		//dprintf("REG_POWER: %02x\r\n",byte);		if ((byte&0x10) ==0 ) 		{			BusNotify(handle,UDC_FULLSPEED,0,0);		}else			BusNotify(handle,UDC_HIGHSPEED,0,0);		// enable USB Suspend interrupt				byte = jz_readb(USB_REG_INTRUSBE);		jz_writeb(USB_REG_INTRUSBE,byte | USB_INTR_SUSPEND);      		BusNotify(handle,UDC_RESET,0,0);			}	if(val & USB_INTR_SUSPEND)	{		BusNotify(handle,UDC_SUSPEND,0,0);				byte = jz_readb(USB_REG_INTRUSBE);		jz_writeb(USB_REG_INTRUSBE,(byte & (~USB_INTR_SUSPEND) & 7));		printf("udc suspend %x\n",byte);#ifdef USE_MIDWARE		if ( protocool_stat == CABLE_CONNECTED )		{			printf("USB uninstall ! %d \n",protocool_stat);			udcsrc.Src = SRC_UDC;			udcsrc.Event = EVENT_UNINSTALL;			protocool_stat = CABLE_DISCONNECT;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲地区一二三色| 综合自拍亚洲综合图不卡区| 美腿丝袜亚洲三区| 日韩精品一区二区三区老鸭窝| 午夜久久电影网| 欧美一级免费大片| 美女网站视频久久| 国产三级精品视频| 成人av电影在线观看| 亚洲人成网站色在线观看| 欧美性大战久久久久久久| 亚洲国产cao| 日韩精品在线一区二区| 国产一区二区不卡在线| 国产精品久久久久久久久图文区| 99国产精品一区| 一区二区三区不卡视频| 51精品秘密在线观看| 国产一区高清在线| 亚洲乱码精品一二三四区日韩在线| 欧美亚洲国产一区二区三区va| 日韩av电影免费观看高清完整版 | 久久精品国产亚洲高清剧情介绍 | 91福利国产精品| 日韩和的一区二区| 国产亚洲一区字幕| 91福利视频久久久久| 国产在线精品免费| 一区二区三区四区亚洲| xnxx国产精品| 在线精品视频一区二区三四| 久久精品国产成人一区二区三区 | 91丨九色丨蝌蚪富婆spa| 日韩国产欧美三级| 国产三级精品在线| 欧美一级片在线| 成人午夜看片网址| 日韩激情视频网站| 综合色中文字幕| 欧美不卡视频一区| 欧美综合亚洲图片综合区| 久久99国产精品久久99| 一区二区三区国产精品| 国产午夜精品久久久久久久| 欧美精品自拍偷拍| 97久久精品人人澡人人爽| 久久99国产精品成人| 亚洲福利视频一区| 1000精品久久久久久久久| 精品久久一区二区三区| 欧美亚洲高清一区| bt欧美亚洲午夜电影天堂| 国内外成人在线| 偷拍一区二区三区四区| 亚洲欧洲美洲综合色网| 国产欧美日韩另类一区| 日韩免费视频一区二区| 91麻豆精品国产91久久久久久| 大美女一区二区三区| 久久99国内精品| 奇米精品一区二区三区四区 | 精久久久久久久久久久| 亚洲不卡一区二区三区| 亚洲日本护士毛茸茸| 久久精子c满五个校花| 欧美videossexotv100| 欧美日本一区二区三区| 色噜噜夜夜夜综合网| av中文字幕一区| 国产精品影视在线| 国内成人自拍视频| 精久久久久久久久久久| 美女一区二区在线观看| 日本人妖一区二区| 日本不卡123| 麻豆成人在线观看| 国产综合一区二区| 国产剧情一区二区三区| 国产精品12区| 国产成都精品91一区二区三| 丰满白嫩尤物一区二区| 成人午夜视频免费看| www.亚洲国产| 色综合天天在线| 色屁屁一区二区| 欧美在线播放高清精品| 91久久久免费一区二区| 欧美视频三区在线播放| 9191国产精品| 欧美大黄免费观看| 国产午夜三级一区二区三| 国产欧美综合在线观看第十页| 国产精品理论在线观看| 亚洲乱码中文字幕| 五月天网站亚洲| 激情文学综合网| 国产黄色成人av| 一本到一区二区三区| 欧美日韩一级大片网址| 日韩欧美久久一区| 国产女主播一区| 亚洲综合色丁香婷婷六月图片| 婷婷亚洲久悠悠色悠在线播放| 青青草原综合久久大伊人精品优势| 毛片一区二区三区| 成人自拍视频在线观看| 在线观看日韩电影| 欧美大黄免费观看| 一区精品在线播放| 日本欧美在线观看| 懂色av噜噜一区二区三区av| 色综合天天狠狠| 欧美成人三级电影在线| 国产精品久久久久久久久免费丝袜 | 一区二区三区丝袜| 美国十次综合导航| heyzo一本久久综合| 91精品啪在线观看国产60岁| 久久亚洲综合av| 一区二区三区欧美日| 久久国产三级精品| 91理论电影在线观看| 欧美不卡123| 亚洲你懂的在线视频| 蜜桃视频免费观看一区| 91首页免费视频| 精品福利一区二区三区| 亚洲一本大道在线| 成人激情校园春色| 日韩欧美黄色影院| 一区二区欧美视频| 国产999精品久久| 制服丝袜av成人在线看| 中文字幕日韩av资源站| 久久成人免费网站| 欧美最猛性xxxxx直播| 欧美激情一区二区在线| 久久成人麻豆午夜电影| 在线免费观看一区| 国产精品素人一区二区| 乱中年女人伦av一区二区| 在线观看中文字幕不卡| 久久精品视频一区| 精品一区二区三区蜜桃| 在线成人高清不卡| 一区二区三区在线播| 不卡的av在线| 日本一区二区免费在线观看视频| 免费一级片91| 欧美精品黑人性xxxx| 亚洲免费在线视频一区 二区| 国产精品主播直播| 久久青草欧美一区二区三区| 男女性色大片免费观看一区二区| 欧美在线影院一区二区| 中文字幕一区二区三区在线播放 | 国产成人在线看| 精品少妇一区二区三区| 天堂av在线一区| 欧美视频一区在线| 亚洲综合丝袜美腿| 欧美色涩在线第一页| 一区二区三区日本| 在线观看免费亚洲| 亚洲国产一区二区视频| 91福利视频网站| 亚洲一区在线电影| 在线精品视频一区二区三四| 一区二区三区免费在线观看| 色8久久人人97超碰香蕉987| 亚洲图片激情小说| 色综合久久99| 亚洲影视在线观看| 欧美视频一区在线| 日本欧美大码aⅴ在线播放| 91精品国产欧美一区二区| 美女一区二区视频| 久久婷婷一区二区三区| 国产成人精品综合在线观看| 日本一区二区三区在线不卡| 成人免费高清在线| 亚洲欧美日韩在线不卡| 欧美吞精做爰啪啪高潮| 日韩在线一二三区| 精品久久久久久久久久久久久久久 | 亚洲激情校园春色| 日本高清成人免费播放| 天天综合色天天| 精品国产露脸精彩对白| 岛国精品一区二区| 一区二区三区在线影院| 555www色欧美视频| 国产激情精品久久久第一区二区 | 国产日韩欧美高清在线| 不卡电影一区二区三区| 亚洲小说欧美激情另类| 欧美一级一区二区| 东方欧美亚洲色图在线| 亚洲福利视频导航| 精品国产一区二区三区不卡|