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

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

?? udc.c

?? 這是usb device端的驅(qū)動(dòng)
?? C
字號(hào):
#include <includes.h>#include <jz4740.h>#include "usb.h"#include "udc.h"#define dprintf(x...) //printf(x)static u32 rx_buf[1024];static u32 tx_buf[1024];static u32 tx_size, rx_size, finished;static u32 fifo, curep;static OS_EVENT *udcEvent;u8 ep0state;u8 USB_Version;//u16 MAX_EP1_SIZE;void (*tx_done)(void) = NULL;u32 hwRxFifoCount(void) { return rx_size; }u32 hwTxFifoCount(void) { return tx_size - finished; }#define UDC_TASK_PRIO	2// UDC FIFO#define TXFIFOEP0 USB_FIFO_EP0static u32 fifoaddr[] = {	TXFIFOEP0, TXFIFOEP0+4 ,TXFIFOEP0+8};static u32 fifosize[] = {	MAX_EP0_SIZE, MAX_EP1_SIZE};static void udc_reset(void){	u8 byte;	//data init	ep0state = USB_EP0_IDLE;	//__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_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);	jz_writew(USB_REG_INTRINE,0x3);   //enable intr	jz_writew(USB_REG_INTROUTE,0x2);	jz_writeb(USB_REG_INTRUSBE,0x4);	byte=jz_readb(USB_REG_POWER);	dprintf("\nREG_POWER: %02x",byte);	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;		init_mass_storage(64,64);	}	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;		fifosize[1]=512;		init_mass_storage(512,512);	}}static void udcReadFifo(u8 *ptr, int size){	u32 *d = (u32 *)ptr;	int s;	s = (size + 3) >> 2;	while (s--)		*d++ = REG32(fifo);#if 0	dprintf("recv:(%d)", size);	for (s=0;s<size;s++) {		if (s % 16 == 0)			dprintf("\n");		dprintf(" %02x", *(ptr+s));	}	dprintf("\n");#endif}static void udcWriteFifo(u8 *ptr, int size){	u32 *d = (u32 *)ptr;	u8 *c;	int s, q;#if 0	dprintf("send:(%d)", 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++;		}	} }void HW_SendZeroPKT(int ep){	jz_writeb(USB_REG_INDEX, ep); 	REG32(fifo)=0;	usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);	usb_setb(USB_REG_CSR0, USB_CSR0_DATAEND);}void HW_SendPKT(int ep, const u8 *buf, int size){	dprintf("EP%d send pkt :%d\n", ep, size);	memcpy((void *)tx_buf, buf, size);	fifo = fifoaddr[ep];	tx_size = size;	finished = 0;	if (ep!=0)	{		jz_writeb(USB_REG_INDEX, ep);		if (tx_size - finished <= fifosize[ep]) 		{			udcWriteFifo((u8 *)((u32)tx_buf+finished),				     tx_size - finished);			usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);			finished = tx_size;		} else 		{			udcWriteFifo((u8 *)((u32)tx_buf+finished),				     fifosize[ep]);			usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);			finished += fifosize[ep];		}	}}void HW_GetPKT(int ep, const u8 *buf, int size){	dprintf("EP%d read pkt :%d\n", ep, size);	memcpy((void *)buf, (u8 *)rx_buf, size);	fifo = fifoaddr[ep];	if (rx_size > size)		rx_size -= size;	else {		size = rx_size;		rx_size = 0;	}	memcpy((u8 *)rx_buf, (u8 *)((u32)rx_buf+size), rx_size);}void usbHandleStandDevReq(u8 *buf){	USB_DeviceRequest *dreq = (USB_DeviceRequest *)buf;	switch (dreq->bRequest) {	case GET_DESCRIPTOR:		if (dreq->bmRequestType == 0x80)	/* Dev2Host */			switch(dreq->wValue >> 8) 			{			case DEVICE_DESCRIPTOR:				dprintf("get device\n");				sendDevDesc(dreq->wLength);				break;			case CONFIGURATION_DESCRIPTOR:				dprintf("get config\n");				sendConfDesc(dreq->wLength);				break;			case STRING_DESCRIPTOR:				if (dreq->wLength == 0x02)					HW_SendPKT(0, "\x04\x03", 2);				else					sendDevDescString(dreq->wLength);				//HW_SendPKT(0, "\x04\x03\x09\x04", 2);				break;			}		dprintf("\nSet ep0state=TX!");		ep0state=USB_EP0_TX;				break;	case SET_ADDRESS:		dprintf("\nSET_ADDRESS!");		jz_writeb(USB_REG_FADDR,dreq->wValue);		break;	case GET_STATUS:		switch (dreq->bmRequestType) {		case 80:	/* device */			HW_SendPKT(0, "\x01\x00", 2);			break;		case 81:	/* interface */		case 82:	/* ep */			HW_SendPKT(0, "\x00\x00", 2);			break;		}		ep0state=USB_EP0_TX;		break;	case CLEAR_FEATURE:	case SET_CONFIGURATION:	case SET_INTERFACE:	case SET_FEATURE:#if 0		dprintf("Send ZERO packet at 0.\n");		HW_SendZeroPKT(0);#endif		break;	}}void EP0_Handler (){u8			byCSR0;/* Read CSR0 */jz_writeb(USB_REG_INDEX, 0);byCSR0 = jz_readb(USB_REG_CSR0);/* 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));	ep0state = USB_EP0_IDLE;	dprintf("\nSentstall!");	return;}/* Check for SetupEnd */if (byCSR0 & USB_CSR0_SETUPEND) {	jz_writeb(USB_REG_CSR0, (byCSR0 | USB_CSR0_SVDSETUPEND));	ep0state = USB_EP0_IDLE;	dprintf("\nSetupend!");	return;}/* Call relevant routines for endpoint 0 state */if (ep0state == USB_EP0_IDLE) {	if (byCSR0 & USB_CSR0_OUTPKTRDY)   //There are datas in fifo	{		USB_DeviceRequest *dreq;		fifo=fifoaddr[0];		udcReadFifo((u8 *)rx_buf, sizeof(USB_DeviceRequest));		usb_setb(USB_REG_CSR0, 0x40);//clear OUTRD bit		dreq = (USB_DeviceRequest *)rx_buf;		dprintf("\nbmRequestType:%02x\nbRequest:%02x\n"			"wValue:%04x\nwIndex:%04x\n"			"wLength:%04x\n",			dreq->bmRequestType,			dreq->bRequest,			dreq->wValue,			dreq->wIndex,			dreq->wLength);		usbHandleDevReq(rx_buf);	} else 	{		dprintf("0:R DATA\n");	}	rx_size = 0;}if (ep0state == USB_EP0_TX) {	fifo=fifoaddr[0];	if (tx_size - finished <= 64) 	{		udcWriteFifo((u8 *)((u32)tx_buf+finished),			     tx_size - finished);		finished = tx_size;		usb_setb(USB_REG_CSR0, USB_CSR0_INPKTRDY);		usb_setb(USB_REG_CSR0, USB_CSR0_DATAEND); //Set dataend!		ep0state=USB_EP0_IDLE;	} else 	{		udcWriteFifo((u8 *)((u32)tx_buf+finished), 64);		usb_setb(USB_REG_CSR0, USB_CSR0_INPKTRDY);		finished += 64;	}}return;}void EPIN_Handler(u8 EP){	jz_writeb(USB_REG_INDEX, EP);	fifo = fifoaddr[EP];	if (tx_size-finished==0) 	{		USB_HandleUFICmd();		return;	}	if (tx_size - finished <= fifosize[EP]) 	{		udcWriteFifo((u8 *)((u32)tx_buf+finished),			     tx_size - finished);		usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);		finished = tx_size;	} else 	{		udcWriteFifo((u8 *)((u32)tx_buf+finished),			    fifosize[EP]);		usb_setb(USB_REG_INCSR, USB_INCSR_INPKTRDY);		finished += fifosize[EP];	}}void EPOUT_Handler(u8 EP){	u32 size;	jz_writeb(USB_REG_INDEX, EP);	size = jz_readw(USB_REG_OUTCOUNT);	fifo = fifoaddr[EP];	udcReadFifo((u8 *)((u32)rx_buf+rx_size), size);	usb_clearb(USB_REG_OUTCSR,USB_OUTCSR_OUTPKTRDY);	rx_size += size;	USB_HandleUFICmd();	dprintf("\nEPOUT_handle return!");}void udc4740Proc (){	u8	IntrUSB;	u16	IntrIn;	u16	IntrOut;/* Read interrupt registers */	IntrUSB = jz_readb(USB_REG_INTRUSB);	IntrIn  = jz_readw(USB_REG_INTRIN);	IntrOut = jz_readw(USB_REG_INTROUT);/* Check for resume from suspend mode */	if (IntrIn & 2) 	{		dprintf("\nUDC EP1 IN operation!");		EPIN_Handler(1);	     	}	if (IntrOut & 2) 	{		dprintf("\nUDC EP1 OUT operation!");		EPOUT_Handler(1);	}	if (IntrUSB & USB_INTR_RESET) 	{		dprintf("\nUDC reset intrupt!");  		udc_reset();	}/* Check for endpoint 0 interrupt */	if (IntrIn & USB_INTR_EP0) 	{		dprintf("\nUDC EP0 operations!");		EP0_Handler();	}	/* Check for suspend mode *//*Implement late!!*/	return;}static void udcIntrHandler(unsigned int arg){	u8 err;	__intc_mask_irq(IRQ_UDC);	OSSemPost(udcEvent);}static void udcTaskEntry(void *arg){	u8 err;	dprintf("Init UDC\n");	USB_Version=USB_HS;	udcEvent = OSSemCreate(0);	request_irq(IRQ_UDC, udcIntrHandler, 0);	udc_reset();	printf("\nUDC reset!!");	__intc_unmask_irq(IRQ_UDC);	while (1) {		OSSemPend(udcEvent, 0, &err);		if (USB_Version==USB_FS) printf("\nUDC task!");		udc4740Proc();		__intc_unmask_irq(IRQ_UDC);	}}#define UDC_TASK_STK_SIZE	1024 * 5static OS_STK udcTaskStack[UDC_TASK_STK_SIZE];void udc_init(void){	printf("\nCreate UDC task!");	OSTaskCreate(udcTaskEntry, (void *)0,		     (void *)&udcTaskStack[UDC_TASK_STK_SIZE - 1],		     UDC_TASK_PRIO);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91污片在线观看| 欧美午夜影院一区| 亚洲成精国产精品女| 2023国产精品自拍| 欧美在线短视频| 国产精品亚洲专一区二区三区| 亚洲黄一区二区三区| 国产亚洲1区2区3区| 69成人精品免费视频| 成人av高清在线| 激情综合网激情| 亚洲国产精品天堂| 亚洲欧美一区二区久久| 日本一区二区在线不卡| 日韩午夜在线观看| 伊人性伊人情综合网| 91最新地址在线播放| 国产在线不卡一区| 免费日本视频一区| 亚洲午夜精品一区二区三区他趣| 国产日韩在线不卡| 欧美一级片在线| 欧美午夜一区二区三区 | 日韩精品亚洲专区| 亚洲美女淫视频| 亚洲欧洲日韩av| 久久久99久久| 久久新电视剧免费观看| 日韩亚洲欧美在线| 4438x亚洲最大成人网| 欧美午夜精品一区二区三区| 99vv1com这只有精品| 成人激情综合网站| 国产精品一卡二卡| 国内外精品视频| 久久se精品一区二区| 麻豆免费看一区二区三区| 免费成人在线观看| 久久精品噜噜噜成人av农村| 亚洲国产wwwccc36天堂| 亚洲最新在线观看| 亚洲男人天堂av网| 一区二区在线观看av| 亚洲女女做受ⅹxx高潮| 亚洲精品国产一区二区精华液| 亚洲欧美一区二区三区国产精品 | 九九九精品视频| 精一区二区三区| 精品一区二区三区欧美| 狠狠色丁香婷婷综合久久片| 精品亚洲免费视频| 国产精品正在播放| 国产成都精品91一区二区三| 高清国产一区二区三区| a亚洲天堂av| 91福利在线看| 欧美人体做爰大胆视频| 91精品国产综合久久久久 | 18成人在线观看| 亚洲乱码一区二区三区在线观看| 亚洲精品成人在线| 亚洲午夜电影在线观看| 日韩va亚洲va欧美va久久| 美腿丝袜亚洲综合| 国产激情偷乱视频一区二区三区 | 精品一二线国产| 天天综合天天综合色| 免费欧美在线视频| 国产精品88888| 91视频精品在这里| 91麻豆精品国产自产在线观看一区 | 日韩理论片一区二区| 亚洲一区二区四区蜜桃| 免费久久99精品国产| 国产福利一区二区| 日本韩国一区二区三区视频| 欧美精品一二三| 欧美激情一区二区三区四区| 亚洲精品国产精华液| 蜜桃av一区二区| av在线这里只有精品| 精品视频一区二区不卡| 久久影院午夜论| 亚洲一区二区三区中文字幕 | 一区二区三区四区av| 蜜臀av一区二区在线观看 | 337p亚洲精品色噜噜狠狠| 久久综合狠狠综合| 亚洲aaa精品| 成人毛片视频在线观看| 在线成人免费视频| 国产精品久久久久9999吃药| 亚洲视频小说图片| 综合激情成人伊人| 免费xxxx性欧美18vr| 99精品国产99久久久久久白柏| 欧美日韩电影一区| 国产精品乱码一区二三区小蝌蚪| 日韩精品久久久久久| 成人精品小蝌蚪| 日韩欧美一卡二卡| 亚洲一区二区综合| 成人免费看片app下载| 日韩美女视频在线| 亚洲超碰97人人做人人爱| 成人免费不卡视频| 久久久久国产精品免费免费搜索| 亚洲国产日韩一区二区| 99久久精品99国产精品| 久久久夜色精品亚洲| 日韩精品一卡二卡三卡四卡无卡| 99久久99久久综合| 中文成人综合网| 韩国一区二区视频| 日韩精品中文字幕在线一区| 夜夜精品视频一区二区| 91在线观看地址| 欧美国产成人精品| 国产成人8x视频一区二区| 欧美哺乳videos| 麻豆精品视频在线观看视频| 欧美三级中文字幕| 亚洲第一狼人社区| 欧美视频三区在线播放| 亚洲视频你懂的| 91女厕偷拍女厕偷拍高清| 欧美韩国日本一区| 国产不卡在线一区| 国产日产精品1区| 国产成人综合自拍| 国产日韩欧美在线一区| 狠狠色丁香久久婷婷综合_中| 欧美va在线播放| 另类小说一区二区三区| 91精品国产综合久久久久久久久久 | 一区二区三区日韩| 91行情网站电视在线观看高清版| 中文字幕一区二区日韩精品绯色| 成人久久18免费网站麻豆| 久久久久久9999| 国产精品一二三| 欧美激情一区三区| av一二三不卡影片| 亚洲欧洲三级电影| 色婷婷av一区二区三区之一色屋| 1024国产精品| 在线影院国内精品| 亚洲电影在线播放| 日韩亚洲电影在线| 国模套图日韩精品一区二区| 国产视频一区二区在线| 成人动漫一区二区| 亚洲精品欧美专区| 欧美猛男超大videosgay| 日韩福利电影在线| 精品第一国产综合精品aⅴ| 国产一区二区三区观看| 国产日韩欧美综合一区| 成人黄页毛片网站| 一区二区三区电影在线播| 欧美年轻男男videosbes| 久久爱www久久做| 国产精品免费久久| 在线观看日韩一区| 久久99国产精品久久99| 国产精品久久久久四虎| 在线视频中文字幕一区二区| 视频一区国产视频| 久久免费的精品国产v∧| 99精品视频在线观看| 日韩av一级片| 久久久精品日韩欧美| 色呦呦国产精品| 蜜桃一区二区三区在线| 国产精品久久网站| 777久久久精品| 成人黄色a**站在线观看| 偷拍亚洲欧洲综合| 国产精品无码永久免费888| 欧美性猛交xxxx乱大交退制版| 久久99久久精品欧美| 综合自拍亚洲综合图不卡区| 欧美一卡2卡三卡4卡5免费| 国产成人精品1024| 亚洲高清久久久| 欧美国产精品一区| 欧美一区二区三区免费观看视频 | 亚洲v日本v欧美v久久精品| 91精品国产综合久久福利| 国产精品一区二区在线观看不卡| 一区二区三区欧美在线观看| 精品成a人在线观看| 91麻豆免费视频| 国产欧美日韩视频在线观看| 国产成人三级在线观看| 天天综合天天综合色| 亚洲色图一区二区| 精品国产免费一区二区三区四区 | 亚洲精品久久久久久国产精华液| 欧美不卡在线视频|