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

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

?? ch375ev2.c

?? USB驅動芯片簡介及驅動源程序
?? C
字號:
/* 2004.03.05, 2004.8.18
****************************************
**  Copyright  (C)  W.ch  1999-2004   **
**  Web:  http://www.winchiphead.com  **
****************************************
**  USB 1.1 Host Examples for CH375   **
**  KC7.0@MCS-51                      **
****************************************
*/
/* CH375作為USB主機接口的程序示例 */

/* MCS-51單片機C語言的示例程序, 查詢方式 */

#include <reg51.h>
#include <string.h>
#include <stdio.h>

/* 定義CH375命令代碼及返回狀態 */
#include "CH375INC.H"

unsigned char volatile xdata	CH375_CMD_PORT _at_ 0xBDF1;	/* CH375命令端口的I/O地址 */
unsigned char volatile xdata	CH375_DAT_PORT _at_ 0xBCF0;	/* CH375數據端口的I/O地址 */
unsigned char xdata				DATA_BUFFER[ 0x8000 ] _at_ 0x0000;	/* 外部RAM數據緩沖區的起始地址 */
sbit	CH375_INT_WIRE	=		0xB0^2;	/* P3.2, INT0, 連接CH375的INT#引腳,用于查詢中斷狀態 */

/* 在P1.4連接一個LED用于監控演示程序的進度,低電平LED亮,當U盤插入后亮 */
sbit P1_4  = P1^4;
#define LED_OUT_ACT( )		{ P1_4 = 0; }	/* P1.4 低電平驅動LED顯示 */
#define LED_OUT_INACT( )	{ P1_4 = 1; }	/* P1.4 低電平驅動LED顯示 */

bit		mDeviceOnline = 0;				/* CH375的目標USB設備的連接狀態: 0斷開,1連接 */


/* 延時2微秒,不精確 */
void	delay2us( )
{
	unsigned char i;
	for ( i = 2; i != 0; i -- );
}

/* 延時1微秒,不精確 */
void	delay1us( )
{
	unsigned char i;
	for ( i = 1; i != 0; i -- );
}

/* 延時100毫秒,不精確 */
void	mDelay100mS( )
{
	unsigned char	i, j, c;
	for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3;
}

/* 延時10毫秒,不精確 */
void	mDelay10mS( )
{
	unsigned char	i, j, c;
	for ( i = 20; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3;
}

/* 基本操作 */

void CH375_WR_CMD_PORT( unsigned char cmd ) {  /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機較快則延時 */
	delay2us();
	CH375_CMD_PORT=cmd;
	delay2us();
}

void CH375_WR_DAT_PORT( unsigned char dat ) {  /* 向CH375的數據端口寫入數據,周期不小于1.5uS,如果單片機較快則延時 */
	CH375_DAT_PORT=dat;
	delay1us();  /* 因為MCS51單片機較慢所以實際上無需延時 */
}

unsigned char CH375_RD_DAT_PORT() {  /* 從CH375的數據端口讀出數據,周期不小于1.5uS,如果單片機較快則延時 */
	delay1us();  /* 因為MCS51單片機較慢所以實際上無需延時 */
	return( CH375_DAT_PORT );
}

/* 等待CH375中斷并獲取狀態 */
unsigned char mWaitInterrupt() {  /* 主機端等待操作完成, 返回操作狀態 */
	unsigned char c;
	while( CH375_INT_WIRE );  /* 查詢等待CH375操作完成中斷(INT#低電平) */
	CH375_WR_CMD_PORT( CMD_GET_STATUS );  /* 產生操作完成中斷, 獲取中斷狀態 */
	c = CH375_RD_DAT_PORT( );  /* 返回中斷狀態 */
	if ( c == USB_INT_DISCONNECT ) mDeviceOnline = 0;  /* 檢測到USB設備斷開事件 */
	else if ( c == USB_INT_CONNECT ) mDeviceOnline = 1;  /* 檢測到USB設備連接事件 */
	return( c );
}

/* 設置CH375為USB主機方式 */
unsigned char	mCH375Init( )
{
	unsigned char	c, i;
	CH375_WR_CMD_PORT( CMD_SET_USB_MODE );  /* 設置USB工作模式 */
	CH375_WR_DAT_PORT( 6 );  /* 模式代碼,自動檢測USB設備連接 */
	for ( i = 0xff; i != 0; i -- ) {  /* 等待操作成功,通常需要等待10uS-20uS */
		c = CH375_RD_DAT_PORT( );
		if ( c == CMD_RET_SUCCESS ) break;  /* 操作成功 */
	}
	if ( i != 0 ) return( USB_INT_SUCCESS );  /* 操作成功 */
	else return( 0xff );  /* CH375出錯,例如芯片型號錯或者處于串口方式或者不支持 */
}

/* 從CH375的端點緩沖區讀取接收到的數據 */
unsigned char	mReadCH375Data( unsigned char *buf )
{
	unsigned char len, i;
	unsigned char *p;
	CH375_WR_CMD_PORT( CMD_RD_USB_DATA );  /* 從CH375的端點緩沖區讀取數據塊 */
	p = buf;
	len = CH375_RD_DAT_PORT( );  /* 數據長度 */
	for ( i=0; i<len; i++ ) *p++ = CH375_RD_DAT_PORT( );  /* 連續讀取數據 */
	return( len );
}

/* 向CH375的端點緩沖區寫入準備發送的數據 */
void	mWriteCH375Data( unsigned char *buf, unsigned char len )
{
	unsigned char i;
	unsigned char *p;
	CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );  /* 向CH375的端點緩沖區寫入數據塊 */
	p = buf;
	CH375_WR_DAT_PORT( len );  /* 數據長度 */
	for ( i=0; i<len; i++ ) CH375_WR_DAT_PORT( *p++ );  /* 連續寫入數據 */
}

/* 對目標USB設備執行控制傳輸: 獲取USB描述符 */
unsigned char	mCtrlGetDescr( unsigned char type )
{
	CH375_WR_CMD_PORT( CMD_GET_DESCR );  /* 控制傳輸-獲取描述符 */
	CH375_WR_DAT_PORT( type );  /* 0:設備描述符, 1:配置描述符 */
	return( mWaitInterrupt( ) );  /* 等待操作完成 */
}

/* 對目標USB設備執行控制傳輸: 設置USB地址 */
unsigned char	mCtrlSetAddress( unsigned char addr )
{
	unsigned char c;
	CH375_WR_CMD_PORT( CMD_SET_ADDRESS );  /* 控制傳輸-設置USB地址 */
	CH375_WR_DAT_PORT( addr );  /* 1 - 7eh */
	c = mWaitInterrupt( );  /* 等待操作完成 */
	if ( c != USB_INT_SUCCESS ) return( c );  /* 操作失敗 */
/* 當目標USB設備的地址成功修改后,應該同步修改CH375的USB地址,否則CH375將無法與目標設備通訊 */
	CH375_WR_CMD_PORT( CMD_SET_USB_ADDR );  /* 設置CH375的USB地址 */
	CH375_WR_DAT_PORT( addr );  /* 修改CH375的USB設備能夠立即完成,不會產生中斷通知 */
	return( c );
}

/* 發出令牌,執行USB事務 */
unsigned char	mIssueToken( unsigned char endp, unsigned char token )
{
	CH375_WR_CMD_PORT( CMD_ISSUE_TOKEN );  /* 發出令牌,執行事務 */
	CH375_WR_DAT_PORT( endp << 4 | token );  /* 高4位是端點號,低4位是令牌PID */
	return( mWaitInterrupt( ) );  /* 等待操作完成 */
}

/* 檢查操作狀態,如果錯誤則顯示錯誤代碼并停機 */
void	mStopIfError( unsigned char err )
{
	if ( err == USB_INT_SUCCESS ) return;  /* 操作成功 */
	printf( "Error: %02X, %d\n", (unsigned int)err, (unsigned int)mDeviceOnline );  /* 顯示錯誤 */
	while ( 1 ) {
		LED_OUT_ACT( );  /* LED閃爍 */
		mDelay100mS( );
		LED_OUT_INACT( );
		mDelay100mS( );
	}
}

/* 為printf和getkey輸入輸出初始化串口 */
void	mInitSTDIO( )
{
	SCON = 0x50;
	PCON = 0x80;
	TMOD = 0x20;
	TH1 = 0xf3;  /* 24MHz晶振, 9600bps */
	TR1 = 1;
	TI = 1;
}

main( ) {
	unsigned char	i, len;
	LED_OUT_ACT( );  /* 開機后LED亮一下以示工作 */
	mDelay100mS( );  /* 延時100毫秒 */
	LED_OUT_INACT( );
	mInitSTDIO( );
	printf( "Start\n" );
	i = mCH375Init( );  /* 初始化CH375 */
	mStopIfError( i );
/* 其它電路初始化 */
	printf( "Insert USB device\n" );
	while ( mDeviceOnline == 0 ) mWaitInterrupt( );  /* 等待USB設備連接 */

#if 1
/* 實際上并沒有必要在USB設備插入后復位該設備,但是計算機的WINDOWS總是這樣做,所以我們也可以參照 */
/* 最新說明, 有些USB設備要求在插入后必須復位USB總線才能工作, 所以這部分程序不能去掉 */
	printf( "Begin: reset USB device\n" );
	while ( mDeviceOnline == 0 ) mWaitInterrupt( );  /* 等待USB設備連接 */
//	CH375_INT_EN = 0;  /* 復位USB總線期間應該禁止CH375中斷 */
	CH375_WR_CMD_PORT( CMD_SET_USB_MODE );  /* 設置USB工作模式 */
	CH375_WR_DAT_PORT( 7 );  /* 模式代碼,復位USB設備 */
	mDelay10mS( );  /* 復位時間應該在10mS左右 */
	mDeviceOnline = 0;
//	CH375_INT_FLAG = 0;  /* 清中斷標志 */
//	CH375_INT_EN = 1;  /* 允許CH375中斷 */
/*	printf( "End: reset USB device\n" ); */
	i = mCH375Init( );  /* 停止復位,重新初始化CH375 */
	mStopIfError( i );
	while ( mDeviceOnline == 0 ) mWaitInterrupt( );  /* 等待USB設備連接 */
#endif

/*	mDelay10mS( );  適當延時幾毫秒,可選的操作 */
	i = mCtrlGetDescr( 1 );  /* 獲取設備描述符 */
	mStopIfError( i );
	len = mReadCH375Data( DATA_BUFFER );  /* 讀取設備描述符數據 */
	printf( "Device descr data len: %d, data: ", len );
	for ( i = 0; i < len; i ++ ) printf( "%02X,", (unsigned int)DATA_BUFFER[i] );
	printf( "\n" );
	i = mCtrlSetAddress( 5 );  /* 設置USB地址,地址值為1到7EH,任意選 */
	mStopIfError( i );
#if 0
	......
	i = mIssueToken( mBulkOutEndp, DEF_USB_PID_OUT );  /* 發出一個OUT令牌,數據是DATA0 */
	mStopIfError( i );
#endif
	printf( "Stop\n" );
	LED_OUT_ACT( );  /* LED常亮 */
	while ( 1 );  /* 停機 */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满少妇在线播放bd日韩电影| 久久婷婷色综合| 97精品国产露脸对白| 国产成人h网站| 国产主播一区二区| 国产福利一区二区三区在线视频| 激情综合色综合久久综合| 蜜臀av性久久久久蜜臀aⅴ四虎| 肉肉av福利一精品导航| 蜜臀av一区二区三区| 久久99精品国产| 国产激情视频一区二区在线观看| 成人一区二区三区| 91免费看视频| 欧美日韩五月天| 久久婷婷色综合| 亚洲三级理论片| 日韩专区一卡二卡| 精品在线播放午夜| av中文字幕亚洲| 欧美日韩国产成人在线免费| 日韩免费福利电影在线观看| 中文字幕精品—区二区四季| 亚洲一区二区三区三| 精品一区二区三区视频| www.亚洲在线| 91麻豆精品国产91久久久资源速度| 精品伦理精品一区| 亚洲欧美在线高清| 天天色天天爱天天射综合| 国产在线精品一区二区三区不卡| 91最新地址在线播放| 日韩欧美精品三级| 亚洲精品视频在线| 国产老肥熟一区二区三区| 欧美在线视频不卡| 国产日韩精品视频一区| 亚洲动漫第一页| 成人高清在线视频| 日韩一二三四区| 亚洲欧美日韩国产综合| 国产一区二区在线观看视频| 欧美日韩在线播放三区| 国产精品每日更新在线播放网址| 亚洲成精国产精品女| www.日韩av| 日韩午夜在线播放| 亚洲成人自拍一区| 91丨porny丨中文| 精品福利一二区| 日韩精品国产精品| 91在线观看免费视频| 久久久久久久国产精品影院| 天涯成人国产亚洲精品一区av| 国产a精品视频| 国产午夜精品福利| 久久国内精品视频| 欧美一级二级三级乱码| 亚洲成人久久影院| 91无套直看片红桃| 国产精品女主播在线观看| 狠狠狠色丁香婷婷综合久久五月| 欧美日韩一二三区| 亚洲一区免费观看| 在线日韩av片| 中文字幕一区二区在线观看 | 日本久久精品电影| 国产精品美女一区二区三区| 岛国精品一区二区| 中文字幕不卡在线播放| 成人一区在线观看| 国产精品免费看片| 成人一区二区在线观看| 日本一区免费视频| 国产成人精品亚洲777人妖| 久久久国产精品麻豆| 国产成人自拍高清视频在线免费播放| 久久久蜜臀国产一区二区| 国产美女精品在线| 中文字幕欧美三区| 99国产精品国产精品毛片| 亚洲精品国产第一综合99久久| 色婷婷av一区二区三区gif | 美女任你摸久久| 欧美成人一区二区| 国产成人综合亚洲91猫咪| 国产欧美精品一区二区色综合朱莉| 国产·精品毛片| 中文字幕一区视频| 欧美精品在线观看一区二区| 免费观看成人av| 日本一区二区免费在线| 在线观看免费亚洲| 免费在线视频一区| 欧美国产一区在线| 欧美影院一区二区三区| 久久99国产精品久久| 欧美国产精品久久| 在线观看欧美精品| 国产综合一区二区| 亚洲猫色日本管| 欧美一区二区三区思思人| 韩国精品久久久| 伊人色综合久久天天| 欧美v日韩v国产v| www.欧美.com| 奇米影视一区二区三区小说| 国产精品日日摸夜夜摸av| 欧美日韩一区二区欧美激情| 国产盗摄视频一区二区三区| 亚洲另类一区二区| 久久影院视频免费| 欧美三级韩国三级日本一级| 国产精品中文字幕一区二区三区| 亚洲黄色小说网站| 久久久久99精品一区| 欧美日韩国产高清一区二区三区 | 一色屋精品亚洲香蕉网站| 9191成人精品久久| 色偷偷一区二区三区| 美洲天堂一区二卡三卡四卡视频| 国产精品高潮呻吟| 欧美xxxxx裸体时装秀| 欧美日韩在线亚洲一区蜜芽| 成人美女视频在线观看18| 蜜臀久久久久久久| 亚洲男人的天堂在线观看| 久久先锋影音av| 日韩视频一区二区三区在线播放| 一本到不卡免费一区二区| 国产乱对白刺激视频不卡| 青青草国产成人av片免费| 一二三区精品视频| 亚洲视频一区二区在线| 欧美国产乱子伦| 26uuu国产电影一区二区| 欧美一区二区视频免费观看| 欧美三级电影精品| 色综合网色综合| 成人午夜又粗又硬又大| 国产激情一区二区三区桃花岛亚洲| 麻豆国产一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲成va人在线观看| 亚洲电影激情视频网站| 亚洲一区免费视频| 亚洲一区二区在线免费看| 亚洲黄色性网站| 亚洲综合图片区| 亚洲一区二区在线观看视频| 亚洲成人免费影院| 午夜视频久久久久久| 婷婷中文字幕综合| 美女高潮久久久| 国内国产精品久久| 国产精品77777| 成人福利视频网站| 91久久免费观看| 欧美日韩成人一区二区| 欧美一区二区三区在线视频| 欧美白人最猛性xxxxx69交| 精品福利av导航| 国产欧美日韩精品一区| 一区精品在线播放| 亚洲一区二区三区不卡国产欧美| 午夜一区二区三区视频| 麻豆中文一区二区| 国产不卡在线播放| 91蝌蚪porny九色| 欧美日韩一区二区三区在线看| 欧美一区二区视频在线观看2020| 欧美精品一区二区三区久久久 | 在线精品视频一区二区三四| 欧美在线免费视屏| 这里只有精品电影| 久久久久久久精| 一区二区三区四区视频精品免费| 亚洲午夜激情av| 国产一区二区三区免费看| av成人免费在线观看| 欧美亚洲国产一卡| 欧美成人r级一区二区三区| 中文字幕乱码一区二区免费| 亚洲韩国一区二区三区| 国产一区二区三区四| 欧美性大战久久| 久久久综合九色合综国产精品| 一区二区三区中文在线观看| 看片网站欧美日韩| 91看片淫黄大片一级| 久久综合色婷婷| 亚洲最大的成人av| 福利电影一区二区三区| 欧美日韩黄色一区二区| 中文字幕第一区第二区| 男女性色大片免费观看一区二区| 91小视频免费看| 精品精品欲导航| 亚洲不卡在线观看| 91免费看视频|