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

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

?? isr.c

?? PDIUSBD12的接口芯片固件程序 可直接使用
?? 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一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综| 欧美精品v国产精品v日韩精品| 欧美日韩高清一区二区三区| 亚洲免费观看高清完整版在线观看 | 亚洲综合久久久| 欧美中文字幕亚洲一区二区va在线| 玉足女爽爽91| 欧美一级理论片| 福利电影一区二区三区| 亚洲精品免费在线| 日韩视频在线永久播放| 丰满亚洲少妇av| 亚洲国产精品一区二区www在线| 欧美精品自拍偷拍动漫精品| 国产在线精品一区二区不卡了 | 成人avav影音| 夜夜揉揉日日人人青青一国产精品| 欧美日韩大陆一区二区| 韩国av一区二区| 一区二区三国产精华液| 日韩免费观看2025年上映的电影| 成人做爰69片免费看网站| 亚洲欧美国产三级| 精品国产污网站| 在线观看一区二区视频| 国产乱淫av一区二区三区| 亚洲日本丝袜连裤袜办公室| 91精品国产综合久久小美女 | 国产精品污污网站在线观看| 欧美一区日本一区韩国一区| 黑人巨大精品欧美黑白配亚洲| 亚洲视频免费在线观看| 亚洲精品在线观看网站| 色综合久久综合网欧美综合网 | 精品对白一区国产伦| 一本到不卡精品视频在线观看| 奇米影视一区二区三区小说| 日韩美女久久久| 久久在线观看免费| 欧美精品xxxxbbbb| 91电影在线观看| 丁香天五香天堂综合| 丝袜a∨在线一区二区三区不卡| 日本一区二区三区久久久久久久久不| 欧美日韩aaa| 欧美日韩一区小说| 91婷婷韩国欧美一区二区| 成人午夜av在线| 日产欧产美韩系列久久99| 一区二区三区自拍| 日韩理论片网站| 国产欧美一区视频| 久久久久久久久一| 久久九九全国免费| 久久综合九色综合久久久精品综合| 欧美久久久久免费| 欧美高清视频不卡网| 欧美日韩视频在线第一区| 色素色在线综合| 一本大道av一区二区在线播放| 成人免费视频视频| 成人教育av在线| 99在线精品一区二区三区| 成人免费视频播放| www.亚洲色图| thepron国产精品| 99久久精品免费看国产免费软件| 成人白浆超碰人人人人| 99在线热播精品免费| 一本色道a无线码一区v| 91丝袜呻吟高潮美腿白嫩在线观看| 成人午夜私人影院| 不卡在线观看av| 欧美在线|欧美| 欧美群妇大交群的观看方式 | 狠狠色丁香久久婷婷综合_中| 韩国欧美一区二区| 国产夫妻精品视频| 大胆亚洲人体视频| 欧洲精品视频在线观看| 欧美日本免费一区二区三区| 欧美一区二区三区精品| 久久综合久久鬼色中文字| 国产欧美精品区一区二区三区| 国产喷白浆一区二区三区| 亚洲欧洲日韩一区二区三区| 免费成人小视频| 激情综合五月婷婷| aaa欧美日韩| 欧美三级三级三级爽爽爽| 欧美v亚洲v综合ⅴ国产v| 中文字幕在线不卡一区| 日韩精品一二三| 成人sese在线| 日韩一区二区三免费高清| 国产精品久久久久三级| 日韩精品成人一区二区在线| 国产黄色成人av| 欧美日韩三级一区| 国产精品久久久久婷婷| 人妖欧美一区二区| 97精品久久久午夜一区二区三区| 欧美色精品在线视频| 国产视频一区不卡| 日韩和欧美一区二区| www.66久久| 精品电影一区二区三区| 亚洲一级二级三级| 成人中文字幕合集| 日韩一区二区视频| 亚洲精品乱码久久久久| 成人免费毛片片v| 欧美一区日韩一区| 亚洲一区二区精品3399| 成人高清免费在线播放| 亚洲精品一区二区三区香蕉| 亚洲第一福利视频在线| 91在线视频网址| 久久女同精品一区二区| 免费观看在线色综合| 欧美日韩一区二区三区四区| 日韩一区欧美一区| 成人蜜臀av电影| 久久欧美一区二区| 伦理电影国产精品| 欧美一区三区四区| 天天综合色天天综合| 欧美日韩中文字幕精品| 亚洲麻豆国产自偷在线| 成人黄色电影在线| 欧美国产欧美综合| 成人午夜免费av| 国产精品色哟哟网站| 丰满少妇久久久久久久| 亚洲国产成人午夜在线一区| 国产xxx精品视频大全| 国产亚洲一本大道中文在线| 国产一区二区三区免费播放| 精品国产乱码久久久久久闺蜜| 麻豆成人久久精品二区三区小说| 欧美剧在线免费观看网站 | 91 com成人网| 亚洲国产日产av| 欧美巨大另类极品videosbest| 亚洲一区二区三区三| 538在线一区二区精品国产| 奇米精品一区二区三区四区| 日韩欧美一级片| 国产一区二区三区免费看| 国产日本亚洲高清| 成人做爰69片免费看网站| 日本免费在线视频不卡一不卡二| 欧美另类高清zo欧美| 美女视频一区二区三区| 精品免费一区二区三区| 粉嫩一区二区三区性色av| 最新不卡av在线| 在线观看视频一区二区| 日韩专区一卡二卡| 久久久久久电影| 色婷婷av一区二区三区软件 | 欧美主播一区二区三区| 五月天亚洲婷婷| 精品国产乱码久久久久久浪潮| 丁香婷婷综合色啪| 一个色在线综合| 精品少妇一区二区三区| 91色|porny| 麻豆91在线播放免费| 国产精品不卡在线观看| 欧美日韩国产另类一区| 国模无码大尺度一区二区三区| 国产精品三级电影| 欧美日韩国产高清一区二区| 国产精品一区二区三区四区| 一区二区三区久久| 精品国产伦理网| 欧美在线视频你懂得| 日韩一区精品视频| 国产精品国产三级国产a| 777久久久精品| 成人综合婷婷国产精品久久| 亚洲成av人**亚洲成av**| 国产片一区二区| 欧美美女直播网站| a亚洲天堂av| 国产中文字幕一区| 夜夜精品浪潮av一区二区三区| 久久综合九色综合欧美亚洲| 在线欧美日韩精品| 粉嫩av一区二区三区粉嫩| 午夜电影网一区| 亚洲精品视频在线观看免费| 久久综合久久鬼色中文字| 欧美日韩一区二区三区免费看| 成人激情免费电影网址| 国模一区二区三区白浆| 日韩激情一二三区| 亚洲国产综合色| 国产精品免费视频观看|