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

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

?? __isr.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 "HAL.H"
#include "USBD12.H"
#include "ZBoard.H"
#include "USB110.H"
#include "USB.H"
#include "VDOR.H"

/*
//***********************************************************
// These functions is use for USB ISR routine
//***********************************************************
*/

void ISRx_Bus_Reset(void);

void ISRx_EP0_TxDone(void);
void ISRx_EP0_RxDone(void);

void ISRx_EP1_TxDone(void);
void ISRx_EP1_RxDone(void);

void ISRx_Main_TxDone(void);
void ISRx_Main_RxDone(void);

void ISRx_DMA_EOT(void);

void ISRx_FN_USB(void);

/*
//*************************************************************************
//  Public static data
//*************************************************************************
*/

extern ZBOARDFLAGS bZBoardFlags;
unsigned char nCount = 0;
/* Control endpoint TX/RX buffers */
extern CONTROL_XFER ControlData;
extern CODE_DATA idata CodeData;

/* General Buffer*/
unsigned char idata GenBuf[GENBUF_LENGH];

/* ISR static vars */
unsigned long lClockTicks = 0;

// This variable is used for debugging
unsigned char nFlashPhase = 0;

void ISR_Timer2(void) interrupt 5
{
}

void ISR_COMM(void) interrupt 4
{
}

void ISR_Timer1(void) interrupt 3
{
}

void ISR_INT1(void) interrupt 2
{
}

void ISR_Timer0(void) interrupt 1
{
	DISABLE_INTERRUPTS;
	lClockTicks ++;
	bZBoardFlags.bits.bTimer = 1;
	nCount ++;
	if(bZBoardFlags.bits.bLED == LED_FLASH)
		IO_LED ^= 1;
	ENABLE_INTERRUPTS;
}


void ISR_INT0(void) interrupt 0
{
	DISABLE_INTERRUPTS;
	ISRx_FN_USB();
	ENABLE_INTERRUPTS;
}

void ISRx_FN_USB()
{
	unsigned int nST;

	bZBoardFlags.bits.bIN_ISR = 1;

	nST = USBD12_ReadInterruptRegister();

#ifdef _DEBUG
	printf("USBD12_ReadInterruptRegister() = 0x%02x\n", nST);
#endif

	if(nST != 0)
    	{
		if(nST & USBD12_INT_BUSRESET)
        	{
			ISRx_Bus_Reset();
			bZBoardFlags.bits.bBus_Reset = 1;
		}

		if(nST & USBD12_INT_EOT)
			ISRx_DMA_EOT();

		if(nST & USBD12_INT_SUSPENDCHANGE)
		{
			bZBoardFlags.bits.bSuspend = 1;
		}

		if(nST & USBD12_INT_ENDP0IN)
			ISRx_EP0_TxDone();
		if(nST & USBD12_INT_ENDP0OUT)
			ISRx_EP0_RxDone();
		if(nST & USBD12_INT_ENDP1IN)
			ISRx_EP1_TxDone();
		if(nST & USBD12_INT_ENDP1OUT)
			ISRx_EP1_RxDone();
		if(nST & USBD12_INT_ENDP2IN)
			ISRx_Main_TxDone();
		if(nST & USBD12_INT_ENDP2OUT)
			ISRx_Main_RxDone();
	}

	bZBoardFlags.bits.bIN_ISR = 0;

}

void ISRx_Bus_Reset(void)
{

}

// OUT Packet
void ISRx_EP0_RxDone(void)
{

	unsigned char ep_last, i;

	ep_last = USBD12_ReadLastTransactionStatus(0); // Clear interrupt flag

	if(ep_last & USBD12_SETUPPACKET)
	{
		ControlData.wLength = 0;
		ControlData.wCount = 0;

		if( USBD12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
			(unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) )
		{

			USBD12_SetEndpointStatus(0, 1);
			USBD12_SetEndpointStatus(1, 1);
			bZBoardFlags.bits.bControl_State = USB_IDLE;
			
			return;
		}

		ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
		ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
		ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);

		// Acknowledge setup here to unlock in/out endp
		USBD12_AcknowledgeEndpoint(0);
		USBD12_AcknowledgeEndpoint(1);

		ControlData.wLength = ControlData.DeviceRequest.wLength;
		ControlData.wCount = 0;

		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
		{
			bZBoardFlags.bits.bSetup_Packet = 1;
			bZBoardFlags.bits.bControl_State = USB_IDLE;		/* get command */
		}
		else
		{
			if (ControlData.DeviceRequest.wLength == 0)
			{
				bZBoardFlags.bits.bSetup_Packet = 1;
				bZBoardFlags.bits.bControl_State = USB_IDLE;		/* set command */
			}
			else
			{
				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE)
				{
					bZBoardFlags.bits.bControl_State = USB_IDLE;
					USBD12_SetEndpointStatus(0, 1);
					USBD12_SetEndpointStatus(1, 1);
				}
				else
				{
					bZBoardFlags.bits.bControl_State = USB_RECEIVE;	/* set command with OUT token */
				}
			} // set command with data
		} // else set command
	} // if setup packet
	else if (bZBoardFlags.bits.bControl_State == USB_RECEIVE)
	{
		i =	USBD12_ReadEndpoint(0, ControlData.dataBuffer + ControlData.wCount,
			EP0_PACKET_SIZE);

		ControlData.wCount += i;
		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
		{
			bZBoardFlags.bits.bSetup_Packet = 1;
			bZBoardFlags.bits.bControl_State = USB_IDLE;
		}
	}
	else
	{
		bZBoardFlags.bits.bControl_State = USB_IDLE;
	}
}

// IN Packet
void ISRx_EP0_TxDone(void)
{
#ifdef _DEBUG
	int j;
#endif
	short i = ControlData.wLength - ControlData.wCount;

	USBD12_ReadLastTransactionStatus(1); // Clear interrupt flag

	if(bZBoardFlags.bits.bControl_State != USB_TRANSMIT)
		return;

	if(i >= EP0_PACKET_SIZE)
	{
#ifdef _DEBUG
		printf("EP0Tx {");
		for(j=0; j<EP0_PACKET_SIZE; j++)
		{
			printf("%bx ", *(ControlData.pData + ControlData.wCount + j));
		}
		printf("}\n");
#endif
		USBD12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
		ControlData.wCount += EP0_PACKET_SIZE;

		bZBoardFlags.bits.bControl_State = USB_TRANSMIT;
	}
	else if(i != 0)
	{
#ifdef _DEBUG
		printf("EP0Tx {");
		for(j=0; j<i; j++)
		{
			printf("%bx ", *(ControlData.pData + ControlData.wCount + j));
		}
		printf("}\n");
#endif
		USBD12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
		ControlData.wCount += i;

		bZBoardFlags.bits.bControl_State = USB_IDLE;
	}
	else if (i == 0)
	{
#ifdef _DEBUG
		printf("EP0Tx { }\n");
#endif
		USBD12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???

		bZBoardFlags.bits.bControl_State = USB_IDLE;
	}
}

// End of DMA transfer
void ISRx_DMA_EOT(void)
{
}

// OUT Packet
void ISRx_EP1_RxDone(void)
{
}

// IN Packet
void ISRx_EP1_TxDone(void)
{
}

// OUT Packet
void ISRx_Main_RxDone(void)
{
	unsigned short nLen;

	nLen = USBD12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
	if(!(nLen & USBD12_SUCCESS))
		return;

	nLen = CodeData.wCodeLength - CodeData.wCodeCount;
	nFlashPhase ++;
	if(nLen != 0)
	{
//READ_DATA:
		nLen = USBD12_ReadEndpoint(4, CodeData.pCodeData, sizeof(GenBuf));
//		nLen = USBD12_ReadMainEP(/*CodeData.pCodeData*/);
#ifdef _DEBUG
		printf("EP2 ISR nLen = 0x%02x\n", nLen);
#endif

		CodeData.wCodeCount += nLen;
		CodeData.pCodeData += nLen;
		if(CodeData.pCodeData > (GenBuf + sizeof(GenBuf) / 2))
			CodeData.pCodeData = GenBuf;
//		if(CodeData.pCodeData > (GenBuf + sizeof(GenBuf)))
//			CodeData.pCodeData = GenBuf + (CodeData.pCodeData - (GenBuf + sizeof(GenBuf)));

		if(CodeData.wCodeCount && (CodeData.wCodeCount % 128 == 0))
		{
#ifdef _DEBUG
			printf("FlashWrite\n");
#endif
			FlashWrite(GenBuf, CodeData.wCodeAddress, sizeof(GenBuf));
			CodeData.wCodeAddress += sizeof(GenBuf);
		}

/*
		if(((CodeData.wCodeLength - CodeData.wCodeCount) <= 64) &&
			(CodeData.wCodeLength - CodeData.wCodeCount) &&
			nLen)
		{
			goto READ_DATA;
		}
*/
	}
	else
		nLen = USBD12_ReadEndpoint(4, CodeData.pCodeData, sizeof(GenBuf));
}

// IN Packet
void ISRx_Main_TxDone(void)
{
	unsigned short nLen;

	USBD12_ReadLastTransactionStatus(5); /* Clear interrupt flag */

	nLen = CodeData.wCodeLength - CodeData.wCodeCount;
	if(nLen != 0)
	{
		if(nLen > EP2_TX_FIFO_SIZE)
			nLen = EP2_TX_FIFO_SIZE;

		FlashRead(CodeData.wCodeAddress, CodeData.pCodeData, nLen);
		nLen = USBD12_WriteEndpoint(5, CodeData.pCodeData, nLen);

		CodeData.pCodeData += nLen;
		if(CodeData.pCodeData > (GenBuf + sizeof(GenBuf) / 2))
			CodeData.pCodeData = GenBuf;
		CodeData.wCodeCount += nLen;
		CodeData.wCodeAddress += nLen;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一av色| 欧美激情一区二区在线| 欧美在线观看你懂的| av在线一区二区三区| 国产精品一区二区x88av| 国产精品1区2区3区在线观看| 奇米四色…亚洲| 亚洲成在人线在线播放| 日本不卡123| 韩国理伦片一区二区三区在线播放| 日本aⅴ亚洲精品中文乱码| 日韩中文字幕麻豆| 精品一区二区三区蜜桃| 国产一区视频网站| 成人一区二区视频| 欧美性生活影院| 日韩一区二区在线看| 久久久久久久久伊人| 国产精品第一页第二页第三页| 综合色天天鬼久久鬼色| 婷婷夜色潮精品综合在线| 日韩理论片网站| 成a人片亚洲日本久久| 日产欧产美韩系列久久99| 视频一区欧美精品| 精品一区二区三区免费观看 | 精品午夜久久福利影院| 国产一区二区三区久久久| 99精品视频在线观看| 成人性色生活片| 成人综合在线观看| 91原创在线视频| 69堂成人精品免费视频| 国产日韩欧美在线一区| 五月婷婷久久综合| 成人免费av资源| 欧美一二三四在线| 日本一区二区成人在线| 天堂午夜影视日韩欧美一区二区| 国产真实乱对白精彩久久| 欧美中文字幕久久| 国产日韩精品久久久| 一区二区三区免费网站| 高清成人免费视频| 91精品国产综合久久久久久漫画| 国产精品网友自拍| 日本不卡视频在线观看| 色综合天天综合| 国产人成一区二区三区影院| 亚洲高清一区二区三区| 高潮精品一区videoshd| 日韩午夜三级在线| 亚洲男人天堂一区| 成人一区二区视频| 久久品道一品道久久精品| 蜜臀av一区二区在线免费观看| 成人开心网精品视频| 久久这里只有精品首页| 欧美aⅴ一区二区三区视频| 在线观看91视频| 亚洲六月丁香色婷婷综合久久 | 在线免费观看一区| 在线精品观看国产| 欧美激情自拍偷拍| 国产一区二区在线看| 7777精品伊人久久久大香线蕉的| 亚洲欧洲精品成人久久奇米网| 国产在线观看一区二区| 精品欧美一区二区久久| 亚洲成人黄色小说| 欧美中文字幕不卡| 亚洲电影欧美电影有声小说| 91在线国产福利| 1024成人网| 91麻豆国产在线观看| 亚洲精品一二三四区| 亚洲欧洲精品一区二区三区不卡| 国产麻豆成人传媒免费观看| 久久综合九色综合欧美就去吻 | 亚洲男人天堂av网| 91视频精品在这里| 一区二区激情小说| 欧洲色大大久久| 日本人妖一区二区| 精品久久人人做人人爱| 国产成人综合亚洲网站| 国产精品麻豆欧美日韩ww| av一区二区三区四区| 亚洲精品国产第一综合99久久| 色中色一区二区| 日韩国产成人精品| 久久精品一区二区三区四区| 大胆欧美人体老妇| 亚洲综合激情另类小说区| 欧美欧美午夜aⅴ在线观看| 久久99国内精品| 国产精品美女www爽爽爽| 色先锋久久av资源部| 免费成人在线观看| 国产欧美一区二区精品婷婷| 色综合久久中文字幕综合网| 日韩av一二三| 久久亚洲综合av| 91色porny蝌蚪| 麻豆精品国产91久久久久久| 国产欧美精品区一区二区三区| 国产不卡视频在线播放| 一区二区三区国产精品| 欧美成人video| 色呦呦日韩精品| 狠狠狠色丁香婷婷综合激情| 亚洲色图都市小说| 欧美mv日韩mv亚洲| 在线精品视频免费播放| 国产一区在线精品| 视频一区视频二区中文字幕| 国产精品色哟哟网站| 国产成人自拍网| 综合av第一页| 精品女同一区二区| 欧美综合欧美视频| av亚洲精华国产精华精| 美女视频黄久久| 亚洲综合在线视频| 国产欧美日本一区视频| 777欧美精品| 色诱视频网站一区| av一区二区三区在线| 国产精品一区二区91| 久久精品免费观看| 日韩激情中文字幕| 亚洲国产视频a| 一区二区欧美国产| 国产精品久久久爽爽爽麻豆色哟哟| 宅男在线国产精品| 欧美婷婷六月丁香综合色| 成人av第一页| 国产成人综合亚洲网站| 精品制服美女丁香| 麻豆精品国产传媒mv男同| 日韩中文欧美在线| 性感美女极品91精品| 亚洲一卡二卡三卡四卡无卡久久| 国产精品久久久久久福利一牛影视| 精品国产伦一区二区三区观看体验 | 日韩三级精品电影久久久 | 欧美亚洲一区二区在线| 成人app软件下载大全免费| 蜜臀久久久久久久| 亚洲第一成人在线| 亚洲第一久久影院| 亚洲一区二区欧美日韩| 亚洲另类春色校园小说| 亚洲激情一二三区| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品日韩一| 亚洲免费av在线| 亚洲色图视频网站| 亚洲与欧洲av电影| 日本在线不卡视频一二三区| 日韩精品成人一区二区在线| 青青草原综合久久大伊人精品优势| 日韩天堂在线观看| 日韩欧美高清一区| 国产性色一区二区| 综合电影一区二区三区 | 精品电影一区二区三区| 久久综合九色综合97婷婷| 久久久久成人黄色影片| 国产精品久久久久9999吃药| 亚洲欧美日本韩国| 图片区日韩欧美亚洲| 久久99精品久久只有精品| 国产一区二区三区在线观看免费 | 日韩国产一区二| 老司机精品视频在线| 成人免费视频视频在线观看免费| 日本高清无吗v一区| 色婷婷综合在线| 91麻豆精品国产91久久久久| 欧美电影免费观看高清完整版在 | 欧美mv和日韩mv国产网站| 国产欧美日韩激情| 亚洲自拍偷拍网站| 蜜桃av一区二区三区| 国产aⅴ综合色| 欧美亚洲国产一区在线观看网站| 日韩欧美国产一区二区在线播放| 国产亚洲综合性久久久影院| 亚洲午夜在线视频| 国产福利电影一区二区三区| 欧美色视频在线观看| 久久亚洲影视婷婷| 亚洲成人av中文| 成人免费视频国产在线观看| 日韩一区二区三区电影在线观看 | 欧美丰满高潮xxxx喷水动漫| 欧美国产精品一区| 热久久免费视频| 欧洲激情一区二区|