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

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

?? d12ci.bak

?? D12 USB 驅動程序,加51源理圖,加上位機測試程序,與驅動程序
?? BAK
字號:
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機發展有限公司
**                                     研    究    所
**                                        產品一部 
**
**                                 http://www.zlgmcu.com
**
** 文   件   名: D12CI.c
** 最后修改日期: 2004年11月15日
** 描        述: USB驅動程序軟件包: PDIUSBD12 設備端驅動程序 接口控制驅動層
** 版	     本: V5.0
**********************************************************************************************************/

#include <reg52.h>
#include "D12Config.h"
#include "D12HAL.h"
#include "D12CI.h"
#include "Chap_9.h"

		/*****************************************
			與CPU 無關, 與 USB相關的函數
		*****************************************/

/************************************************************
** 函數名稱: D12_ReadChipID()
** 功能描述: 讀取芯片ID
** 輸   入: 無
** 輸   出: 芯片的ID號
************************************************************/
INT16U D12_ReadChipID(void)
{
	INT16U i,j;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0xFD);		//發送讀PDIUSBD12芯片ID號命令	
	i=inportb(D12_DATA);				//讀取ID號低字節
	j=inportb(D12_DATA);				//讀取ID號高位字節
	i += (j<<8);						//組成16位的PDIUSBD12芯片ID號

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();

	return i;
}

/************************************************************
** 函數名稱: D12_SetAddressEnable()
** 功能描述: 設置地址/使能
** 輸   入: INT8U bAddress:  地址
	     	 INT8U bEnable :  0 --- 禁止
	     		     		  1 --- 使能
** 輸   出: 無
************************************************************/
void D12_SetAddressEnable(INT8U bAddress, INT8U bEnable)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0xD0);	//輸出設置地址/使能指令
	if(bEnable)
		bAddress |= 0x80;			//bit7置1,使能
	outportb(D12_DATA, bAddress);	//輸出設置值

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();
}


/************************************************************
** 函數名稱: D12_SetEndpointEnable()
** 功能描述: 設置端點使能
** 輸   入: INT8U bEnable :  0 --- 禁止
	     		     		  1 --- 允許
** 輸   出: 無
************************************************************/
void D12_SetEndpointEnable(INT8U bEnable)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0xD8);	//輸出設置端點使能指令
	if(bEnable)
		outportb(D12_DATA, 1);		//設置端點允許
	else
		outportb(D12_DATA, 0);		//設置端點禁止

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();
}

/************************************************************
** 函數名稱: void D12_SetMode()
** 功能描述: 模式設置
** 輸   入: INT8U bConfig:  配置字節信息
	     	 INT8U bClkDiv:  分頻系數
** 輸   出: 無
************************************************************/
void D12_SetMode(INT8U bConfig,INT8U bClkDiv)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0xF3);		//輸出設置模式指令
	outportb(D12_DATA, bConfig);		//輸出配置字節信息
	outportb(D12_DATA, bClkDiv);		//輸出時鐘分頻因數字節

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();	
}

/************************************************************
** 函數名稱: void D12_SetDMA()
** 功能描述: 設置DMA工作方式設置
** 輸   入: INT8U bMode: 	設置值
** 輸   出: 無
************************************************************/
void D12_SetDMA(INT8U bMode)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0xFB);	//設置DMA工作方命令
	outportb(D12_DATA, bMode);		//輸出設置值

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();			
}

/************************************************************
** 函數名稱: D12_ReadInterruptRegister()
** 功能描述: 讀取中斷寄存器值
** 輸   入: 無
** 輸   出: 中斷寄存器值
************************************************************/
INT16U D12_ReadInterruptRegister(void)
{
	INT8U b1;
	INT16U j;

	outportb(D12_COMMAND, 0xF4);	//讀取中斷寄存器命令
	b1 = inportb(D12_DATA);			//讀取低8位字節
	j = inportb(D12_DATA);			//讀取高8位字節

	j <<= 8;
	j += b1;						//組合為16位

	return j;
}

/************************************************************
** 函數名稱: D12_SelectEndpoint()
** 功能描述: 端點選擇,將內部指針初始化到選擇的緩沖區起始位置
** 輸   入: INT8U bEndp:   端點索引號,取值0 ~ 5
** 輸   出: 讀出的字節
************************************************************/
INT8U D12_SelectEndpoint(INT8U bEndp)
{
	INT8U c;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, bEndp);	//端點選擇
	c = inportb(D12_DATA);			//讀出一個字節

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();

	return c;
}

/************************************************************
** 函數名稱: D12_ReadEndpointStatus()
** 功能描述: 讀取端點狀態
** 輸   入: INT8U bEndp:   端點索引號,取值0 ~ 5
** 輸   出: 端點狀態
************************************************************/
#if D12_ReadEndpointStatus_EN
INT8U D12_ReadEndpointStatus(INT8U bEndp)
{
	INT8U c;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0x80 + bEndp);	//讀取端點狀態命令
	c = inportb(D12_DATA);					//讀取端點狀態

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();

	return c;
}
#endif

/************************************************************
** 函數名稱: D12_ReadLastTransactionStatus()
** 功能描述: 讀取最后處理狀態寄存器
** 輸   入: INT8U bEndp:   端點索引號,取值0 ~ 5
** 輸   出: 端點最后處理的狀態
************************************************************/
INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
{
	outportb(D12_COMMAND, 0x40 + bEndp);	//輸出讀取最后處理狀態寄存器命令
	return inportb(D12_DATA);				//讀取狀態
}

/************************************************************
** 函數名稱: D12_SetEndpointStatus()
** 功能描述: 設置端點狀態
** 輸   入: INT8U bEndp:   端點索引號,取值0 ~ 5
	         INT8U bStalled: 狀態值
** 輸   出: 端點狀態
************************************************************/
void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
{
	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0x40 + bEndp);	//發送設置端點狀態命令
	outportb(D12_DATA, bStalled);			//設置端點狀態

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();
}

/************************************************************
** 函數名稱: D12_SendResume()
** 功能描述: 傳輸恢復
** 輸   入: 無
** 輸   出: 無
************************************************************/
#if D12_SendResume_EN
void D12_SendResume(void)
{
	outportb(D12_COMMAND, 0xF6);			//設置發送恢復
}
#endif


/************************************************************
** 函數名稱: D12_ReadCurrentFrameNumber()
** 功能描述: 讀取當前幀號
** 輸   入: 無
** 輸   出: 當前幀號
************************************************************/
#if D12_ReadCurrentFrameNumber_EN
INT16U D12_ReadCurrentFrameNumber(void)
{
	INT16U i,j;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, 0xF5);			//發送讀取當前幀數目命令
	i= inportb(D12_DATA);					//讀取幀數目的低8位
	j = inportb(D12_DATA);					//讀取幀數目的高8位

	i += (j<<8);

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();

	return i;								//返目當前幀數目
}
#endif


/************************************************************
** 函數名稱: D12_ReadEndpoint()
** 功能描述: 讀取端點數據
** 輸   入: INT8U endp:     端點索引號,取值 0 ~ 5 
	    	 INT8U len:	     要讀取的數據長度
	     	 INT8U * buf:    接收數據指針
** 輸   出: 實際讀得的字節數
************************************************************/
INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
{
	INT8U i, j;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, endp);						//發送選擇端點命令
	if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {		//如果緩沖區為空
		if(bEPPflags.bits.in_isr == 0)
			ENABLE();
		return 0;										//則返回讀到0字節
	}
	len=len;
	outportb(D12_COMMAND, 0xF0);						//發送讀緩沖區命令
	j = inportb(D12_DATA);								//讀取保留字節
	j = inportb(D12_DATA);								//讀取數據字節的數目/長度

	//if(j > len)											//如果大于要求讀的字節數目
	//	j = len;										//則只讀取要求的字節長度

		
	for(i=0; i<j; i++)
		*(buf+i) = inportb(D12_DATA);					//讀取要求的字節數目/長度

	outportb(D12_COMMAND, 0xF2);						//清緩沖區,新的信息包才可以重新被接受

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();

	return j;											//返回讀到的字節數
}

/************************************************************
** 函數名稱: D12_WriteEndpoint()
** 功能描述: 把數據寫入端點
** 輸   入: INT8U endp:     端點索引號,取值 0 ~ 5 
	     	 INT8U len:	     要寫入的數據長度
	     	 INT8U * buf:    發送數據指針
** 輸   出: 實際寫入的字節數
************************************************************/
INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
{
	INT8U i;

	if(bEPPflags.bits.in_isr == 0)
		DISABLE();

	outportb(D12_COMMAND, endp);			//發送選擇端點命令
	i = inportb(D12_DATA);					//可選地讀取一個字節

	outportb(D12_COMMAND, 0xF0);			//發送寫緩沖區命令	
	outportb(D12_DATA, 0);					//寫入一個保留字節
	outportb(D12_DATA, len);				//寫入即將寫入的字節數目

	for(i=0; i<len; i++)
		outportb(D12_DATA, *(buf+i));		//寫入指定的字節

	outportb(D12_COMMAND, 0xFA);			//使緩沖區有效

	if(bEPPflags.bits.in_isr == 0)
		ENABLE();

	return len;								//返回寫入的字節數
}

/************************************************************
** 函數名稱: D12_AcknowledgeEndpoint()
** 功能描述: 應答Setup
** 輸   入: INT8U endp:     端點索引號,取值 0 ~ 5 
** 輸   出: 無
************************************************************/
void D12_AcknowledgeEndpoint(INT8U endp)
{
	outportb(D12_COMMAND, endp);			//選擇端點
	outportb(D12_COMMAND, 0xF1);			//應答Setup指令
	if(endp == 0)		
		outportb(D12_COMMAND, 0xF2);		//清空該端點緩沖區
}

/************************************************************
** 函數名稱: void D12_ClearBuff()
** 功能描述: 清指定端點的緩沖區(包括雙緩沖區)
** 輸   入: INT8U endp:     端點索引號,取值 0 ~ 5 
** 輸   出: 無
************************************************************/
#if D12_ClearBuff_EN
void D12_ClearBuff(INT8U endp)
{	
   	outportb(D12_COMMAND, endp);			//選擇端點
	outportb(D12_COMMAND, 0xF2);			//清空第1個緩沖區	
	
	if (endp >= 4){
   		outportb(D12_COMMAND, endp);		//選擇端點
		outportb(D12_COMMAND, 0xF2);		//清空第2個緩沖區	
	}
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人h动漫精品| 精品一区二区久久久| av在线不卡网| 亚洲视频在线一区| 欧美在线一区二区| 亚欧色一区w666天堂| 日韩一卡二卡三卡四卡| 国产麻豆日韩欧美久久| 国产精品欧美经典| 日本精品一区二区三区高清| 亚洲一区二区视频在线观看| 欧美一激情一区二区三区| 国内精品在线播放| 日韩一区欧美一区| 在线播放国产精品二区一二区四区| 日本成人中文字幕在线视频| 久久亚洲春色中文字幕久久久| 国产精品自拍网站| 伊人婷婷欧美激情| 精品裸体舞一区二区三区| 成人午夜在线免费| 五月天网站亚洲| 国产亚洲一二三区| 欧美三级一区二区| 国产精品一区2区| 亚洲午夜免费电影| 久久精品亚洲一区二区三区浴池 | 久久99在线观看| 久久久久久夜精品精品免费| 93久久精品日日躁夜夜躁欧美| 午夜久久久久久久久久一区二区| 欧美精品一区二区三区高清aⅴ | 91国内精品野花午夜精品 | 日韩亚洲欧美综合| 成人app网站| 蜜桃av一区二区在线观看| 亚洲欧洲精品成人久久奇米网| 欧美精品视频www在线观看| 成人在线视频一区二区| 日韩avvvv在线播放| 亚洲三级在线观看| 久久久精品免费网站| 欧美午夜精品一区二区三区| 国产成人自拍高清视频在线免费播放| 一区二区三区四区视频精品免费 | 亚洲r级在线视频| 国产视频911| 日韩亚洲欧美成人一区| 91无套直看片红桃| 国产一区二区三区四| 视频一区视频二区中文字幕| 激情另类小说区图片区视频区| 亚洲日本免费电影| 精品日韩欧美在线| 欧美丰满少妇xxxxx高潮对白 | 欧美亚洲动漫另类| 成人性视频网站| 国产一区二区三区在线观看精品 | 午夜精品福利在线| 亚洲欧美激情一区二区| 欧美国产乱子伦| 久久久99精品久久| 精品福利二区三区| 91精品免费观看| 欧美日韩一级黄| 欧洲av在线精品| 91香蕉视频污在线| 色婷婷一区二区三区四区| 99热精品一区二区| 99久久综合国产精品| 不卡一区二区三区四区| 成人激情免费网站| 成人激情av网| av电影在线观看一区| 波多野结衣中文一区| 不卡的av电影| 日本精品一级二级| 欧美视频日韩视频在线观看| 欧美日韩卡一卡二| 3d成人动漫网站| 日韩欧美一级特黄在线播放| 精品国产乱码久久久久久浪潮| 日韩你懂的在线播放| 精品88久久久久88久久久| 精品动漫一区二区三区在线观看| 日韩欧美视频在线| 欧美精品一区男女天堂| 蜜桃av一区二区在线观看| 久久99日本精品| 国产在线看一区| 大尺度一区二区| 成人涩涩免费视频| 91亚洲大成网污www| 欧美日韩在线播放三区| 日韩一区二区免费高清| 国产亚洲欧洲997久久综合 | 欧美电影免费观看高清完整版在线| 91精品在线麻豆| 精品国精品自拍自在线| 国产精品久久久久影院| 亚洲图片另类小说| 午夜精品在线看| 狠狠色丁香婷婷综合| 成人免费福利片| 欧美午夜精品久久久久久超碰| 3751色影院一区二区三区| 精品日韩一区二区三区| 亚洲色图视频网| 久久精品噜噜噜成人av农村| 福利一区二区在线| 欧美日韩视频不卡| 久久人人超碰精品| 一二三区精品视频| 激情久久五月天| 99精品视频在线免费观看| 亚洲精品欧美专区| 精品成人免费观看| 日韩一区二区免费在线观看| 91丨porny丨国产| 欧美日韩高清一区| 国产精品丝袜在线| 精品久久人人做人人爱| 亚洲日本va在线观看| 免费成人美女在线观看.| 成人性视频网站| 日韩一区二区在线看| 中文字幕一区二区在线观看| 视频在线观看91| 91原创在线视频| 2020国产精品久久精品美国| 亚洲日本青草视频在线怡红院| 精品制服美女丁香| 欧美日韩国产综合久久| 国产精品国产三级国产普通话蜜臀 | 久久人人97超碰com| 一区二区三区在线不卡| 国产盗摄精品一区二区三区在线 | gogogo免费视频观看亚洲一| 欧美精选一区二区| 椎名由奈av一区二区三区| 久久99国产乱子伦精品免费| 欧美午夜精品久久久久久超碰| 国产欧美精品一区二区色综合| 日韩精品欧美精品| 91高清在线观看| 国产精品福利一区| 国产a区久久久| 精品三级av在线| 日韩电影一区二区三区| 欧美调教femdomvk| 亚洲美女区一区| 99精品1区2区| 国产精品嫩草影院com| 国产乱人伦偷精品视频免下载| 欧美精品黑人性xxxx| 一区二区三区国产| 91色porny蝌蚪| 亚洲少妇最新在线视频| 成人网在线播放| 欧美高清在线精品一区| 国产美女在线精品| 久久精品夜色噜噜亚洲aⅴ| 国产一区二区三区综合| 26uuu亚洲综合色欧美| 免费人成黄页网站在线一区二区| 欧美视频在线一区| 香蕉乱码成人久久天堂爱免费| 色一情一伦一子一伦一区| 中文字幕佐山爱一区二区免费| 成人毛片在线观看| 亚洲欧美韩国综合色| 一本一道综合狠狠老| 亚洲午夜在线电影| 7777精品伊人久久久大香线蕉超级流畅| 亚洲国产视频a| 欧美高清dvd| 九九视频精品免费| 国产日韩一级二级三级| 国产99精品在线观看| 国产精品成人免费精品自在线观看| 成人精品gif动图一区| 亚洲视频 欧洲视频| 欧美午夜精品久久久久久超碰| 亚洲国产精品一区二区久久| 欧美挠脚心视频网站| 久久精品噜噜噜成人88aⅴ| 国产日韩欧美综合在线| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 成人aa视频在线观看| 亚洲丝袜美腿综合| 欧美日韩午夜在线| 久久草av在线| 国产精品麻豆网站| 精品视频在线免费观看| 蜜臀a∨国产成人精品| 国产午夜精品一区二区| 色呦呦日韩精品| 老司机精品视频导航| 国产精品高潮久久久久无| 欧美色倩网站大全免费|