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

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

?? d12ci.c

?? PDIUSBD12結(jié)合C51芯片的完整的固件開發(fā)程序
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機(jī)發(fā)展有限公司
**                                     研    究    所
**                                        產(chǎn)品一部 
**
**                                 http://www.zlgmcu.com
**
** 文   件   名: D12CI.c
** 最后修改日期: 2004年11月15日
** 描        述: USB驅(qū)動程序軟件包: PDIUSBD12 設(shè)備端驅(qū)動程序 接口控制驅(qū)動層
** 版	     本: V5.0
**********************************************************************************************************/

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

		/*****************************************
			與CPU 無關(guān), 與 USB相關(guān)的函數(shù)
		*****************************************/

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

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

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

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

	return i;
}

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

	return j;
}

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

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

	outportb(D12_COMMAND, bEndp);	//端點(diǎn)選擇
	c = inportb(D12_DATA);			//讀出一個(gè)字節(jié)

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

	return c;
}

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

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

	outportb(D12_COMMAND, 0x80 + bEndp);	//讀取端點(diǎn)狀態(tài)命令
	c = inportb(D12_DATA);					//讀取端點(diǎn)狀態(tài)

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

	return c;
}
#endif

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

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

	outportb(D12_COMMAND, 0x40 + bEndp);	//發(fā)送設(shè)置端點(diǎn)狀態(tài)命令
	outportb(D12_DATA, bStalled);			//設(shè)置端點(diǎn)狀態(tài)

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

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


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

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

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

	i += (j<<8);

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

	return i;								//返目當(dāng)前幀數(shù)目
}
#endif


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

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

	outportb(D12_COMMAND, endp);						//發(fā)送選擇端點(diǎn)命令
	if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {		//如果緩沖區(qū)為空
		if(bEPPflags.bits.in_isr == 0)
			ENABLE();
		return 0;										//則返回讀到0字節(jié)
	}

	outportb(D12_COMMAND, 0xF0);						//發(fā)送讀緩沖區(qū)命令
	j = inportb(D12_DATA);								//讀取保留字節(jié)
	j = inportb(D12_DATA);								//讀取數(shù)據(jù)字節(jié)的數(shù)目/長度

	if(j > len)											//如果大于要求讀的字節(jié)數(shù)目
		j = len;										//則只讀取要求的字節(jié)長度
		
	for(i=0; i<j; i++)
		*(buf+i) = inportb(D12_DATA);					//讀取要求的字節(jié)數(shù)目/長度

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

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

	return j;											//返回讀到的字節(jié)數(shù)
}

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

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

	outportb(D12_COMMAND, endp);			//發(fā)送選擇端點(diǎn)命令
	i = inportb(D12_DATA);					//可選地讀取一個(gè)字節(jié)

	outportb(D12_COMMAND, 0xF0);			//發(fā)送寫緩沖區(qū)命令	
	outportb(D12_DATA, 0);					//寫入一個(gè)保留字節(jié)
	outportb(D12_DATA, len);				//寫入即將寫入的字節(jié)數(shù)目

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

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

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

	return len;								//返回寫入的字節(jié)數(shù)
}

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

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品影视av免费| 日产国产欧美视频一区精品 | 成人91在线观看| 视频一区二区国产| 国产精品久久一卡二卡| 欧美三级日韩三级国产三级| 国产乱码精品1区2区3区| 亚洲欧洲三级电影| www久久精品| 9191成人精品久久| 色哟哟国产精品免费观看| 青椒成人免费视频| 亚洲国产精品久久久久婷婷884| 久久久影院官网| 日本女优在线视频一区二区| 国产精品亚洲专一区二区三区 | 亚洲国产精品高清| 欧美日韩视频在线第一区| 91首页免费视频| av亚洲精华国产精华| 大陆成人av片| 国产毛片一区二区| 久久激情五月激情| 久久99热狠狠色一区二区| 美女一区二区久久| 精品一区二区免费视频| 精品午夜久久福利影院| 久久97超碰色| 国产v综合v亚洲欧| 成人动漫一区二区三区| 亚洲一区二区三区小说| 91香蕉国产在线观看软件| 99re亚洲国产精品| 在线观看免费一区| 久久精品二区亚洲w码| 一本久久a久久免费精品不卡| 国产午夜精品一区二区三区嫩草| 日韩国产精品91| 91精品婷婷国产综合久久竹菊| 综合分类小说区另类春色亚洲小说欧美| 午夜视频在线观看一区二区 | 日韩三级视频在线看| 亚洲欧洲日韩女同| 国产毛片精品国产一区二区三区| 欧美日韩一区二区三区免费看 | 欧美日韩国产小视频| 成人欧美一区二区三区小说 | 国产精品国产自产拍在线| 亚洲一区二区三区四区在线免费观看 | 国产精品第五页| 欧洲一区在线电影| 日本一区二区三区在线不卡 | 欧美日韩一级片网站| 亚洲欧洲av在线| av影院午夜一区| 日本一区二区三区电影| 日韩专区一卡二卡| 欧美一级专区免费大片| 亚洲大片精品永久免费| 欧美日韩一区二区三区在线看| 综合激情成人伊人| 欧美体内she精高潮| 亚洲高清免费观看高清完整版在线观看| 成人av网址在线观看| 亚洲日本免费电影| 麻豆精品新av中文字幕| 精品国产一区二区精华| 国产**成人网毛片九色| 国产无遮挡一区二区三区毛片日本| 狠狠v欧美v日韩v亚洲ⅴ| 91精品国产91久久久久久最新毛片| 日本少妇一区二区| 久久色在线视频| 99综合电影在线视频| 午夜精品一区二区三区免费视频| 欧美一区二区三区精品| 亚洲电影一区二区三区| 精品国产乱码久久久久久闺蜜 | 国产酒店精品激情| 亚洲日本一区二区三区| 欧美一区二区二区| 国产一区二区主播在线| 亚洲美女屁股眼交| 欧美一区二区三区四区视频| 岛国精品一区二区| 日本v片在线高清不卡在线观看| 国产视频一区在线播放| 欧美日韩免费电影| 国产成人综合亚洲91猫咪| 亚洲免费av高清| 亚洲免费av高清| 精品少妇一区二区三区在线视频| 成人精品视频一区二区三区| 日本欧美一区二区在线观看| 亚洲欧洲99久久| 久久亚洲私人国产精品va媚药| 欧美综合一区二区三区| 国产98色在线|日韩| 午夜久久福利影院| 亚洲一区二区视频在线| **欧美大码日韩| 中文字幕一区二区三区四区不卡 | 在线影院国内精品| 成人激情开心网| 国产精品一区二区久久不卡| 麻豆精品视频在线| 日本视频免费一区| 亚洲国产日日夜夜| 亚洲国产欧美另类丝袜| 久久久国产一区二区三区四区小说| 欧美美女一区二区在线观看| 欧美系列在线观看| 欧美性做爰猛烈叫床潮| 在线观看视频91| 在线精品视频一区二区三四| 91麻豆.com| 欧美日韩一区在线观看| 欧美久久久久久久久久| 91亚洲大成网污www| 色哟哟在线观看一区二区三区| 97精品国产97久久久久久久久久久久| 成人看片黄a免费看在线| 成人av免费在线播放| 色婷婷综合在线| 欧美日韩在线精品一区二区三区激情 | 7777精品伊人久久久大香线蕉经典版下载 | 国产成人啪午夜精品网站男同| 琪琪一区二区三区| 久久99精品视频| 国产超碰在线一区| 日本福利一区二区| 日韩欧美成人一区二区| 中文字幕亚洲电影| 色综合天天综合在线视频| 亚洲自拍欧美精品| 国产精品嫩草久久久久| 中文字幕一区二区在线播放| 亚洲成a天堂v人片| 成人a免费在线看| 欧美日韩在线电影| 精品国精品自拍自在线| 久久综合中文字幕| 亚洲乱码国产乱码精品精的特点| 青青草原综合久久大伊人精品优势| 久久97超碰色| 在线成人av网站| 亚洲图片另类小说| 精品一区二区在线免费观看| 色94色欧美sute亚洲13| 久久网站最新地址| 日韩成人伦理电影在线观看| 不卡的av电影在线观看| 欧美一卡2卡3卡4卡| 亚洲国产裸拍裸体视频在线观看乱了| 国内精品久久久久影院薰衣草| 欧美日本在线观看| 成人免费在线观看入口| 国产高清在线精品| 91精品国产91热久久久做人人 | 一本一道久久a久久精品| 中文字幕在线免费不卡| 成a人片亚洲日本久久| 成人欧美一区二区三区黑人麻豆| av一本久道久久综合久久鬼色| 国产精品理论片在线观看| 91在线免费播放| 亚洲成人精品影院| 欧美一区二区网站| 国产福利一区在线观看| 亚洲人成精品久久久久| 欧美久久一区二区| 国产成人欧美日韩在线电影| 亚洲乱码国产乱码精品精小说 | 久久影视一区二区| 波多野结衣精品在线| 亚洲福利视频导航| 欧美大白屁股肥臀xxxxxx| av电影一区二区| 亚洲高清在线精品| 中文字幕国产一区| 91精品在线免费观看| 国产福利精品导航| 日韩中文字幕一区二区三区| 国产精品视频一区二区三区不卡| 欧美写真视频网站| thepron国产精品| 精品一区二区三区视频在线观看| 国产精品久久久久久久久果冻传媒| 欧美日韩成人高清| 91首页免费视频| 国产黑丝在线一区二区三区| 日韩av中文字幕一区二区三区| 国产精品久久久久久亚洲伦| 欧美精品欧美精品系列| 99国产精品久久久久久久久久| 九九视频精品免费| 日本女人一区二区三区| 亚洲成人免费影院| 一区二区三区四区高清精品免费观看 | 欧美日韩第一区日日骚|