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

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

?? d12driver.c

?? 周立功MagicARM2200-S USB_E2PROM編程
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	INT8U *pBuff,i,endpstatus;
	
	D12_ReadLastTransactionStatus(endp);					//復(fù)位中斷寄存器

	if (pUsb->Grp != 0){															
		if (pUsb->Cnt >= pUsb->Max[pUsb->Prio]){			//獨(dú)占任務(wù)全部數(shù)據(jù)寫入緩沖區(qū)
			endpstatus = D12_ReadEndpointStatus(endp) & 0x60;
			if (endpstatus == 0){							//緩沖區(qū)中的數(shù)據(jù)全部發(fā)送完畢
				pUsb->Sem  = 0;								//釋放該端點(diǎn)的發(fā)送資源
				pUsb->Max[pUsb->Prio] = 0;					//置正確發(fā)送標(biāo)志為0
				USB_DelPrio(pUsb,pUsb->Prio);				//將該任務(wù)從等待隊(duì)列中刪除
				if (pUsb->bSuspend[pUsb->Prio] == 1)
					OSTaskResume(pUsb->Prio);
				else	
					OSTimeDlyResume(pUsb->Prio);	    	//使該任務(wù)就緒
			}else
				return;
		}
	}
	else
  		return;
  	
  	if (pUsb->Grp != 0){									//還有任務(wù)在等待發(fā)送數(shù)據(jù)
    		if (pUsb->Sem == 0){							//該發(fā)送端點(diǎn)可以使用
			pUsb->Prio = USB_GetHighPrio(pUsb);
			pUsb->Cnt  = 0;									//發(fā)送計(jì)數(shù)清0
			pUsb->Sem  = 1; 								//使該任務(wù)獨(dú)占該發(fā)送資源
		}
		pBuff = pUsb->pBuff[pUsb->Prio];					//得到發(fā)送緩沖區(qū)指針

		for (i = 0; i < buffnums; i++){
			endpstatus = D12_ReadEndpointStatus(endp) & 0x60;
			if (endpstatus == 0x60)  break;					//如果緩沖區(qū)全部都滿,那么不可以再寫入
				
			len = pUsb->Max[pUsb->Prio] - pUsb->Cnt;
			if (len > 0){					   				//有空的緩沖區(qū)而且等待發(fā)送字節(jié)數(shù)大于0
				if (len >= eppsize)			   				//寫滿緩沖區(qū)
					len = D12_WriteEndpoint(endp,(INT8U)eppsize,pBuff + pUsb->Cnt); 
				else						   				//寫len個(gè)字節(jié)
					len = D12_WriteEndpoint(endp,(INT8U)len,pBuff + pUsb->Cnt);  
				pUsb->Cnt = pUsb->Cnt + len;      			//發(fā)送計(jì)數(shù)器加上實(shí)際上發(fā)送的字節(jié)
			}//end of if (len > 0)
		}//end of for()	
	}//end of if (pUsb->Grp != 0)	
}

/**********************************************************************************
** 函數(shù)名稱: INT8U USB_ReadPort(INT8U endp,CTRL_USB *pUsb,INT32U len,INT8U *recbuff,INT16U timeout)
** 功能描述: 讀端點(diǎn)函數(shù)
** 輸	 入: INT8U endp:	  端點(diǎn)索引號(hào)		
			 CTRL_USB *pUsb:  USB 接收與發(fā)送控制塊指針
			 INT32U     len:  接收字節(jié)個(gè)數(shù)
			 INT8U *recbuff:  接收緩沖區(qū)
			 INT16U	timeout:  等待超時(shí)時(shí)間
** 輸	 出: 0:	讀成功       > 0 讀失敗(錯(cuò)誤碼)
**********************************************************************************/
INT8U USB_ReadPort(INT8U endp, INT32U eppsize, INT8U buffnums, CTRL_USB *pUsb, INT32U len, INT8U *recbuff, INT16U timeout)
{
	INT8U err,i,endpstatus;
	INT32U length;
	INT8U *pbuf;
	
	OS_ENTER_CRITICAL();
	err = USB_RW_Param(pUsb, len, recbuff);						//填寫USB接收或發(fā)送控制塊參數(shù)
	if (err != USB_NO_ERR)
	{
		OS_EXIT_CRITICAL();
		return err;	
	}

	/***  如果端點(diǎn)接收緩沖區(qū)已經(jīng)有數(shù)據(jù), 執(zhí)行下面的程序 ****/
    if ((pUsb->Sem == 0) && (pUsb->NoTask == 1) && (pUsb->Grp != 0))
    {															//接收緩沖區(qū)中有數(shù)據(jù)
		pUsb->Sem  = 1;				    						//獨(dú)占該端點(diǎn)			
		pUsb->Cnt  = 0;											//發(fā)送計(jì)數(shù)值清0
		pUsb->Prio = USB_GetHighPrio(pUsb); 					//保存該任務(wù)優(yōu)先級(jí)
		pbuf = pUsb->pBuff[pUsb->Prio];
		
		for (i = 0; i < buffnums; i++){										
			length = pUsb->Max[pUsb->Prio] - pUsb->Cnt;			//計(jì)算未發(fā)送字節(jié)個(gè)數(shù)
			if (length > 0){									//未發(fā)送字節(jié)數(shù)大于0	
				if (length >= eppsize)							//寫滿緩沖區(qū)
					length = D12_ReadEndpoint(endp,(INT8U)eppsize,pbuf + pUsb->Cnt);
				else											//寫length個(gè)字節(jié)
		   			length = D12_ReadEndpoint(endp,(INT8U)length,pbuf + pUsb->Cnt);
		 		pUsb->Cnt = pUsb->Cnt + length;					//發(fā)送計(jì)數(shù)器加length
			}
			
			if (pUsb->Cnt >= pUsb->Max[pUsb->Prio]){
				pUsb->Max[pUsb->Prio] = 0;	
				pUsb->Sem  = 0;	
				USB_DelPrio(pUsb, pUsb->Prio);
				break;
			}
					
			endpstatus = D12_ReadEndpointStatus(endp); 			//讀該端點(diǎn)狀態(tài)寄存器
			if ((endpstatus & 0x60) == 0)  
				break;											//如果緩沖為空,立即跳出循環(huán)
		}

		pUsb->NoTask = 0; 
	}//end of if (pUsb->Sem == 0)
	OS_EXIT_CRITICAL();
	
	OS_ENTER_CRITICAL();
	if (pUsb->Max[OSPrioCur] != 0){								//如果還沒接收完成			  
		if (timeout != 0){
			pUsb->bSuspend[OSPrioCur] = 0;
			OSTimeDly(timeout);									//定義超時(shí)等待
		}
		else{
			pUsb->bSuspend[OSPrioCur] = 1;						//置位掛起標(biāo)志
			OSTaskSuspend(OSPrioCur);							
		}
	}	
	OS_EXIT_CRITICAL();											//已接收完成,開中斷	
	
	return (USB_RW_Result(endp,pUsb,timeout));	//返回接收結(jié)果
}

/*****************************************************************
** 函數(shù)名稱: INT8U USB_WritePort(INT8U endp,INT32U eppsize,INT8U buffnums,CTRL_USB *pUsb,
								 INT8U *sendbuff,INT32U len,INT16U timeout)
** 功能描述: 
** 輸	 入: INT8U endp		  : 端點(diǎn)索引號(hào)
			 INT32U eppsize   : 該端點(diǎn)的的信息包大小
			 INT8U buffnums   : 該端點(diǎn)發(fā)送緩沖區(qū)個(gè)數(shù)
			 CTRL_USB *pUsb   : 該端點(diǎn)的接收或發(fā)送控制塊指針
			 INT8U  *sendbuff : 發(fā)送數(shù)據(jù)字節(jié)指針
			 INT32U   len	  : 發(fā)送數(shù)據(jù)字節(jié)長(zhǎng)度
			 INT16U	timeout	  : 等待超時(shí)時(shí)間
** 輸	 出: 0   發(fā)送成功    > 0 發(fā)送失敗(錯(cuò)誤碼)
******************************************************************/
INT8U USB_WritePort(INT8U endp,INT32U eppsize,INT8U buffnums,CTRL_USB *pUsb,
					INT8U *sendbuff,INT32U len,INT16U timeout)
{
	INT8U err,i;
	INT32U length;
	
	OS_ENTER_CRITICAL();
	err = USB_RW_Param(pUsb,len,sendbuff);		//填寫USB接收或發(fā)送控制塊參數(shù)
	if (err != USB_NO_ERR)
	{
	   OS_EXIT_CRITICAL();
	   return err;
	}
	
    if (pUsb->Sem == 0){			  			//該端點(diǎn)沒有被獨(dú)占
		pUsb->Sem  = 1;				    		//獨(dú)占該端點(diǎn)
		pUsb->Cnt  = 0;							//發(fā)送計(jì)數(shù)值清0
		pUsb->Prio = OSPrioCur; 				//保存獨(dú)占該端點(diǎn)的任務(wù)優(yōu)先級(jí)

		for (i = 0; i < buffnums; i++){										
			length = pUsb->Max[pUsb->Prio] - pUsb->Cnt;	//計(jì)算未發(fā)送字節(jié)個(gè)數(shù)
			if (length > 0){							//未發(fā)送字節(jié)數(shù)大于0
				if (length >= eppsize)					//寫滿緩沖區(qū)
					length = D12_WriteEndpoint(endp,(INT8U)eppsize,sendbuff + pUsb->Cnt);
				else									//寫length個(gè)字節(jié)
		   			length = D12_WriteEndpoint(endp,(INT8U)length,sendbuff + pUsb->Cnt);
		 		pUsb->Cnt = pUsb->Cnt + length;			//發(fā)送計(jì)數(shù)器加length
			}
		}
	}//end of if (pUsb->Sem == 0)
	OS_EXIT_CRITICAL();
	
	OS_ENTER_CRITICAL();
	if (pUsb->Max[OSPrioCur] != 0){						//還未發(fā)送完成
		if (timeout != 0){
			pUsb->bSuspend[OSPrioCur] = 0;
			OSTimeDly(timeout);							//定義超時(shí)等待
		}
		else{
			pUsb->bSuspend[OSPrioCur] = 1;
			OSTaskSuspend(OSPrioCur);					//置位掛起標(biāo)志
		}
	}	
	OS_EXIT_CRITICAL();									//發(fā)送完成
	
	return (USB_RW_Result(endp,pUsb,timeout));  		//返回發(fā)送結(jié)果					
}

/*****************************************************************
** 函數(shù)名稱: INT8U USB_RW_Param(CTRL_USB *pUsb,INT32U len,INT8U *buff)
** 功能描述: 填寫USB接收或發(fā)送控制塊有關(guān)參數(shù)
** 輸	 入: CTRL_USB *pUsb   : USB接收或發(fā)送控制塊指針
			 INT32U len		  : 接收或發(fā)送字節(jié)數(shù)
			 INT8U *buff	  : 接收或發(fā)送緩沖區(qū)指針
** 輸	 出: 0   調(diào)用成功    > 0 調(diào)用失敗(錯(cuò)誤碼)
******************************************************************/
INT8U USB_RW_Param(CTRL_USB *pUsb,INT32U len,INT8U *pbuff)
{
	OS_ENTER_CRITICAL();
	if (bEPPflags.bits.configuration == 0){	//USB總線未配置完成
		OS_EXIT_CRITICAL();
		return (USB_ERR_NO_CONFIG);			//USB總線未配置錯(cuò)誤
	}
	if (pbuff == 0){     	
		OS_EXIT_CRITICAL();			    
		return (USB_ERR_BUFF_INVALID);		//緩沖區(qū)指針無(wú)效錯(cuò)誤
	}
	
	pUsb->pBuff[OSPrioCur] = pbuff;			//保存該任務(wù)的接收緩沖區(qū)首址
	pUsb->Max[OSPrioCur]   = len;			//保存要收發(fā)的字節(jié)數(shù)
	USB_InsertPrio(pUsb,OSPrioCur);			//插入等待任務(wù)列表中
	OS_EXIT_CRITICAL();
	
	return (USB_NO_ERR);
}

/*****************************************************************
** 函數(shù)名稱: INT8U USB_RW_Result(INT8U endp,CTRL_USB *pUsb,INT16U timeout)
** 功能描述: 判斷當(dāng)前任務(wù)的數(shù)據(jù)是否收發(fā)成功
** 輸	 入: INT8U endp		  : 端點(diǎn)索引號(hào)
			 CTRL_USB *pUsb   : USB接收或發(fā)送控制塊指針
			 INT16U timeout	  : 超過(guò)等待時(shí)間
** 輸	 出: 0   收發(fā)成功    > 0 收發(fā)失敗(錯(cuò)誤碼)
******************************************************************/
INT8U USB_RW_Result(INT8U endp,CTRL_USB *pUsb,INT16U timeout)
{	
	OS_ENTER_CRITICAL();	
	if (pUsb->Max[OSPrioCur] != 0){			//收發(fā)完成標(biāo)志不為0,說(shuō)明收發(fā)錯(cuò)誤
		if (pUsb->Prio == OSPrioCur){		//該任務(wù)占用了端點(diǎn)的收發(fā)資源
			pUsb->Sem = 0;					//必須釋放資源
			D12_ClearBuff(endp);			//清空收發(fā)緩沖區(qū)
		}
		USB_DelPrio(pUsb,OSPrioCur);		//將該任務(wù)從等待列表中刪除
		OS_EXIT_CRITICAL();
		return (USB_ERR_WR_TIMEOUT);		//收發(fā)超時(shí)錯(cuò)誤	
	}else{									
		OS_EXIT_CRITICAL();						
		return (USB_NO_ERR);				//收發(fā)成功
	}
}

/************************************************************
          下面的函數(shù)操作 USB接收或發(fā)送控制塊等待列表
*************************************************************/
/************************************************************
** 函數(shù)名稱:  void USB_DelPrio(CTRL_USB *pUsb,INT8U prio)
** 功能描述:  將一任務(wù)從USB接收或發(fā)送控制塊等待列表中刪除
** 輸   入:  CTRL_USB *pUsb:	USB接收或發(fā)送控制塊指針
			  INT8U prio:		刪除的任務(wù)的優(yōu)先級(jí)
** 輸   出:  無(wú)
************************************************************/
void USB_DelPrio(CTRL_USB *pUsb,INT8U prio)
{
	if ((pUsb -> Tbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0)
	     pUsb -> Grp &= ~OSMapTbl[prio >> 3];
}

/************************************************************
** 函數(shù)名稱:  void USB_InsertPrio(CTRL_USB *pUsb,INT8U prio)
** 功能描述:  將一任務(wù)插入到USB接收或發(fā)送控制塊等待列表中
** 輸   入:  CTRL_USB *pUsb:	USB接收或發(fā)送控制塊指針
			  INT8U prio:		插入任務(wù)的優(yōu)先級(jí)
** 輸   出:  無(wú)
************************************************************/
void USB_InsertPrio(CTRL_USB *pUsb,INT8U prio)
{
	pUsb -> Grp		 	   |= OSMapTbl[prio >> 3];
	pUsb -> Tbl[prio >> 3] |= OSMapTbl[prio & 0x07];
}

/*********************************************************************
** 函數(shù)名稱:  INT8U USB_GetHighPrio(CTRL_USB *pUsb)
** 功能描述:  取得USB接收或發(fā)送控制塊等待列表中優(yōu)先級(jí)最高的任務(wù)優(yōu)先級(jí)
** 輸   入:  CTRL_USB *pUsb:	USB 接收或發(fā)送控制塊指針
** 輸   出:  等待列表中優(yōu)先級(jí)最高的任務(wù)優(yōu)先級(jí)
**********************************************************************/
INT8U USB_GetHighPrio(CTRL_USB *pUsb)
{
	INT8U x,y;
	INT8U prio;

	y    = OSUnMapTbl[pUsb->Grp];
	x    = OSUnMapTbl[pUsb->Tbl[y]];
	prio = (INT8U)((y << 3) + x);
	return prio;
}


/*********************************************************************
** 函數(shù)名稱:  INT16U USB_Get_ZLGUSBD12_Ver()
** 功能描述:  取得 ZLG/USBD12 軟件包的固件版本號(hào)
** 輸   入:  NULL
** 輸   出:  固件版本號(hào)
**********************************************************************/
INT16U USB_Get_ZLGUSBD12_Ver(void)
{
	return 0x0150;					       //當(dāng)前固件軟件版本號(hào)為1.50
}




?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美一区二区| 日韩av午夜在线观看| 欧美日韩国产另类不卡| 国产一区91精品张津瑜| 一区二区三区日本| 国产精品沙发午睡系列990531| 欧美一区二区啪啪| 日本韩国欧美国产| 风间由美一区二区三区在线观看| 午夜久久久久久久久| 亚洲欧洲制服丝袜| 欧美高清在线一区二区| 欧美tickling网站挠脚心| 欧美三级视频在线| 91尤物视频在线观看| 大美女一区二区三区| 国内精品久久久久影院色| 五月综合激情婷婷六月色窝| 自拍偷拍欧美激情| 中文av一区二区| 久久久亚洲国产美女国产盗摄| 日韩写真欧美这视频| 欧美成人性战久久| 91精品久久久久久久久99蜜臂| 在线观看日韩高清av| 91浏览器在线视频| caoporen国产精品视频| 国产99久久久久久免费看农村| 精品亚洲免费视频| 毛片av中文字幕一区二区| 五月婷婷久久综合| 亚洲国产精品一区二区久久恐怖片 | 亚洲精选视频在线| 国产精品婷婷午夜在线观看| 久久久精品中文字幕麻豆发布| 日韩视频一区二区在线观看| 日韩欧美中文一区| 欧美一区二区三区人| 欧美一区二区免费观在线| 日韩一区二区三区视频在线| 欧美va亚洲va| 久久你懂得1024| 久久久精品影视| 欧美—级在线免费片| 中文字幕视频一区二区三区久| 国产精品久久网站| 亚洲欧美另类小说视频| 一区二区三区在线观看动漫| 亚洲午夜一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 日韩成人一区二区三区在线观看| 麻豆成人久久精品二区三区红| 久久疯狂做爰流白浆xx| 国产精品中文字幕欧美| www.日本不卡| 欧美亚洲一区二区三区四区| 制服丝袜亚洲色图| 精品国产在天天线2019| 国产精品网站在线观看| 亚洲精品视频在线观看网站| 午夜久久久久久久久久一区二区| 免费成人美女在线观看.| 国产乱码精品一区二区三| 成人av动漫网站| 欧美性xxxxx极品少妇| 欧美高清精品3d| 国产亚洲精品aa午夜观看| ...av二区三区久久精品| 亚洲第一久久影院| 国产在线精品一区二区夜色 | 日韩亚洲欧美高清| 日本一区二区三级电影在线观看| 亚洲人亚洲人成电影网站色| 视频一区二区中文字幕| 国产91在线|亚洲| 欧美亚洲动漫精品| 久久综合给合久久狠狠狠97色69| 国产精品免费免费| 五月综合激情日本mⅴ| 国产乱码精品一区二区三| 色94色欧美sute亚洲13| 日韩一级完整毛片| 1024亚洲合集| 久久成人精品无人区| 色哦色哦哦色天天综合| 精品99一区二区| 亚洲欧美成aⅴ人在线观看| 狠狠色狠狠色综合系列| 在线日韩国产精品| 国产日韩欧美高清| 日韩电影在线免费观看| bt欧美亚洲午夜电影天堂| 欧美大度的电影原声| 一级特黄大欧美久久久| 国产福利视频一区二区三区| 欧美日韩国产在线观看| 国产精品国产三级国产三级人妇| 美女尤物国产一区| 欧洲国内综合视频| 国产精品日韩成人| 裸体歌舞表演一区二区| 在线观看区一区二| 国产精品丝袜黑色高跟| 精品在线播放免费| 欧美日韩午夜影院| 亚洲女爱视频在线| 成人综合在线观看| 精品国产一区二区精华| 午夜精品久久久久久久99水蜜桃| 99v久久综合狠狠综合久久| 26uuu另类欧美| 蜜臀av一区二区在线免费观看| 欧美性大战久久久久久久| 最新不卡av在线| 成人听书哪个软件好| 久久综合中文字幕| 久久se精品一区二区| 91精品国产综合久久婷婷香蕉 | 蜜乳av一区二区| 欧美色精品天天在线观看视频| 亚洲精品中文字幕乱码三区| 国产成人免费xxxxxxxx| 久久―日本道色综合久久| 色哟哟国产精品免费观看| 国产欧美日本一区二区三区| 久久99九九99精品| 精品久久久影院| 久色婷婷小香蕉久久| 日韩精品一区二区三区中文精品| 视频一区二区欧美| 欧美一区二区视频免费观看| 肉色丝袜一区二区| 欧美军同video69gay| 日韩国产欧美在线播放| 日韩一区二区三区免费看| 蜜桃视频在线一区| 欧美精品一区二区三区高清aⅴ| 久久精品久久99精品久久| 精品国产不卡一区二区三区| 国内外成人在线视频| 久久蜜桃香蕉精品一区二区三区| 国内精品伊人久久久久影院对白| 久久精品人人做| 成人免费视频免费观看| 中文字幕在线不卡一区| 91成人在线精品| 视频一区免费在线观看| 欧美成人女星排名| 高清不卡在线观看| 亚洲色图在线视频| 欧美性色综合网| 免费人成在线不卡| 久久久午夜精品| 99re热视频这里只精品| 亚洲午夜羞羞片| 精品国精品国产| 99久久精品国产导航| 亚洲第一二三四区| 精品1区2区在线观看| 成人精品视频网站| 亚洲成人av中文| 久久女同互慰一区二区三区| 99国内精品久久| 日本美女一区二区| 欧美国产精品v| 欧美三级视频在线观看| 国产在线精品一区二区夜色 | 欧美一区二区性放荡片| 国产精品18久久久久| 一区二区三区四区不卡视频| 91.成人天堂一区| 国产成人在线看| 亚洲国产色一区| 久久精品人人爽人人爽| 欧美色综合影院| 国产精品自拍三区| 亚洲成在人线免费| 亚洲制服丝袜av| 日韩美女天天操| 99国产精品久久久久久久久久| 日韩电影在线看| 亚洲视频资源在线| 精品国产百合女同互慰| 日本高清免费不卡视频| 国产一区二区在线电影| 亚洲午夜国产一区99re久久| 国产视频一区在线观看| 欧美久久婷婷综合色| 北条麻妃国产九九精品视频| 日韩黄色在线观看| 亚洲啪啪综合av一区二区三区| 日韩美女一区二区三区四区| 欧美综合天天夜夜久久| 高清国产一区二区| 麻豆国产欧美日韩综合精品二区| 亚洲最新在线观看| 中文字幕av一区二区三区免费看| 日韩亚洲电影在线| 欧美日韩精品一区二区在线播放| 成人一区在线看|