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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? at91_svc_usbin.c

?? atmel arm9系列的USB與PC通信
?? C
字號:
//*----------------------------------------------------------------------------
//*      ATMEL Microcontroller Software Support  -  ROUSSET  -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name           : AT91_SVC_USBIN.c
//* Object              : DMA service for UDP peripheral
//*
//* 1.0 Jul 30 2002 	: ODi Creation
//*----------------------------------------------------------------------------
#include "AT91_SVC_USBIN.h"
#include "lib_AT91RM9200.h"

//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USBIN_Open
//* \brief Open USBIN service.
//*----------------------------------------------------------------------------
AT91PS_SVC_USBIN AT91F_SVC_USBIN_Open(
	AT91PS_SVC_USBIN pSvcUdp,  // \arg Pointer to an USBIN service previously allocated
	AT91PS_UDP pUdp,            // \arg Pointer to UDP registers
	unsigned char epNb,         // \arg Endpoint Number
	unsigned char epSize,       // \arg Endpoint Size
	unsigned char nbBanks)      // \arg UDP DPR banks
{
	pSvcUdp->Handler = AT91F_SVC_USBIN_Handler;
	pSvcUdp->Write   = AT91F_SVC_USBIN_Write;

	pSvcUdp->TxComplete    = (AT91PF_SVC_SVCUSBIN_TxComplete) 0;

	pSvcUdp->pBuffer = (char *) 0;
	pSvcUdp->bufferSize = 0;

	pSvcUdp->pUdp = pUdp;
	pSvcUdp->epNb = epNb;
	pSvcUdp->epSize = epSize;
	pSvcUdp->nbBank = nbBanks;
	pSvcUdp->eot    = 0;


	return pSvcUdp;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USBIN_Handler
//* \brief
//*----------------------------------------------------------------------------
void AT91F_SVC_USBIN_Handler(
	AT91PS_SVC_USBIN pSvcUdp)     // \arg Pointer to an USBIN service
{
	AT91PS_UDP    pUdp = pSvcUdp->pUdp; // Pointer to UDP registers
	unsigned char epNb = pSvcUdp->epNb; // Endpoint number
	unsigned int  epCsr =  AT91F_UDP_EpStatus(pUdp, epNb);
	unsigned int  bytesToSend;
	
	// Test if the previous DATA IN is achieved
	if (epCsr & AT91C_UDP_TXCOMP) {
		AT91F_UDP_EpClear(pUdp, epNb, AT91C_UDP_TXCOMP);
		// Test if this was the last packet to be sent
		if (pSvcUdp->eot) {
			AT91F_UDP_DisableIt(pUdp, (1 << epNb));
			if (pSvcUdp->TxComplete)
				pSvcUdp->TxComplete(pSvcUdp);
		}
		else {
			// Start the transmition of the previous prepared packet (ping pong endpoints)
			if (pSvcUdp->nbBank > 1)
				AT91F_UDP_EpEndOfWr(pUdp, epNb);
	
			if (pSvcUdp->bufferSize == 0)
				pSvcUdp->eot = 1;
			else {
				// Prepare the next packet
				bytesToSend = (pSvcUdp->bufferSize < pSvcUdp->epSize) ?
					pSvcUdp->bufferSize : pSvcUdp->epSize;
				pSvcUdp->bufferSize -= bytesToSend;
				while (bytesToSend--)
					AT91F_UDP_EpWrite(pUdp, epNb, *(pSvcUdp->pBuffer)++);
				// Start the transmition of the next prepared packet (no ping pong endpoints)
				if (pSvcUdp->nbBank == 1)
					AT91F_UDP_EpEndOfWr(pUdp, epNb);
			}
		}
	}

	// Test if a STALL has been acknowledged...
	else if (epCsr) { // !!!!! Should be: AT91C_UDP_STALLSENT) {
		AT91F_UDP_EpClear(pUdp, epNb, (epCsr));
	}

}


//*----------------------------------------------------------------------------
//* \fn    AT91F_SVC_USBIN_Write
//* \brief
//*----------------------------------------------------------------------------
void AT91F_SVC_USBIN_Write(
	AT91PS_SVC_USBIN pSvcUdp,     // \arg Pointer to an USBIN service
	const char *pBuffer,                 // \arg Pointer to the client buffer to send
	unsigned int bufferSize,       // \arg Client buffer size
	AT91PF_SVC_SVCUSBIN_TxComplete Callback) // \arg Callback to invoke when buffer is Sent
{
	AT91PS_UDP   pUdp = pSvcUdp->pUdp; // Pointer to UDP registers
	char epNb = pSvcUdp->epNb; // Endpoint number
	unsigned int  bytesToSend;

	pSvcUdp->TxComplete  = Callback;

	// Send a Zero Length Packet
	if (bufferSize == 0) {
		AT91F_UDP_EpEndOfWr(pUdp, epNb);
		pSvcUdp->eot = 1;
	}
	
	// Send just one packet
	else if (bufferSize <= pSvcUdp->epSize) {
		while (bufferSize--)
			AT91F_UDP_EpWrite(pUdp, epNb, *(pBuffer)++);
		// Allow this bank to be sent
		AT91F_UDP_EpEndOfWr(pUdp, epNb);
		pSvcUdp->eot = 1;
	}
	
	// Send a full packet and prepare the next one if (ping pong endpoints)
	else {
		bytesToSend = pSvcUdp->epSize;
		bufferSize -= bytesToSend;
		while (bytesToSend--)
			AT91F_UDP_EpWrite(pUdp, epNb, *(pBuffer)++);
		AT91F_UDP_EpEndOfWr(pUdp, epNb);
		if (pSvcUdp->nbBank > 1) {
			bytesToSend = (bufferSize > pSvcUdp->epSize) ?
				pSvcUdp->epSize : bufferSize;
			bufferSize -= bytesToSend;
			while (bytesToSend--)
				AT91F_UDP_EpWrite(pUdp, epNb, *(pBuffer)++);
		}
		pSvcUdp->pBuffer     = (char *)pBuffer;
		pSvcUdp->bufferSize  = bufferSize;
		pSvcUdp->eot     = 0;
	}
		
	AT91F_UDP_EnableIt(pUdp, (1 << epNb));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级av| 国产精品69久久久久水密桃| 综合亚洲深深色噜噜狠狠网站| 久久久久久久电影| 日韩精品一区在线观看| 欧美一级高清片| 91麻豆精品国产91久久久久| 制服.丝袜.亚洲.中文.综合| 337p亚洲精品色噜噜| 日韩欧美亚洲国产另类| 欧美精品一区二区三区久久久| 欧美精品一区二区久久婷婷| 久久久精品黄色| 国产精品乱人伦| 亚洲免费观看高清完整版在线观看 | 色婷婷精品久久二区二区蜜臂av| 国产福利电影一区二区三区| 国产精品资源在线看| 国产不卡在线一区| 欧美一区国产二区| 亚洲乱码国产乱码精品精可以看| 国产福利一区二区三区视频| 制服视频三区第一页精品| 亚洲欧美日韩在线不卡| 97精品电影院| 一区二区在线看| 91麻豆免费观看| 亚洲欧洲日韩女同| 成人毛片视频在线观看| 欧美激情一区三区| 国产成人精品午夜视频免费| 国产偷v国产偷v亚洲高清 | 亚洲精品videosex极品| 97精品电影院| 一区二区三区资源| 欧美性猛交xxxx黑人交| 亚洲一区二区三区中文字幕 | 精品成人佐山爱一区二区| 蜜乳av一区二区| 欧美mv日韩mv国产| 国产成人免费在线观看不卡| 国产欧美日韩在线| 91同城在线观看| 亚洲一二三区不卡| 欧美一区二区视频在线观看2022| 免费视频最近日韩| 欧美精品一区二| 成人av网站免费| 亚洲午夜一区二区| 欧美一级一区二区| 粉嫩av一区二区三区在线播放| 亚洲日本va在线观看| 欧美唯美清纯偷拍| 精品一区二区三区免费视频| 中文av一区二区| 欧美视频完全免费看| 麻豆视频一区二区| 亚洲视频在线观看三级| 在线不卡中文字幕| 国产高清不卡二三区| 亚洲一区欧美一区| 26uuu国产日韩综合| 欧美综合视频在线观看| 久久国产福利国产秒拍| 综合精品久久久| 精品免费视频.| 色狠狠一区二区三区香蕉| 激情综合网天天干| 一区av在线播放| 久久久精品tv| 欧美色图激情小说| 大胆欧美人体老妇| 蜜臀av性久久久久蜜臀aⅴ流畅| 中文字幕乱码久久午夜不卡| 欧美日韩国产欧美日美国产精品| 国产一区二区三区国产| 一个色综合av| 中文在线一区二区| 欧美一区二区日韩| 在线观看国产91| 高清日韩电视剧大全免费| 日韩经典中文字幕一区| 亚洲久本草在线中文字幕| 久久青草欧美一区二区三区| 欧美高清视频不卡网| 91亚洲精品久久久蜜桃网站| 精品一二线国产| 日日夜夜免费精品| 亚洲高清免费视频| 亚洲精品欧美综合四区| 中文欧美字幕免费| 久久久久久电影| 日韩欧美色综合网站| 欧美乱妇20p| 欧美亚洲精品一区| 91国偷自产一区二区三区成为亚洲经典| 久99久精品视频免费观看| 天天综合色天天| 亚洲成人av一区| 亚洲一区免费视频| 亚洲一区二区三区四区中文字幕| 亚洲视频网在线直播| 国产精品麻豆视频| 欧美国产综合一区二区| 国产亚洲午夜高清国产拍精品| 4438x亚洲最大成人网| 欧美精品丝袜中出| 欧美高清视频在线高清观看mv色露露十八 | 在线不卡中文字幕播放| 欧美日韩黄色影视| 欧美艳星brazzers| 欧美日韩一卡二卡三卡| 欧美精品视频www在线观看| 欧美日韩成人高清| 91精品欧美福利在线观看| 67194成人在线观看| 91精品黄色片免费大全| 欧美一区二区三区视频在线 | 日韩一区在线播放| 亚洲精品ww久久久久久p站| 亚洲制服丝袜一区| 亚洲一区在线视频观看| 青青草原综合久久大伊人精品 | 亚洲一区二区3| 亚洲成人激情自拍| 蜜臀av一区二区三区| 国产精品综合久久| caoporen国产精品视频| 一本大道久久a久久综合婷婷| 在线影视一区二区三区| 欧美精品久久久久久久多人混战| 91精品国产乱| 久久精品一区蜜桃臀影院| 国产精品情趣视频| 亚洲综合色婷婷| 捆绑调教一区二区三区| 国产激情偷乱视频一区二区三区| 91丝袜国产在线播放| 91精品欧美一区二区三区综合在| 久久久精品国产免大香伊| 亚洲人成7777| 男男gaygay亚洲| 成人av影视在线观看| 3d动漫精品啪啪一区二区竹菊 | 一级女性全黄久久生活片免费| 日韩成人精品在线| 国产91精品在线观看| 在线视频国内自拍亚洲视频| 日韩欧美不卡在线观看视频| 国产精品系列在线| 午夜在线成人av| 不卡的电影网站| 777奇米成人网| 中文字幕在线观看一区二区| 丝袜亚洲另类丝袜在线| 成人精品视频一区| 欧美日本国产视频| 亚洲欧洲精品天堂一级| 蜜臀国产一区二区三区在线播放| 99久久精品一区| 日韩一级二级三级| 亚洲综合区在线| 国产91对白在线观看九色| 欧美日韩欧美一区二区| 国产精品嫩草久久久久| 老司机精品视频线观看86| 日本韩国欧美一区二区三区| 26uuu色噜噜精品一区二区| 亚洲国产成人91porn| 99综合电影在线视频| 精品久久国产97色综合| 亚洲成人黄色影院| 91丨九色丨尤物| 国产精品天美传媒| 国产一区91精品张津瑜| 91精品久久久久久久99蜜桃| 亚洲一区二区在线免费看| 91小视频在线免费看| 国产日产欧美精品一区二区三区| 三级久久三级久久| 欧洲亚洲精品在线| 亚洲免费在线看| av福利精品导航| 久久久美女毛片| 国产一区不卡精品| www国产成人免费观看视频 深夜成人网| 亚洲国产综合在线| 色94色欧美sute亚洲线路二| 亚洲欧洲无码一区二区三区| 国产成人精品免费| 国产偷国产偷亚洲高清人白洁| 国产一区视频在线看| 欧美电影免费观看完整版| 美女mm1313爽爽久久久蜜臀| 欧美放荡的少妇| 天天操天天综合网| 9191久久久久久久久久久| 午夜亚洲福利老司机| 欧美高清精品3d| 六月丁香婷婷色狠狠久久|