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

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

?? isr.c

?? 飛利浦 pusbd12 usb源代碼
?? 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一区二区三区免费野_久草精品视频
国产精品美女久久久久aⅴ | 国产欧美日韩在线观看| 91蜜桃视频在线| 麻豆成人综合网| 亚洲最大成人综合| 日本一区二区三区国色天香 | **欧美大码日韩| 精品国产乱码久久久久久老虎 | 国产乱一区二区| 日韩av在线免费观看不卡| 亚洲伦理在线精品| 国产亚洲午夜高清国产拍精品| 欧美美女激情18p| 91香蕉视频黄| 99久久国产综合精品麻豆| 国产精品影音先锋| 久久成人综合网| 日本特黄久久久高潮| 亚洲18色成人| 亚洲一区二区三区影院| 亚洲三级久久久| 亚洲欧洲精品一区二区精品久久久| 久久蜜桃av一区精品变态类天堂| 91精品国产高清一区二区三区蜜臀 | 一本色道久久综合亚洲aⅴ蜜桃| 美腿丝袜亚洲综合| 日日欢夜夜爽一区| 丝袜美腿亚洲一区二区图片| 亚洲成av人片在线观看| 亚洲综合男人的天堂| 亚洲欧洲综合另类| 亚洲欧美二区三区| 亚洲美女在线一区| 亚洲综合在线五月| 亚洲成人综合视频| 亚洲.国产.中文慕字在线| 午夜久久久影院| 日韩精品乱码免费| 老司机精品视频线观看86| 免费一区二区视频| 久久精品国产亚洲a| 国产真实乱偷精品视频免| 国产一区二区三区观看| 国产精品538一区二区在线| 国产精一品亚洲二区在线视频| 国产美女娇喘av呻吟久久| 国产高清无密码一区二区三区| 成人免费视频网站在线观看| 99久久夜色精品国产网站| 91女神在线视频| 欧美影院精品一区| 91精品国产免费| 久久亚洲一区二区三区明星换脸| 久久久不卡网国产精品一区| 国产精品福利一区| 亚洲国产日日夜夜| 美腿丝袜亚洲三区| 国产精品18久久久久| 成人久久久精品乱码一区二区三区| 99久久精品国产导航| 欧美日韩亚洲另类| 久久日一线二线三线suv| 中文字幕一区二区三区视频 | 亚洲男人天堂av网| 爽好久久久欧美精品| 激情文学综合丁香| 99久久精品国产一区| 欧美另类z0zxhd电影| 欧美tickling网站挠脚心| 中国色在线观看另类| 亚洲大片一区二区三区| 国产精品自拍在线| 91最新地址在线播放| 欧美日本一区二区三区四区| 久久精品亚洲乱码伦伦中文| 亚洲免费观看高清在线观看| 日韩1区2区日韩1区2区| 成人午夜视频在线观看| 欧美久久一二区| 国产精品福利在线播放| 亚洲狠狠爱一区二区三区| 国产在线观看免费一区| 色先锋久久av资源部| 日韩美女主播在线视频一区二区三区 | 亚洲成人av一区| 国产精品69毛片高清亚洲| 欧美日韩精品免费观看视频| 国产亚洲福利社区一区| 亚洲成a人片在线不卡一二三区| 高清成人在线观看| 欧美一级视频精品观看| 亚洲伦在线观看| 国产不卡在线播放| 日韩欧美精品在线| 亚洲午夜精品在线| 不卡av在线网| 亚洲精品一区二区三区福利 | 一区二区三区日韩在线观看| 国产一区二区美女| 日韩午夜中文字幕| 亚洲成av人片一区二区梦乃| 91免费版在线| 国产亚洲va综合人人澡精品| 亚洲一二三区不卡| 成人久久18免费网站麻豆| 精品国产网站在线观看| 天天综合网 天天综合色| 日本高清视频一区二区| 国产69精品久久久久毛片| 91麻豆精品国产91久久久久久久久 | 亚洲美女精品一区| 高清国产一区二区| 久久综合色之久久综合| 日韩va亚洲va欧美va久久| 欧美日韩成人在线| 亚洲一区在线观看免费| 99久久精品国产精品久久| 国产精品五月天| 国产一区二区伦理| 久久久国产午夜精品| 激情另类小说区图片区视频区| 在线不卡一区二区| 亚洲超碰精品一区二区| 在线欧美小视频| 一区二区激情视频| 色婷婷av一区二区三区软件| 亚洲免费观看视频| 一本色道久久综合狠狠躁的推荐| 亚洲国产精品v| www.成人网.com| 国产精品久久久99| av电影天堂一区二区在线观看| 欧美激情一区三区| 成人福利视频在线看| 国产精品欧美综合在线| www.亚洲色图.com| 亚洲精品v日韩精品| 欧美性做爰猛烈叫床潮| 午夜亚洲国产au精品一区二区| 欧美日韩亚洲丝袜制服| 日韩精品国产精品| 欧美岛国在线观看| 国产在线视频精品一区| 欧美精彩视频一区二区三区| 国产1区2区3区精品美女| 国产精品狼人久久影院观看方式| 99热精品一区二区| 亚洲综合男人的天堂| 欧美一区二区三区的| 久久99国产精品尤物| 欧美激情在线观看视频免费| 99精品热视频| 午夜成人免费视频| 青青草国产精品97视觉盛宴 | 欧美一区三区二区| 国产综合成人久久大片91| 中文在线一区二区 | 91精品麻豆日日躁夜夜躁| 精品一区二区三区久久| 久久精品视频一区二区| 99精品视频在线播放观看| 午夜视频在线观看一区| 久久久久久久久久久黄色| 99久久精品免费精品国产| 日日摸夜夜添夜夜添亚洲女人| 精品1区2区在线观看| 91在线视频观看| 免费的成人av| 自拍av一区二区三区| 91精品一区二区三区久久久久久| 国产高清成人在线| 一区二区三区在线视频播放| 日韩欧美第一区| 91免费看视频| 精品亚洲欧美一区| 综合色天天鬼久久鬼色| 91精品国产综合久久精品| 成人午夜激情片| 亚洲午夜精品17c| 国产欧美精品一区二区色综合| 色成人在线视频| 久久国产精品区| 亚洲乱码一区二区三区在线观看| 精品少妇一区二区三区日产乱码| 波多野结衣视频一区| 七七婷婷婷婷精品国产| 亚洲人亚洲人成电影网站色| 精品国产免费视频| 欧美三级三级三级| 99精品久久只有精品| 精品一区二区三区日韩| 一区二区三区日韩欧美| 久久精品人人做人人爽人人| 777欧美精品| 色综合视频在线观看| 国产九色sp调教91| 免费精品视频在线| 一个色综合网站| 亚洲四区在线观看| 欧美激情综合网|