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

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

?? ch375_host_int_para.c

?? CH375測試程續
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************
**  Copyright  (C)  W.ch  1999-2004   **
**  Web:  http://www.winchiphead.com  **
****************************************
**  USB 1.1 Host Examples for CH375   **
**  KC7.0@MCS-51                      **
****************************************
*/
/* 用CH375操作HID設備,比如鍵盤,鼠標*/

#include <reg52.h>
#include <stdio.h>
#include "CH375INC.H"
#define	TEST_LOW_SPEED	1
unsigned char volatile xdata	CH375_CMD_PORT _at_ 0xBDF1;	/* CH375命令端口的I/O地址 */
unsigned char volatile xdata	CH375_DAT_PORT _at_ 0xBCF0;	/* CH375數據端口的I/O地址 */
sbit	CH375_INT_WIRE	=		0xB0^2;	/* P3.2, INT0, 連接CH375的INT#引腳,用于查詢中斷狀態 */
sbit	P1_0=P1^0;
sbit	P1_2=P1^2;
#define	TRUE	1
#define	FALSE	0
unsigned char endp_int;			//中斷端點號
unsigned char num_interfaces;	//接口數
unsigned char config_value;		//配置值
unsigned char report_descr_len=0;//REPORT描述符長度
bit flag_config_2=0;			//第二次獲取描述符標志位
bit flag_interface_2=0;			//多個接口標志位
unsigned char endp6_mode=0x80, endp7_mode=0x80;//同步標志位初值
unsigned char status=0xff;		//全局狀態
unsigned char idata data_buf[96];//描述符緩沖區可以適當減小
union _REQUEST					//請求包結構
{	struct
	{	unsigned char bmRequestType;
		unsigned char bRequest;
		unsigned int wValue;
		unsigned int wIndex;
		unsigned int wLength;
	}Req;
	unsigned char Req_buf[8];
}Request;
unsigned char report_cou=0;		//REPORT描述符長度計數
bit		   	  flag_output=0;	//串口輸出標志位
unsigned char xdata data_in[1000];//串口輸出緩沖區

void	delay2us( )
{
	unsigned char i;
#ifdef	TEST_LOW_SPEED
	for ( i = 20; i != 0; i -- );
#else 
	for ( i = 2; i != 0; i -- );
#endif
}
void	delay1us( )
{
	unsigned char i;
#ifdef	TEST_LOW_SPEED
	for ( i = 10; i != 0; i -- );
#else
	for ( i = 1; i != 0; i -- );
#endif
}
void delayms(unsigned char delay)
{	unsigned char i;
	do{	for(i=0;i!=250;i++){;}
		for(i=0;i!=250;i++){;}
		for(i=0;i!=150;i++){;}
	}while(--delay);
}
void	mInitSTDIO( )
{
	SCON = 0x50;
	PCON = 0x80;
	TMOD = 0x21;
	TH1 = 0xf3;  /* 22.1184MHz晶振, 115200bps */
	TR1 = 1;
	TI = 1;
	EX0=1;
	EA=0;
}

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 );
}


unsigned char set_usb_mode( unsigned char mode ) {  /* 設置CH37X的工作模式 */
	unsigned char i;
	CH375_WR_CMD_PORT( CMD_SET_USB_MODE );
	CH375_WR_DAT_PORT( mode );
	endp6_mode=endp7_mode=0x80;  /* 主機端復位USB數據同步標志 */
	for( i=0; i!=100; i++ ) {  /* 等待設置模式操作完成,不超過30uS */
		if ( CH375_RD_DAT_PORT()==CMD_RET_SUCCESS ) return( TRUE );  /* 成功 */
	}
	return( FALSE );  /* CH375出錯,例如芯片型號錯或者處于串口方式或者不支持 */
}

void set_freq(void)
{	
	CH375_WR_CMD_PORT(0x0b);    /* 切換使375B進入低速模式 */
	CH375_WR_DAT_PORT(0x17);
	CH375_WR_DAT_PORT(0xd8);
}

/* 數據同步 */
/* USB的數據同步通過切換DATA0和DATA1實現: 在設備端, CH372/CH375可以自動切換;
   在主機端, 必須由SET_ENDP6和SET_ENDP7命令控制CH375切換DATA0與DATA1.
   主機端的程序處理方法是為SET_ENDP6和SET_ENDP7分別提供一個全局變量,
   初始值均為80H, 每執行一次成功事務后將位6取反, 每執行一次失敗事務后將其復位為80H. */

void toggle_recv() {  /* 主機接收成功后,切換DATA0和DATA1實現數據同步 */
	CH375_WR_CMD_PORT( CMD_SET_ENDP6 );
	CH375_WR_DAT_PORT( endp6_mode );
	endp6_mode^=0x40;
	delay2us();
}

void toggle_send() {  /* 主機發送成功后,切換DATA0和DATA1實現數據同步 */
	CH375_WR_CMD_PORT( CMD_SET_ENDP7 );
	CH375_WR_DAT_PORT( endp7_mode );
	endp7_mode^=0x40;
	delay2us();
}

//void clr_stall6() {  /* 主機接收失敗后,復位設備端的數據同步到DATA0 */
//	CH375_WR_CMD_PORT( CMD_CLR_STALL );
//	CH375_WR_DAT_PORT( 2 | 0x80 );  /* 如果設備端不是CH37X芯片,那么需要修改端點號 */
//	endp6_mode=0x80;
//	status=0xff;
//}

//void clr_stall7() {  /* 主機發送失敗后,復位設備端的數據同步到DATA0 */
//	CH375_WR_CMD_PORT( CMD_CLR_STALL );
//	CH375_WR_DAT_PORT( 2 );  /* 如果設備端不是CH37X芯片,那么需要修改端點號 */
//	endp7_mode=0x80;
//	status=0xff;
//}

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

void wr_usb_data( unsigned char len, unsigned char *buf ) {  /* 向CH37X寫入數據塊 */
	CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );  /* 向CH375的端點緩沖區寫入準備發送的數據 */
	CH375_WR_DAT_PORT( len );  /* 后續數據長度, len不能大于64 */
	while( len-- ) CH375_WR_DAT_PORT( *buf++ );
}

void issue_token( unsigned char endp_and_pid ) {  /* 執行USB事務 */
	CH375_WR_CMD_PORT( CMD_ISSUE_TOKEN );
	CH375_WR_DAT_PORT( endp_and_pid );  /* 高4位目的端點號, 低4位令牌PID */
	status=0xff;
}

void intt0() interrupt 0
{	unsigned char len_temp,i;
	CH375_WR_CMD_PORT( CMD_GET_STATUS );  /* 產生操作完成中斷, 獲取中斷狀態 */
	status=CH375_RD_DAT_PORT();
	if(status!=USB_INT_SUCCESS)//&&((status&0xf0)==0x20))
	{	CH375_WR_CMD_PORT( CMD_CLR_STALL );
		CH375_WR_DAT_PORT(1);  /* 如果設備端不是CH37X芯片,那么需要修改端點號 */
		endp6_mode=0x80;
		endp7_mode=0x80;
		toggle_recv();
		issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//發送從中斷端點讀數據的令牌
	}
	else 
	{	len_temp=rd_usb_data(data_buf);					//鍵盤中斷端點數據長度一般為8字節,鼠標為4字節
		for(i=0;i!=len_temp;i++)data_in[i]=data_buf[i];
		flag_output=1;
		toggle_recv();
		issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//發送從中斷端點讀數據的令牌
	}
}
unsigned char wait_interrupt() {  /* 主機端等待操作完成, 返回操作狀態 */
	while( CH375_INT_WIRE );  /* 查詢等待CH375操作完成中斷(INT#低電平) */
	CH375_WR_CMD_PORT( CMD_GET_STATUS );  /* 產生操作完成中斷, 獲取中斷狀態 */
	return( CH375_RD_DAT_PORT() );
}

void set_retry(unsigned char num)
{	CH375_WR_CMD_PORT( CMD_SET_RETRY); 
	CH375_WR_DAT_PORT( 0x25);
	CH375_WR_DAT_PORT( num);
	delay2us();
}

unsigned char set_config_ex()
{	Request.Req.bmRequestType=0x00;
	Request.Req.bRequest=0x09;config_value=config_value;
	Request.Req.wValue=0x0000|((unsigned int)config_value<<8);
	Request.Req.wIndex=0x0000;
	Request.Req.wLength=0x0000;
	endp7_mode=0x80;
	toggle_send();
	wr_usb_data(8,Request.Req_buf);/* SETUP數據總是8字節 */
	issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt();
	if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */
	{	endp6_mode=0xc0;
		toggle_recv();
		issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt();
		if(status==USB_INT_SUCCESS)/* 狀態階段操作成功 */
		{	if(rd_usb_data(data_buf)!=0)
			return(0);
		}
		else return(0);
	}
	else return(0);
	return(1) ;	
}
unsigned char set_idle()
{	Request.Req.bmRequestType=0x21;
	Request.Req.bRequest=0x0a;
	Request.Req.wValue=0x0000;
	Request.Req.wIndex=0x0000;if(flag_interface_2==1)Request.Req.wIndex=0x0100;
	Request.Req.wLength=0x0000;
	endp7_mode=0x80;
	toggle_send();
	wr_usb_data(8,Request.Req_buf);/* SETUP數據總是8字節 */
	issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt();
	if(status==USB_INT_SUCCESS)			/* SETUP階段操作成功 */
	{	endp6_mode=0xc0;
		toggle_recv();
		issue_token(( 0 << 4 ) | DEF_USB_PID_IN );status=wait_interrupt();
		if(status==USB_INT_SUCCESS)		/* 狀態階段操作成功 */
		{	if(rd_usb_data(data_buf)!=0)
			return(0);
		}
		else return(0);
	}
	else return(0);
	return(1);	
}
unsigned char set_report()
{	Request.Req.bmRequestType=0x21;
	Request.Req.bRequest=0x09;
	Request.Req.wValue=0x0002;
	Request.Req.wIndex=0x0000;
	Request.Req.wLength=0x0100;
	endp7_mode=0x80;
	toggle_send();
	wr_usb_data(8,Request.Req_buf);/* SETUP數據總是8字節 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲h动漫在线| 国产一区二区三区免费播放| 国产成人精品aa毛片| 欧美日韩一区二区三区视频| 欧美韩国日本一区| 国产福利91精品一区二区三区| 91精品国产综合久久福利| 国产精品色在线| 日本不卡一区二区三区| 日韩欧美成人午夜| 国产精品18久久久久久久久久久久| 欧美日韩三级视频| 日本欧美一区二区| 欧美一区二区三区公司| 日本91福利区| 欧美哺乳videos| 不卡一卡二卡三乱码免费网站| 国产欧美精品一区二区色综合朱莉| 激情综合五月婷婷| 亚洲国产成人午夜在线一区| 91网站最新地址| 丝袜美腿一区二区三区| 精品国产乱码久久| av亚洲精华国产精华精| 日韩精品电影一区亚洲| 久久久精品中文字幕麻豆发布| 懂色av一区二区三区蜜臀| 一区二区三区不卡视频在线观看| 欧美性感一区二区三区| 国内久久精品视频| 亚洲欧美影音先锋| 精品国产免费一区二区三区香蕉| 成人激情开心网| 日本欧美一区二区三区乱码| 欧美激情在线一区二区| 欧美日韩精品电影| 99久久精品国产网站| 久久99精品久久久久久动态图| 亚洲视频在线观看一区| 久久综合中文字幕| 欧美大肚乱孕交hd孕妇| 日本高清不卡一区| 欧美日韩国产bt| 91麻豆免费视频| 成人小视频免费在线观看| 男人的天堂亚洲一区| 日韩不卡一区二区| 亚洲国产精品久久人人爱蜜臀| 国产亚洲成av人在线观看导航| 日韩欧美视频在线| 日韩免费看的电影| 日韩欧美高清在线| 欧美丰满少妇xxxbbb| 欧美性猛交一区二区三区精品| 97久久人人超碰| 色综合久久久网| 欧美日韩国产一级片| 51精品久久久久久久蜜臀| 91精品久久久久久久91蜜桃| 欧美无人高清视频在线观看| 91精品国产综合久久精品麻豆| 在线不卡免费欧美| 欧美mv日韩mv国产网站| 777亚洲妇女| 欧美一级二级在线观看| 久久久99久久| 亚洲美女淫视频| 午夜激情综合网| 国产69精品久久777的优势| 99久久99久久综合| 日韩一级视频免费观看在线| 久久蜜桃av一区精品变态类天堂| 国产精品丝袜一区| 调教+趴+乳夹+国产+精品| 久草中文综合在线| 成人高清在线视频| 欧美一区二区三区公司| 国产精品免费看片| 午夜久久久久久久久久一区二区| 狠狠色丁香久久婷婷综合_中 | 天堂在线亚洲视频| 国产高清成人在线| 欧美亚洲高清一区二区三区不卡| 欧美一区二区在线免费观看| 国产精品免费丝袜| 国产精品中文字幕欧美| 99久久久无码国产精品| 久久免费偷拍视频| 日本少妇一区二区| 欧美日韩一区二区三区四区五区| 久久亚洲精华国产精华液| 五月婷婷激情综合| 欧美日韩高清一区二区不卡| 亚洲欧洲一区二区三区| 国产精品乡下勾搭老头1| 51午夜精品国产| 亚洲国产欧美一区二区三区丁香婷| 99国产精品国产精品久久| 国产视频一区在线播放| 国产夫妻精品视频| 国产午夜亚洲精品不卡| 国产精品白丝av| 久久精品亚洲国产奇米99| 国产一区二区三区四| 国产亚洲精品bt天堂精选| 国产美女在线观看一区| 久久亚洲一区二区三区明星换脸| 丰满岳乱妇一区二区三区| 国产视频亚洲色图| 91啪九色porn原创视频在线观看| 日本一区二区在线不卡| 色婷婷精品大视频在线蜜桃视频 | 欧美在线你懂得| 日韩激情一二三区| 久久综合99re88久久爱| 97久久精品人人做人人爽50路| 亚洲人成亚洲人成在线观看图片 | 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲sss视频在线视频| 日韩欧美的一区二区| 国产凹凸在线观看一区二区 | 日韩一级黄色片| youjizz久久| 免费高清不卡av| 亚洲精品五月天| 久久精品夜色噜噜亚洲aⅴ| 欧美自拍丝袜亚洲| 丰满少妇久久久久久久| 日本一区二区三区dvd视频在线| 成人av免费在线观看| 青娱乐精品在线视频| 中文字幕色av一区二区三区| 7777精品伊人久久久大香线蕉最新版 | 91麻豆免费在线观看| 国产又黄又大久久| 久久er精品视频| 亚洲成av人在线观看| 亚洲欧美一区二区不卡| 久久久久久免费网| 欧美tk—视频vk| 日韩美一区二区三区| 7777精品伊人久久久大香线蕉 | 成人美女视频在线观看18| 青青草成人在线观看| 亚洲成在人线免费| 亚洲成人自拍偷拍| 亚洲成av人片观看| 亚洲精品欧美专区| 亚洲国产视频直播| 午夜精品影院在线观看| 日韩国产欧美在线播放| 天天av天天翘天天综合网色鬼国产| 亚洲欧美日韩国产综合| 乱中年女人伦av一区二区| 午夜精品一区二区三区免费视频| 欧美国产日韩一二三区| 2020国产精品久久精品美国| 欧美激情一区二区在线| 自拍偷在线精品自拍偷无码专区| 欧美一二三区在线| 91久久精品国产91性色tv| 国产成人av一区二区三区在线| 亚洲成人在线免费| 一区二区视频免费在线观看| 久久久久久久久久久久久女国产乱 | 成人不卡免费av| 韩国一区二区三区| 精品综合免费视频观看| 另类调教123区| 亚洲国产成人精品视频| 日本女人一区二区三区| 日韩精品免费专区| 精品中文字幕一区二区小辣椒 | 欧美主播一区二区三区| 欧美午夜片在线看| 91 com成人网| 精品日产卡一卡二卡麻豆| 欧美一区二区在线免费播放| 欧美一区二区三区色| 日韩免费视频一区| 中文字幕一区在线观看视频| 国产欧美综合色| 亚洲欧美综合网| 午夜精品福利在线| 国产福利精品导航| 一本在线高清不卡dvd| 欧美精品在线一区二区| 欧美一级高清片| 日韩一区在线看| 天天影视色香欲综合网老头| 国产精品一区在线观看你懂的| av影院午夜一区| 日韩欧美一级片| 亚洲精品国产a| 国产成人精品亚洲777人妖| 免费欧美日韩国产三级电影| 国产精品18久久久久久久久| 欧美色综合天天久久综合精品| 日韩欧美一区二区不卡| 一区二区三区精品视频|