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

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

?? d12ci.c

?? D12實現的USB
?? C
字號:
/****************************************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字節
	}  

	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一区二区三区免费野_久草精品视频
国产精品欧美综合在线| 亚洲综合在线视频| 亚洲美女在线国产| 蜜桃91丨九色丨蝌蚪91桃色| 国产成人欧美日韩在线电影| 欧美日韩精品一区视频| 欧美高清在线视频| 九九九精品视频| 欧美夫妻性生活| 亚洲精品写真福利| 春色校园综合激情亚洲| 91精品在线免费| 亚洲一区二区三区爽爽爽爽爽 | 在线观看91视频| 国产精品视频九色porn| 看电视剧不卡顿的网站| 欧美三级电影网站| 一区二区三区在线不卡| 9久草视频在线视频精品| 久久影院午夜片一区| 天天射综合影视| 欧美日本视频在线| 亚洲国产一区二区在线播放| 色欧美日韩亚洲| 亚洲免费成人av| 99re这里只有精品首页| 国产精品美女久久久久久久| 国产一区二区不卡| 欧美精品一区二区三区视频| 免费观看91视频大全| 日韩一区二区高清| 日本伊人午夜精品| 日韩欧美国产1| 国产真实乱偷精品视频免| 欧美v亚洲v综合ⅴ国产v| 美国毛片一区二区三区| 欧美一区二区高清| 久久99国产乱子伦精品免费| 日韩情涩欧美日韩视频| 激情五月婷婷综合网| 精品99999| 国产999精品久久久久久| 中文欧美字幕免费| 91丨九色丨黑人外教| 尤物视频一区二区| 欧美日韩国产片| 久久99精品视频| 国产日韩高清在线| 色综合一区二区| 午夜欧美电影在线观看| 91精品在线观看入口| 久久成人免费电影| 欧美极品aⅴ影院| 日本福利一区二区| 日韩专区欧美专区| 久久精品一区四区| 色综合久久中文综合久久牛| 午夜电影网一区| 久久午夜电影网| 99精品国产视频| 男人操女人的视频在线观看欧美| 欧美成人vr18sexvr| 国产成都精品91一区二区三| 一区二区视频免费在线观看| 91精品久久久久久久91蜜桃| 国产成人午夜99999| 亚洲美女区一区| 日韩免费观看2025年上映的电影| 国产成人在线观看免费网站| 亚洲男人的天堂在线aⅴ视频| 51午夜精品国产| 成人午夜伦理影院| 午夜不卡在线视频| 亚洲国产精品成人久久综合一区 | 一区二区三区免费在线观看| 欧美日韩一卡二卡| 国产盗摄女厕一区二区三区| 亚洲成人tv网| 国产精品久久免费看| 欧美精品 日韩| av不卡在线播放| 久久99久久久欧美国产| 一区二区三区日韩欧美精品| 久久综合久久综合亚洲| 欧美亚洲精品一区| 成人黄色一级视频| 裸体一区二区三区| 亚洲国产精品久久人人爱| 久久精品网站免费观看| 3d动漫精品啪啪1区2区免费| voyeur盗摄精品| 极品少妇一区二区三区精品视频| 亚洲欧洲综合另类| 国产精品污www在线观看| 日韩精品一区二区三区视频在线观看| 一本大道av一区二区在线播放| 韩国欧美国产一区| 秋霞影院一区二区| 亚洲成av人片在线观看| 成人欧美一区二区三区| 国产亚洲成aⅴ人片在线观看| 4438成人网| 欧美精品第1页| 欧美视频一区二区三区在线观看 | 国产精品资源在线看| 日本特黄久久久高潮| 一区二区三区在线不卡| 亚洲免费在线视频| 亚洲精选一二三| 亚洲摸摸操操av| 一区二区三区日韩欧美| 一区二区三区在线观看网站| 亚洲乱码国产乱码精品精98午夜 | 久久婷婷综合激情| 日韩欧美不卡一区| 日韩欧美中文字幕精品| 日韩一级免费观看| 日韩精品中文字幕一区二区三区 | 成人av先锋影音| 成人黄色综合网站| 91女厕偷拍女厕偷拍高清| aaa亚洲精品| 欧美手机在线视频| 欧美一区二区在线视频| 欧美一区二区三区免费视频| 欧美喷潮久久久xxxxx| 在线播放中文字幕一区| 精品国产乱子伦一区| 亚洲精品在线免费观看视频| 久久综合色天天久久综合图片| 国产日韩欧美不卡| 亚洲激情男女视频| 婷婷综合另类小说色区| 蜜臀av性久久久久蜜臀av麻豆| 青青青伊人色综合久久| 精品系列免费在线观看| 本田岬高潮一区二区三区| 91麻豆蜜桃一区二区三区| 欧美三级电影在线观看| 精品美女在线播放| 国产精品久久久久影院老司| 亚洲人123区| 美女视频一区二区| 不卡av免费在线观看| 欧美日韩国产一级| 国产亚洲欧美色| 一区二区三区精品在线观看| 精品一区二区三区av| 99热99精品| 日韩一区二区电影在线| 国产精品午夜春色av| 丝袜脚交一区二区| 国产成人小视频| 欧美二区在线观看| 欧美激情一区二区三区| 亚洲成人一区二区| 高清不卡一区二区在线| 欧美日韩国产精品成人| 久久久av毛片精品| 午夜天堂影视香蕉久久| 国产精品中文字幕一区二区三区| 一本色道久久综合狠狠躁的推荐 | 欧美日韩国产综合草草| 久久精品一区二区| 五月天亚洲精品| 91在线免费视频观看| 久久综合色天天久久综合图片| 一区二区三区中文字幕在线观看| 国产乱色国产精品免费视频| 欧美综合在线视频| 国产精品萝li| 极品少妇xxxx精品少妇| 欧美日韩一区二区三区高清| 国产精品理伦片| 国产风韵犹存在线视精品| 欧美另类久久久品| 一区二区三区欧美| 成人av手机在线观看| 久久青草欧美一区二区三区| 日韩精品午夜视频| 欧日韩精品视频| 亚洲精品ww久久久久久p站| 风间由美一区二区三区在线观看| 日韩午夜激情电影| 婷婷久久综合九色综合绿巨人| eeuss鲁一区二区三区| 国产亚洲欧美日韩俺去了| 黄色日韩三级电影| 日韩一区二区免费视频| 视频一区二区三区入口| 欧美日韩一级视频| 香蕉成人伊视频在线观看| 色综合久久久久网| 亚洲欧美福利一区二区| www.av精品| 亚洲免费高清视频在线| 色网综合在线观看| 亚洲综合在线电影| 91福利在线观看| 一区二区在线免费|