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

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

?? isr.c

?? 這是PDIUSBD12 smart開發板原版開發包
?? C
字號:
#include <stdio.h>
#include <string.h>

#include <reg51.h>                /* special function register declarations   */

#include "epphal.h"
#include "d12ci.h"
#include "mainloop.h"
#include "usb100.h"

extern void bus_reset(void);

extern void ep0_txdone(void);
extern void ep0_rxdone(void);

extern void ep1_txdone(void);
extern void ep1_rxdone(void);

extern void main_txdone(void);
extern void main_rxdone(void);

extern void dma_eot(void);

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

EPPFLAGS bEPPflags;

/* Control endpoint TX/RX buffers */
extern CONTROL_XFER ControlData;

/* ISR static vars */
unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
unsigned char idata EpBuf[EP2_PACKET_SIZE];
IO_REQUEST idata ioRequest;
unsigned char ioSize, ioCount;
unsigned long ClockTicks = 0;

extern BOOL bNoRAM;

//定時器0中斷處理
timer_isr() interrupt 1
{
	DISABLE;
	ClockTicks++;
	bEPPflags.bits.timer = 1;
	ENABLE;
}

//USB中斷處理
usb_isr() interrupt 0
{
	DISABLE;
	fn_usb_isr();
	ENABLE;
}

//USB中斷服務子程序
void fn_usb_isr()
{
	unsigned int i_st;

	bEPPflags.bits.in_isr = 1;

	i_st = D12_ReadInterruptRegister();//讀取中斷寄存器

	if(i_st != 0) {
		if(i_st & D12_INT_BUSRESET) {
			bus_reset();//USB總線服務
			bEPPflags.bits.bus_reset = 1;
		}

		if(i_st & D12_INT_EOT)
			dma_eot();//DMA傳輸結束

		if(i_st & D12_INT_SUSPENDCHANGE)
			bEPPflags.bits.suspend = 1;//掛起改變

		if(i_st & D12_INT_ENDP0IN)
			ep0_txdone();//端點0IN中斷
		if(i_st & D12_INT_ENDP0OUT)
			ep0_rxdone();//端點0OUT中斷
		if(i_st & D12_INT_ENDP1IN)
			ep1_txdone();//端點1IN中斷
		if(i_st & D12_INT_ENDP1OUT)
			ep1_rxdone();//端點1OUT中斷
		if(i_st & D12_INT_ENDP2IN)
			main_txdone();//端點2IN中斷
		if(i_st & D12_INT_ENDP2OUT)
			main_rxdone();//端點2OUT中斷
	}

	bEPPflags.bits.in_isr = 0;
}

//總線復位處理子程序
void bus_reset(void)
{
}

//端點0OUT中斷
void ep0_rxdone(void)
{
	unsigned char ep_last, i;

	ep_last = D12_ReadLastTransactionStatus(0); //清中斷標志

	if (ep_last & D12_SETUPPACKET) {
		//接收到SETUP包
		ControlData.wLength = 0;
		ControlData.wCount = 0;

		if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
			(unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
			//SETUP包出錯,返回
			D12_SetEndpointStatus(0, 1);
			D12_SetEndpointStatus(1, 1);
			bEPPflags.bits.control_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);

		//對控制端點的輸入/輸出進行應答
		D12_AcknowledgeEndpoint(0);
		D12_AcknowledgeEndpoint(1);

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

		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
			//從主機傳輸數據
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_TRANSMIT;		/* get command */
		}
		else {
			if (ControlData.DeviceRequest.wLength == 0) {
				bEPPflags.bits.setup_packet = 1;
				bEPPflags.bits.control_state = USB_IDLE;		/* set command */
			}
			else {
				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
					//接收數據長度為0
					bEPPflags.bits.control_state = USB_IDLE;
					D12_SetEndpointStatus(0, 1);
					D12_SetEndpointStatus(1, 1);
				}
				else {
					bEPPflags.bits.control_state = USB_RECEIVE;	//設置接收狀態
				}
			} // set command with data
		} // else set command
	} // if setup packet

	else if (bEPPflags.bits.control_state == USB_RECEIVE) {
		//接收數據
		i =	D12_ReadEndpoint(0, EP0_PACKET_SIZE,
			ControlData.dataBuffer + ControlData.wCount);
		ControlData.wCount += i;
		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
			//數據接收完畢
			bEPPflags.bits.setup_packet = 1;
			bEPPflags.bits.control_state = USB_IDLE;
		}
	}
	else {
		bEPPflags.bits.control_state = USB_IDLE;//進入等待狀態
	}
}

//端點0IN處理
void ep0_txdone(void)
{
	short i = ControlData.wLength - ControlData.wCount;
	D12_ReadLastTransactionStatus(1); //清中斷標志位
	if (bEPPflags.bits.control_state != USB_TRANSMIT) 
		return;//非發送狀態,返回

	if( i >= EP0_PACKET_SIZE) {
		//剩下數據大于16字節,發送16字節
		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
		ControlData.wCount += EP0_PACKET_SIZE;
		bEPPflags.bits.control_state = USB_TRANSMIT;
	}
	else if( i != 0) {
		//發送剩下數據
		D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
		ControlData.wCount += i;
		bEPPflags.bits.control_state = USB_IDLE;
	}
	else if (i == 0){
		D12_WriteEndpoint(1, 0, 0); //發送完畢,發送0字節
		bEPPflags.bits.control_state = USB_IDLE;
	}
}

//DMA結束處理
void dma_eot(void)
{
}

//端點1OUT處理
void ep1_txdone(void)
{
	D12_ReadLastTransactionStatus(3); //清中斷標志位
}

//端點1IN處理
void ep1_rxdone(void)
{
	unsigned char len;

	D12_ReadLastTransactionStatus(2); //清中斷標志位
	len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);//讀取數據
	if(len != 0)
		bEPPflags.bits.ep1_rxdone = 1;//標志接收到數據
}

//主端點OUT控制
void main_txdone(void)
{
//	unsigned char len,epstatus;

	D12_ReadLastTransactionStatus(5); //清中斷標志位
}

//主端點IN控制
void main_rxdone(void)
{
	unsigned char len,epstatus;

	D12_ReadLastTransactionStatus(4); //清中斷標志位

	//接收數據
	len = D12_ReadEndpoint(4, 64, EpBuf);
	epstatus=D12_ReadEndpointStatus(4);
	epstatus &= 0x60;
	if (epstatus == 0x60)
		len = D12_ReadEndpoint(4, 64, EpBuf);//讀取雙緩沖區數據
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国精品免费视频| 丁香婷婷综合五月| 国产精品色一区二区三区| 欧美中文一区二区三区| 国产在线精品国自产拍免费| 亚洲免费高清视频在线| 久久久久久久网| 911精品产国品一二三产区| 99精品视频一区二区| 久久国产精品免费| 午夜精品aaa| 伊人色综合久久天天人手人婷| 久久久另类综合| 日韩视频国产视频| 精品污污网站免费看| 91热门视频在线观看| 国产精品91xxx| 亚洲第一福利一区| 中文字幕佐山爱一区二区免费| 久久―日本道色综合久久| 91精品国产色综合久久ai换脸| 欧美中文字幕一区二区三区亚洲| 国产成人综合在线| 国产一区二区调教| 理论电影国产精品| 欧美a一区二区| 青青草国产精品亚洲专区无| 亚洲成年人网站在线观看| 一区二区三区欧美日韩| 成人免费在线播放视频| 中文一区一区三区高中清不卡| 欧美精品一区男女天堂| 精品少妇一区二区三区在线视频 | 国产成人激情av| 久久激情五月激情| 裸体歌舞表演一区二区| 免费成人在线观看| 奇米888四色在线精品| 蜜臀av一区二区在线免费观看 | 欧美日韩综合不卡| 欧美日精品一区视频| 欧美视频第二页| 在线电影国产精品| 日韩三级视频在线观看| 精品免费国产二区三区| 精品久久久久久久久久久久久久久 | 色婷婷一区二区三区四区| 91一区二区三区在线播放| 91亚洲精品乱码久久久久久蜜桃| 成人精品高清在线| 91首页免费视频| 91在线播放网址| 色狠狠桃花综合| 欧美日韩亚州综合| 日韩精品专区在线影院观看| 久久久久国产精品麻豆| 中文字幕一区二区三区在线观看| 最新高清无码专区| 亚洲电影一区二区三区| 日本亚洲最大的色成网站www| 另类小说图片综合网| 成人性生交大片免费看视频在线 | 91精品1区2区| 欧美日韩国产成人在线91 | 亚洲欧美日韩久久| 亚洲va国产va欧美va观看| 久久精品99国产精品日本| 国产成人在线免费观看| 91亚洲午夜精品久久久久久| 欧美人动与zoxxxx乱| 日韩精品一区二区三区四区| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩电影网1区2区| 福利一区二区在线| 欧美在线看片a免费观看| 日韩一区二区不卡| 中文字幕日韩一区| 亚洲123区在线观看| 国产精华液一区二区三区| 色综合天天狠狠| 日韩精品一区二区三区视频播放| 国产精品系列在线| 性感美女久久精品| 成人一道本在线| 3d动漫精品啪啪1区2区免费| 国产亲近乱来精品视频| 日韩国产精品久久久| 国产成人精品一区二区三区四区| 欧美系列一区二区| 国产午夜精品福利| 午夜精品在线视频一区| 不卡欧美aaaaa| 日韩美女视频在线| 亚洲自拍偷拍麻豆| 成人美女在线观看| 一区二区三区在线视频播放| 精品国产伦理网| 国产aⅴ综合色| 欧美日韩精品一区二区三区蜜桃 | 日韩精品一区二区三区老鸭窝 | 欧美区在线观看| 国产精品不卡视频| 老司机精品视频导航| 欧美三级电影精品| 中文字幕亚洲一区二区av在线 | 成人久久视频在线观看| 日韩免费成人网| 亚洲一本大道在线| 91蝌蚪porny| 欧美激情综合五月色丁香| 久久精品国产秦先生| 制服.丝袜.亚洲.另类.中文| 亚洲欧美另类久久久精品| 国产99久久久国产精品潘金| 欧美一级在线免费| 三级欧美韩日大片在线看| 色天天综合色天天久久| 最新热久久免费视频| 亚洲1区2区3区4区| 欧美日韩一区三区| 国产欧美一区二区三区在线看蜜臀| 亚洲成av人片观看| 亚洲视频免费在线观看| 国产成人精品三级| 久久久久久久网| 精品一区二区三区在线观看国产 | 三级成人在线视频| 欧美写真视频网站| 亚洲综合一区二区三区| 91小视频免费观看| 中文字幕中文字幕一区| 99在线精品一区二区三区| 国产精品女人毛片| 粉嫩在线一区二区三区视频| 久久色在线观看| 国产一区二区三区日韩| 久久综合九色综合久久久精品综合| 奇米影视一区二区三区| 日韩精品中文字幕在线不卡尤物| 日韩国产一二三区| 日韩欧美一级二级三级久久久| 美女一区二区久久| 精品剧情在线观看| 国产经典欧美精品| 中文字幕欧美一| 一本色道久久综合亚洲91| 欧美国产97人人爽人人喊| 日韩一二三四区| 中文一区二区完整视频在线观看| 国产成人午夜精品影院观看视频 | 国产一区亚洲一区| 久久久青草青青国产亚洲免观| 国产激情一区二区三区| 国产精品久久久久影院| 色综合久久综合网欧美综合网| 亚洲国产婷婷综合在线精品| 欧美人与z0zoxxxx视频| 理论电影国产精品| 中文字幕va一区二区三区| 在线免费不卡电影| 蜜臀久久99精品久久久久久9 | 国产精品全国免费观看高清| 99精品久久免费看蜜臀剧情介绍| 一区二区三区四区视频精品免费| 欧美日韩在线播放三区| 久久精品72免费观看| 国产农村妇女毛片精品久久麻豆| 国产精品无人区| 亚洲综合激情网| 欧美理论电影在线| 激情综合网激情| 1024成人网| 欧美疯狂性受xxxxx喷水图片| 久久精品99久久久| 亚洲欧美综合色| 7777精品伊人久久久大香线蕉超级流畅| 久久机这里只有精品| 亚洲视频一区在线观看| 日韩欧美电影一二三| 成人国产精品免费观看动漫 | 国产露脸91国语对白| 亚洲品质自拍视频网站| 日韩视频一区二区三区在线播放| 成人国产在线观看| 日本 国产 欧美色综合| 日本一区二区三区在线不卡| 欧美精品久久一区二区三区| 国产精品69毛片高清亚洲| 五月婷婷激情综合网| 欧美国产日韩亚洲一区| 91精品啪在线观看国产60岁| 成人h动漫精品一区二| 日本午夜精品一区二区三区电影 | 欧美亚洲动漫制服丝袜| 国产一区二区三区观看| 午夜免费欧美电影| 自拍偷拍亚洲综合| 久久精品日产第一区二区三区高清版 | 久久久激情视频| 欧美一区2区视频在线观看|