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

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

?? __usb.c

?? C語言版的USB單片機固件源代碼
?? C
字號:
//===================================================================//
//     Project Name : ZBoard
//      Module Name : Master Firmware Program
//     Product Type : License
//      OS/Dev Tool : AT89C52, uVision 2
//  Original Author : Ray Yang
//     Organization : YBWork.com
//    Original Date : July, 25, 2001
//             Addr : Room 402, No. 131, Meilong No. 9
//              TEL : 86-21-54630718
//            EMail : rayyang2000@yahoo.com
//          Website : http://www.ybwork.com
//		  Copyright : Copyright (L) YBWork.com, 2001
//         Comments : 
//                    
//					<< History >> 
//					July, 25, 2001		The first release
//===================================================================//

#include "ZBoard.H"
#include "USB.H"
#include "USBD12.H"
#include "CHAP9.H"
#include "VDOR.H"
#include "HAL.H"

extern ZBOARDFLAGS bZBoardFlags;

/*
//*************************************************************************
// USB protocol function pointer arrays
//*************************************************************************
*/
code void (*StandardDeviceRequest[])(void) =
{
	USBClassRequest_GetStatus,			// 0
	USBClassRequest_ClearFeature,		// 1
	reserved,							// 2
	USBClassRequest_SetFeature,			// 3
	reserved,							// 4
	USBClassRequest_SetAddress,			// 5
	USBClassRequest_GetDescriptor,		// 6
	reserved,							// 7
	USBClassRequest_GetConfiguration,	// 8
	USBClassRequest_SetConfiguration,	// 9
	USBClassRequest_GetInterface,		// 10
	USBClassRequest_SetInterface,		// 12
	reserved,
	reserved,
	reserved,
	reserved
};

code void (*VendorDeviceRequest[])(void) =
{
	USBVendorRequest_WriteCode,
	USBVendorRequest_ReadCode,
//	USBVendorRequest_Write1SectorCode,
	reserved,
	USBVendorRequest_GetFlashPhase,
	USBVendorRequest_GetCodeData,
	reserved,
	USBVendorRequest_LEDON,
	USBVendorRequest_LEDOFF,
	USBVendorRequest_LEDFlash,
	reserved,
	reserved,
	reserved,
//	USBVendorRequest_ReadWriteRegister,
	reserved,      // Upper...
	reserved,
	reserved,
	reserved
};

/*
//*************************************************************************
//  Public static data
//*************************************************************************
*/
extern unsigned long data lClockTicks;

CONTROL_XFER data ControlData;

#ifdef _DEBUG
code char * _NAME_USB_REQUEST_DIRECTION[] =
{
"Host_to_device",
"Device_to_host"
};

code char * _NAME_USB_REQUEST_RECIPIENT[] =
{
"Device",
"Interface",
"Endpoint(0)",
"Other"
};

code char * _NAME_USB_REQUEST_TYPE[] =
{
"Standard",
"Class",
"Vendor",
"Reserved"
};

code char * _NAME_USB_STANDARD_REQUEST[] =
{
"GET_STATUS",
"CLEAR_FEATURE",
"RESERVED",
"SET_FEATURE",
"RESERVED",
"SET_ADDRESS",
"GET_DESCRIPTOR",
"SET_DESCRIPTOR",
"GET_CONFIGURATION",
"SET_CONFIGURATION",
"GET_INTERFACE",
"SET_INTERFACE",
"SYNC_FRAME"
};

void USB_Help_DevReq(unsigned char nType, unsigned char nReq)
{
	nType >>= 5;

	if(nType == USB_STANDARD_REQUEST)
    {
#ifdef _DEBUG
		printf("Request Type = %s, Request = %s.\n", _NAME_USB_REQUEST_TYPE[nType],
			_NAME_USB_STANDARD_REQUEST[nReq]);
#endif
	}
	else
    {
		if(bZBoardFlags.bits.bVerbose)
		{
#ifdef _DEBUG
			printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[nType],
				nReq);
#endif
		}
	}
}
#endif

/* Functions */
void USB_Suspend_Change(void)
{
}

void USB_Stall_EP0(void)
{
	USBD12_SetEndpointStatus(0, 1);
	USBD12_SetEndpointStatus(1, 1);
}

void USB_Disconnect(void)
{
	EX0 = 0;
	// Initialize D12 configuration
	USBD12_SetMode(USBD12_NOLAZYCLOCK | USBD12_CLOCKRUNNING,
        USBD12_SETTOONE | USBD12_CLOCK_12M);
}

void USB_Connect(void)
{
	// reset event flags
//	DISABLE_INTERRUPTS;
	bZBoardFlags.nValue = 0;
//	ENABLE_INTERRUPTS;

	USBD12_SetEndpointStatus(4, 0);
	USBD12_SetEndpointStatus(5, 0);
	// V2.1 enable normal+sof interrupt
	USBD12_SetDMA(USBD12_ENDP4INTENABLE | USBD12_ENDP5INTENABLE);

	// Initialize D12 configuration
	USBD12_SetMode(USBD12_NOLAZYCLOCK | USBD12_CLOCKRUNNING | USBD12_SOFTCONNECT, USBD12_SETTOONE | USBD12_CLOCK_12M);
	EX0 = 1;
}


void USB_Reconnect(void)
{
	unsigned long lClockCount;
	
	bZBoardFlags.bits.bIN_ISR = 1;

	USB_ClearAllInts();

#ifdef _DEBUG
	printf("Disconnect...\n");
#endif
	USB_Disconnect();

	Delay(0xff);
	ENABLE_INTERRUPTS;
	lClockCount = lClockTicks;
	while(lClockTicks < lClockCount + 20);
	DISABLE_INTERRUPTS;
	
	USB_Connect();

#ifdef _DEBUG
	printf("Connect...\n");
#endif
	bZBoardFlags.bits.bIN_ISR = 0;

}

void USB_Init_Unconfig(void)
{
	USBD12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
}

void USB_Init_Config(void)
{
	USBD12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
}

void USB_Single_Transmit(unsigned char* pBuf, unsigned char nLen)
{
#ifdef _DEBUG
	int i;
#endif
	if(nLen <= EP0_PACKET_SIZE)
    {
#ifdef _DEBUG
		printf("SingleTransmit {");
		for(i=0; i<nLen; i++)
		{
			printf("%bx ", *(pBuf + i));
		}
		printf("}\n");
#endif
		USBD12_WriteEndpoint(1, pBuf, nLen);
	}
}

void USB_Code_Transmit(unsigned char code* pRomData, unsigned short nLen)
{
#ifdef _DEBUG
	int i;
#endif

	ControlData.wCount = 0;
	if(ControlData.wLength > nLen)
		ControlData.wLength = nLen;

	ControlData.pData = pRomData;
	if(ControlData.wLength >= EP0_PACKET_SIZE)
    {

#ifdef _DEBUG
		printf("CodeTransmit {");
		for(i=0; i<EP0_PACKET_SIZE; i++)
		{
			printf("%bx ", *(ControlData.pData + i));
		}
		printf("}\n");
#endif

		USBD12_WriteEndpoint(1, ControlData.pData, EP0_PACKET_SIZE);
		ControlData.wCount += EP0_PACKET_SIZE;

		DISABLE_INTERRUPTS;
		bZBoardFlags.bits.bControl_State = USB_TRANSMIT;
		ENABLE_INTERRUPTS;
	}
	else
    {
#ifdef _DEBUG
		printf("CodeTransmit {");
		for(i=0; i<ControlData.wLength; i++)
		{
			printf("%bx ", *(pRomData + i ));
		}
		printf("}\n");
#endif
		USBD12_WriteEndpoint(1, pRomData, ControlData.wLength);
		ControlData.wCount += ControlData.wLength;
		DISABLE_INTERRUPTS;
		bZBoardFlags.bits.bControl_State = USB_IDLE;
		ENABLE_INTERRUPTS;
	}
}

void USB_Control_Handler()
{
	unsigned char nType, nReq;

	nType = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
	nReq = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;

#ifdef _DEBUG
    USB_Help_DevReq(nType, nReq); // print out device request
#endif

	if (nType == USB_STANDARD_REQUEST)
	{
		(*StandardDeviceRequest[nReq])();
	}
	else if (nType == USB_VENDOR_REQUEST)
		(*VendorDeviceRequest[nReq])();
	else
		USB_Stall_EP0();
}

void USB_ClearAllInts(void)
{
	USBD12_ReadInterruptRegister();
	USBD12_ReadLastTransactionStatus(0);
	USBD12_ReadLastTransactionStatus(1);
	USBD12_ReadLastTransactionStatus(2);
	USBD12_ReadLastTransactionStatus(3);
	USBD12_ReadLastTransactionStatus(4);
	USBD12_ReadLastTransactionStatus(5);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91综合网| 91美女片黄在线观看| kk眼镜猥琐国模调教系列一区二区| 日本韩国精品在线| 国产亚洲欧美色| 亚洲成人777| 99re66热这里只有精品3直播| 日韩你懂的在线播放| 亚洲综合图片区| 色综合久久88色综合天天6| 亚洲三级小视频| 欧美精品久久天天躁| 欧美日韩免费视频| 亚洲欧洲精品成人久久奇米网| 久久精品国产一区二区三区免费看| 成人精品视频一区二区三区| 日韩精品专区在线影院重磅| 亚洲最色的网站| 91丨porny丨最新| 欧美国产成人在线| 精品一区二区三区av| 91精品国产丝袜白色高跟鞋| 亚洲不卡在线观看| 欧洲一区二区三区免费视频| 亚洲日本免费电影| 99久久精品国产一区二区三区| 国产欧美日韩久久| 国产成人免费在线观看| 国产午夜亚洲精品不卡| 狠狠色狠狠色综合系列| 欧美精品一区二区精品网| 免费人成精品欧美精品| 欧美一级xxx| 久久99国产精品免费网站| 欧美一区二区视频在线观看2020| 天堂精品中文字幕在线| 在线电影国产精品| 免费成人在线影院| 精品蜜桃在线看| 国产一区二区三区在线观看精品| 久久亚洲一区二区三区四区| 精品一区二区在线视频| 久久精品视频免费观看| 北岛玲一区二区三区四区| 亚洲天天做日日做天天谢日日欢| 色婷婷精品大在线视频 | 国产精品拍天天在线| 午夜精品福利在线| 日韩美女在线视频| 国产精品一区二区三区网站| 中文无字幕一区二区三区| 懂色av一区二区在线播放| 中文字幕佐山爱一区二区免费| 色婷婷亚洲一区二区三区| 亚洲成a人在线观看| 日韩三级av在线播放| 国产乱子轮精品视频| 亚洲人亚洲人成电影网站色| 色综合久久中文字幕综合网| 性欧美大战久久久久久久久| 日韩精品一区二区三区视频播放 | 国产寡妇亲子伦一区二区| 国产精品久久夜| 在线观看日产精品| 久草在线在线精品观看| 中文字幕国产精品一区二区| 欧洲一区在线电影| 精品一区二区在线观看| 一区二区中文字幕在线| 欧美一三区三区四区免费在线看| 国产精品一区二区在线观看网站| 亚洲男人天堂一区| 欧美videossexotv100| 97精品视频在线观看自产线路二| 视频一区二区三区入口| 国产精品久久影院| 日韩欧美123| 日本道色综合久久| 国产伦理精品不卡| 午夜激情久久久| 国产精品免费看片| 精品蜜桃在线看| 欧美日韩在线播| 成人一级黄色片| 免费精品视频在线| 亚洲乱码国产乱码精品精可以看| 欧美电影免费提供在线观看| 91免费版pro下载短视频| 激情图片小说一区| 国产伦精品一区二区三区视频青涩 | 丝袜美腿亚洲色图| 亚洲色图欧洲色图婷婷| 亚洲精品一区二区在线观看| 欧洲中文字幕精品| 91小视频在线观看| 成人av在线资源网| 国产精品1024| 麻豆专区一区二区三区四区五区| 亚洲一区二区高清| 国产精品福利电影一区二区三区四区| 欧美一区2区视频在线观看| 91蜜桃传媒精品久久久一区二区| 国产精品一区二区无线| 久久99久久99精品免视看婷婷 | 在线看国产一区| 成人av午夜影院| 成人免费视频视频| 成人免费视频播放| 国产成人午夜高潮毛片| 国产自产2019最新不卡| 久久国内精品自在自线400部| 亚洲国产精品久久人人爱蜜臀| 亚洲欧美中日韩| 中文字幕一区av| 亚洲麻豆国产自偷在线| 亚洲色图在线看| 亚洲视频中文字幕| 亚洲精品一二三| 一区二区三区91| 香港成人在线视频| 免费人成在线不卡| 久久99国产精品免费网站| 精品一区二区在线视频| 国产精品亚洲第一| 成人国产在线观看| 91麻豆文化传媒在线观看| 色哟哟国产精品免费观看| 色激情天天射综合网| 精品视频在线免费观看| 在线成人小视频| 久久亚洲免费视频| 亚洲最大的成人av| 免费观看成人av| 国产一区二区在线影院| 成人短视频下载| 在线免费不卡电影| 日韩欧美一级片| 欧美激情综合五月色丁香小说| 综合网在线视频| 午夜成人在线视频| 国产在线精品一区二区| 波多野结衣91| 欧美高清精品3d| 久久久久久久免费视频了| 亚洲欧美一区二区三区国产精品 | 2021中文字幕一区亚洲| 久久亚洲一区二区三区四区| 国产精品视频一二| 亚洲va欧美va人人爽午夜| 精品一区二区久久| 99久久精品国产毛片| 6080日韩午夜伦伦午夜伦| 久久婷婷综合激情| 亚洲精品成人精品456| 麻豆成人综合网| 91麻豆免费在线观看| 欧美一区二区在线免费观看| 欧美激情一二三区| 日韩成人av影视| 99免费精品视频| 日韩欧美国产1| 有码一区二区三区| 国产成人精品亚洲777人妖| 欧美日韩中文精品| 国产精品每日更新| 久久激五月天综合精品| 欧美亚洲精品一区| 欧美激情一区在线观看| 琪琪一区二区三区| 欧美性受xxxx黑人xyx性爽| 久久久av毛片精品| 日韩电影在线免费看| 91网站在线播放| 国产欧美日本一区视频| 久久激五月天综合精品| 欧美日韩国产系列| 亚洲免费高清视频在线| 国产成人自拍在线| 精品欧美一区二区久久| 偷拍自拍另类欧美| 91极品美女在线| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品一区二区三区网站| 日韩丝袜情趣美女图片| 亚洲国产欧美一区二区三区丁香婷| 成人黄色综合网站| 国产日韩欧美a| 国产伦精品一区二区三区免费 | 91天堂素人约啪| 国产欧美日韩久久| 国产综合色产在线精品| 日韩三级中文字幕| 日韩电影在线一区| 51午夜精品国产| 日本午夜精品一区二区三区电影| 欧美性videosxxxxx| 亚洲国产乱码最新视频 | 伊人开心综合网| 色哦色哦哦色天天综合| 亚洲免费高清视频在线|