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

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

?? d12int.c

?? 1針對USB通信的驅動程序 2采用C語言編程 3可以用于ARM的嵌入式開發(fā) 4全部代碼采用 ARM 指令. 5全部代碼在 ADS1.2 中編譯調試
?? C
字號:
#include "def.h"
#include "D12Def.h" 
#include "UsbDesc.h"
#include "utils.h"

#define	STATUS_ERR	1
#define	STATUS_OK	0

static U8 usb_remote_wake;
static U8 usb_config;
static U8 UsbSendDescF;

static int send_remain;
static U32 send_ptr;

void Delay(U32 Time);

U8 UsbInit()
{
	UsbSendDescF = 0;

	if(D12RdChipId()!=0x1210 )
		return STATUS_ERR;

	D12SetDma(MyD12DmaCfg);
	if(D12GetDma()!=MyD12DmaCfg)
		return STATUS_ERR;

	D12SetMode(MyD12EpCfgOff, D12Pll24M);
	Delay(100);
	D12SetMode(MyD12EpCfgOn, D12Pll24M);

	return STATUS_OK;
}

///////////////////////////////

#define	UsbDevDescType	1
#define	UsbCfgDescType	2
#define	UsbStrDescType	3
#define	UsbItfDescType	4
#define	UsbEndpDescType	5
#define	UsbPwrDescType	6

#define	UsbDevDescSize	18
#define	UsbCfgDescSize	9
#define	UsbItfDescSize	9
#define	UsbEndpDescSize	7

#define	UsbEndpControl		0
#define	UsbEndpIsochronous	1
#define	UsbEndpBulk			2
#define	UsbEndpInterrupt	3	

////////////////////////////////////////

#define	UsbClassMassStorage	8

#define	UsbSubClassRbc		1
#define	UsbSubClassSff8020i	2
#define	UsbSubClassQic157	3
#define	UsbSubClassUfi		4
#define	UsbSubClassSff8070i	5
#define	UsbSubClassScsi		6

#define	UsbProtocolCbi0	0
#define	UsbProtocolCbi1	1
#define	UsbProtocolBulk	0x50
////////////////////////////////////////

#define	Ep0PacketSize	16
#define	Ep2PacketSize	64
#define	EndpCnt	2
#define	UsbTotalCfgDescSize	UsbCfgDescSize+UsbItfDescSize+EndpCnt*UsbEndpDescSize
static __packed struct{
	UsbDevDesc DevDesc;
	U8 CfgDesc[9];
	U8 ItfDesc[9];
	U8 Endp4Desc[7];
	U8 Endp5Desc[7];

}ThisDevDesc =
				{
					{
						UsbDevDescSize,
						UsbDevDescType,
						0x110,
						0, 0, 0,
						Ep0PacketSize,
						0x471,
						0x222,
						0x113,
						0, 0, 0,
						1
					},
					{
						UsbCfgDescSize,
						UsbCfgDescType,
						UsbTotalCfgDescSize, 0,
						1,
						1,
						0,
						0x80,
						0x32
					},
					{
						UsbItfDescSize,
						UsbItfDescType,
						0,
						0,
						EndpCnt,
						UsbClassMassStorage,
						UsbSubClassUfi,
						UsbProtocolBulk,
						0
					},
					{
						UsbEndpDescSize,
						UsbEndpDescType,
						0x82,
						UsbEndpBulk,
						Ep2PacketSize,
						0,
						0
					},
					{
						UsbEndpDescSize,
						UsbEndpDescType,
						0x2,
						UsbEndpBulk,
						Ep2PacketSize,
						0,
						0
					}					
				};

/****************** standard device request ****************/
U8 UsbGetStatus(U8 *SetupPkt)
{
	if(SetupPkt[2]|SetupPkt[3]|SetupPkt[5]|SetupPkt[7])
		return 1;
	if(SetupPkt[6]!=2)
		return 1;
	if(SetupPkt[0]==0x80)
	{
		if(SetupPkt[4])
			return 1;
		SetupPkt[0] = usb_remote_wake?1:0;
		SetupPkt[1] = 0;
	}
	else
	if(SetupPkt[0]==0x81)
	{
		if(SetupPkt[4])
			return 1;
		SetupPkt[0] = 0;
		SetupPkt[1] = 0;		
	}
	else
	if(SetupPkt[0]==0x82)
	{
		D12SelEp((SetupPkt[4]*2)|((SetupPkt[4]&0x80)?1:0));
		SetupPkt[1] = (D12Dat&2)?1:0;
		SetupPkt[0] = 0;
	}
	else
		return 1;

	D12WrEp(1, SetupPkt, 2);
	return 0;		
}

U8 UsbClrFeature(U8 *SetupPkt)
{

	if(SetupPkt[0]&0x80)
		return STATUS_ERR;
	if(SetupPkt[3]|SetupPkt[5]|SetupPkt[6]|SetupPkt[7])	
		return STATUS_ERR;
		
	if(SetupPkt[0]&0x1f)
	{
		if((SetupPkt[0]&0x1f)!=2)
			return STATUS_ERR;
		D12SetEpStat((SetupPkt[4]*2)|((SetupPkt[4]&0x80)?1:0),0);
	}
	else
	{
		if(SetupPkt[4])
			return STATUS_ERR;
		usb_remote_wake = 0;
	}
	
	D12WrEp(1, SetupPkt, 0);
	return STATUS_OK;
}

U8 UsbSetFeature(U8 *SetupPkt)
{
	if(!(SetupPkt[0]&0x80))
		return STATUS_ERR;
	if(SetupPkt[3]|SetupPkt[5]|SetupPkt[6]|SetupPkt[7])
		return STATUS_ERR;
		
	if(SetupPkt[0]&0x1f)
	{
		if((SetupPkt[0]&0x1f)!=2)
			return STATUS_ERR;
		D12SetEpStat((SetupPkt[4]*2)|((SetupPkt[4]&0x80)?1:0),1);
	}
	else
	{
		if(SetupPkt[4])
			return STATUS_ERR;
		usb_remote_wake = 1;
	}
	
	D12WrEp(1, SetupPkt, 0);
	return STATUS_OK;
}

U8 UsbSetAddress(U8 *SetupPkt)
{

	if(SetupPkt[0]|SetupPkt[3]|SetupPkt[4]|SetupPkt[5]|SetupPkt[6]|SetupPkt[7])
		return STATUS_ERR;
		
	D12SetAddr(SetupPkt[2]|0x80);
	D12WrEp(1, SetupPkt, 0);
	return STATUS_OK;	
}

void UsbSendDesc()
{
//	U8 i;

	UsbSendDescF = send_remain>=Ep0PacketSize;	
	D12WrEp(1, (U8 *)send_ptr, (send_remain>Ep0PacketSize)?Ep0PacketSize:send_remain);
	
//	putch('@');
//	for(i=0; i<((send_remain>Ep0PacketSize)?Ep0PacketSize:send_remain); i++)
//		printf("%x,", *(U8 *)(send_ptr+i));	
		
	send_remain -= Ep0PacketSize;
	send_ptr    += Ep0PacketSize;
	
}

U8 UsbGetDescriptor(U8 *SetupPkt)
{
	
	if(SetupPkt[0]!=0x80)
		return STATUS_ERR;
		
	switch	(SetupPkt[3])
	{
	case UsbDevDescType:
		send_ptr = (U32)&ThisDevDesc;
		send_remain = UsbDevDescSize;
		break;
	case UsbCfgDescType:
		send_ptr = (U32)&ThisDevDesc.CfgDesc;
		send_remain = UsbTotalCfgDescSize;
		break;
	case UsbStrDescType:		
		return STATUS_ERR;	
	default:
		return STATUS_ERR;	
	}

	if(!SetupPkt[7]&&(SetupPkt[6]<send_remain))
		send_remain = SetupPkt[6];

	UsbSendDesc();	
	return STATUS_OK;	
}

U8 UsbGetConfiguration(U8 *SetupPkt)
{
	if(SetupPkt[0]!=0x80)
		return STATUS_ERR;
	if(SetupPkt[2]|SetupPkt[3]|SetupPkt[4]|SetupPkt[5]|SetupPkt[7])
		return STATUS_ERR;
	if(SetupPkt[6]!=1)
		return STATUS_ERR;
		
	SetupPkt[0] = usb_config?1:0;
	D12WrEp(1, SetupPkt, 1);	
	return STATUS_OK;	
}

U8 UsbSetConfiguration(U8 *SetupPkt)
{
	if(SetupPkt[0]|SetupPkt[3]|SetupPkt[4]|SetupPkt[5]|SetupPkt[6]|SetupPkt[7])
		return STATUS_ERR;
	if(SetupPkt[2]&0xfe)
		return STATUS_ERR;
		
	usb_config = SetupPkt[2]&1;
	D12SetEp(usb_config);
	D12SetEpStat(4, usb_config^1);
	D12SetEpStat(5, usb_config^1);
	D12WrEp(1, SetupPkt, 0);
	puts("Device attached!\n");
	return STATUS_OK;
}

U8 UsbGetInterface(U8 *SetupPkt)
{
	if(SetupPkt[0]!=0x81)
		return STATUS_ERR;
	if(SetupPkt[2]|SetupPkt[3]|SetupPkt[4]|SetupPkt[5]|SetupPkt[7])
		return STATUS_ERR;
	if(SetupPkt[6]!=1)
		return STATUS_ERR;
		
	SetupPkt[0] = 0;
	D12WrEp(1, SetupPkt, 1);
	return STATUS_OK;
}

U8 UsbSetInterface(U8 *SetupPkt)
{
	return STATUS_ERR;
}

U8 UsbReserved(U8 *SetupPkt)
{
	return STATUS_ERR;	
}

U8 (*StdDevReq[])(U8 *SetupPkt) = {
	UsbGetStatus,
	UsbClrFeature,
	UsbReserved,
	UsbSetFeature,
	UsbReserved,
	UsbSetAddress,
	UsbGetDescriptor,
	UsbReserved,
	UsbGetConfiguration,
	UsbSetConfiguration,
	UsbGetInterface,
	UsbSetInterface,
	UsbReserved,
	UsbReserved,
	UsbReserved,
	UsbReserved
}; 

/********************** D12 interrupt process ******************/
void D12Ep0IntProc()
{
	U8 SetupPkt[8];
	
	UsbSendDescF = 0;
	
	D12RdLastTrStat(0);
	if(D12Cmd&0x20)	
		if(D12RdEp(0, SetupPkt, 8)==8)
		{
			D12AckEp(0);
			D12AckEp(1);
			
			/*{
				int i;
		
				putch('\n');
				for(i=0; i<8; i++)
					printf("%x,", SetupPkt[i]);
			}*/
				
			if(!StdDevReq[SetupPkt[1]&0xf](SetupPkt));
				return;
		}
					
	D12SetEpStat(0, D12EpStall);
	D12SetEpStat(1, D12EpStall);		
}

void D12Ep1IntProc()
{
	U8 i;

	i = D12RdLastTrStat(1);
	if(UsbSendDescF)
		UsbSendDesc();
		
}

void D12Ep2IntProc()
{
	D12SetEpStat(2, D12EpStall);
}

void D12Ep3IntProc()
{
	D12SetEpStat(3, D12EpStall);
}

void D12Ep4IntProc()
{
	U8 size;
	U8 Ep2OutBuf[Ep2PacketSize];

	D12RdLastTrStat(4);	
	size = D12RdEp(4, Ep2OutBuf, Ep2PacketSize);
	if((size==6)&&(*(U32 *)Ep2OutBuf==0x12345678)) {
		LedSet(Ep2OutBuf[4]);
		//printf("%x\n", Ep2OutBuf[4]+(Ep2OutBuf[5]<<8));
	}
}

void D12Ep5IntProc()
{
}

void D12BusRstProc()
{
}

void D12SuspChgProc()
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩 欧美一区二区三区| 欧美高清激情brazzers| 欧美经典一区二区| 国产成人日日夜夜| 国产精品你懂的在线| av毛片久久久久**hd| 亚洲免费在线播放| 欧美日韩你懂得| 美国十次综合导航| 亚洲国产精品精华液2区45| av电影在线观看一区| 一区二区三区**美女毛片| 欧美丰满一区二区免费视频| 日本美女一区二区三区视频| 久久无码av三级| 成人av片在线观看| 亚洲成年人影院| 26uuu欧美| 91香蕉视频黄| 蜜臀av一级做a爰片久久| 久久婷婷久久一区二区三区| av资源站一区| 午夜精品久久久久久久久| 日韩精品专区在线影院观看| 粉嫩av亚洲一区二区图片| 亚洲一区二区三区在线看| 日韩欧美国产wwwww| 成人激情免费网站| 婷婷国产在线综合| 国产日韩精品一区二区浪潮av | 日韩av网站在线观看| 91麻豆精品国产91久久久久| 国产一区二区三区四| 亚洲一区二区精品3399| 国产欧美日韩中文久久| 欧美精品亚洲一区二区在线播放| 国产一区二区视频在线播放| 一区二区三区在线观看视频| 精品久久久久久久人人人人传媒 | 色偷偷久久人人79超碰人人澡| 午夜在线电影亚洲一区| 中文字幕欧美三区| 91精品国产色综合久久ai换脸| 成人综合婷婷国产精品久久蜜臀 | 日韩欧美国产一区在线观看| 91首页免费视频| 国产一区二区女| 天天射综合影视| 亚洲精品ww久久久久久p站| 国产午夜精品久久久久久久 | 国产精品国产三级国产专播品爱网| 欧美日韩免费一区二区三区 | 亚洲综合视频在线| 国产女人aaa级久久久级 | 国产一区在线精品| 亚洲高清免费一级二级三级| 中文字幕人成不卡一区| 精品国精品自拍自在线| 欧美高清性hdvideosex| 色狠狠综合天天综合综合| 国产91丝袜在线播放九色| 美国一区二区三区在线播放| 午夜欧美一区二区三区在线播放| 日韩伦理免费电影| 中文字幕第一区二区| 亚洲精品在线电影| 欧美刺激脚交jootjob| 日韩一级黄色大片| 91精品中文字幕一区二区三区| 欧洲一区二区三区免费视频| 91日韩一区二区三区| 91网站视频在线观看| 成人午夜私人影院| 国产精品99久久久久久似苏梦涵 | 国产日本一区二区| 久久久影视传媒| 精品国产乱子伦一区| 日韩欧美国产一二三区| 日韩精品最新网址| 精品国产a毛片| www激情久久| 国产午夜亚洲精品不卡| 国产精品视频观看| 国产精品蜜臀在线观看| 中文字幕中文字幕中文字幕亚洲无线| 国产免费观看久久| 最新国产の精品合集bt伙计| 日韩美女啊v在线免费观看| 亚洲视频小说图片| 亚洲综合色网站| 亚洲一区二区三区国产| 天堂av在线一区| 麻豆精品一区二区三区| 九九精品一区二区| 国产河南妇女毛片精品久久久| 成人中文字幕合集| 色国产精品一区在线观看| 欧美三级日韩三级| 日韩美女主播在线视频一区二区三区| 欧美精品一区二区久久婷婷| 亚洲国产精品成人久久综合一区| 中文字幕亚洲区| 亚洲国产wwwccc36天堂| 国内一区二区在线| 99这里只有久久精品视频| 欧美在线观看视频一区二区三区| 69堂精品视频| 欧美国产激情一区二区三区蜜月| 亚洲女与黑人做爰| 毛片一区二区三区| 99riav一区二区三区| 欧美日韩国产天堂| 国产亚洲成年网址在线观看| 亚洲男帅同性gay1069| 日日摸夜夜添夜夜添精品视频 | 奇米影视7777精品一区二区| 国产精品资源站在线| 色综合夜色一区| 91精品国产综合久久小美女| 国产视频911| 亚洲国产另类精品专区| 国产成人免费视频网站| 精品视频在线视频| 国产午夜精品一区二区三区四区| 亚洲国产日韩综合久久精品| 国产综合色在线视频区| 欧美亚日韩国产aⅴ精品中极品| 欧美r级在线观看| 亚洲一线二线三线久久久| 国产专区综合网| 欧美午夜精品久久久久久孕妇 | 中文字幕在线不卡一区二区三区| 午夜国产不卡在线观看视频| 丁香啪啪综合成人亚洲小说| 欧美日韩精品一区二区三区| 国产精品久久久久婷婷| 精品一区二区三区蜜桃| 欧美日韩一区成人| 亚洲图片你懂的| 国产一区二区美女| 日韩欧美国产综合在线一区二区三区| 亚洲精选在线视频| 成人综合婷婷国产精品久久免费| 日韩欧美精品在线视频| 日韩中文字幕麻豆| 在线观看成人小视频| 最新国产成人在线观看| 国产东北露脸精品视频| 欧美成人欧美edvon| 日韩高清不卡一区二区| 欧美系列一区二区| 亚洲激情综合网| 91亚洲精品一区二区乱码| 欧美激情艳妇裸体舞| 国产精品1区2区3区在线观看| 91精品国产入口在线| 香蕉久久夜色精品国产使用方法 | 欧美精品一区视频| 美女视频黄免费的久久 | 激情都市一区二区| 欧美一区二区黄色| 午夜精品影院在线观看| 欧美亚洲一区三区| 亚洲黄色小视频| 色国产综合视频| 亚洲一区二区三区爽爽爽爽爽 | 国产精品国产三级国产有无不卡| 国产精品91一区二区| 国产日产欧美精品一区二区三区| 国产一区二区三区在线观看免费| 久久品道一品道久久精品| 韩国女主播成人在线| 久久久久久99精品| 成熟亚洲日本毛茸茸凸凹| 亚洲国产精品v| 色综合久久综合网| 亚洲影视在线播放| 91精品国产入口在线| 美女视频黄久久| 国产免费成人在线视频| 一本在线高清不卡dvd| 一区二区三区在线不卡| 欧美日韩精品是欧美日韩精品| 亚洲国产成人av好男人在线观看| 91精品国产乱| 国内成人精品2018免费看| 国产欧美精品一区二区三区四区 | 五月综合激情婷婷六月色窝| 日韩一区二区三区电影在线观看 | 国内精品久久久久影院薰衣草| 久久五月婷婷丁香社区| aaa亚洲精品| 亚洲一区二区三区爽爽爽爽爽| 欧美一级高清片| 国产aⅴ综合色| 亚洲制服丝袜在线| 精品少妇一区二区三区日产乱码| 国产成人在线视频免费播放| 亚洲精品日韩综合观看成人91| 欧美麻豆精品久久久久久|