亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
视频在线观看一区| 色系网站成人免费| 不卡电影一区二区三区| 欧美日本免费一区二区三区| 精品国产一区二区三区久久久蜜月 | 国产成人精品在线看| 在线视频一区二区三| 国产网站一区二区| 久久99热这里只有精品| 欧美日韩久久久一区| 亚洲视频一二三| 国产成人一区在线| 精品精品欲导航| 日本在线不卡一区| 欧美日韩高清不卡| 一区二区三区四区蜜桃| 成人av在线资源网站| 国产日韩欧美在线一区| 精品亚洲成a人| 精品欧美乱码久久久久久 | 欧美日韩国产bt| 亚洲综合色在线| 一本大道综合伊人精品热热| 中文字幕二三区不卡| 国产精品一区二区x88av| 欧美va日韩va| 国产真实乱子伦精品视频| 日韩手机在线导航| 精品一区二区国语对白| 欧美大片日本大片免费观看| 另类综合日韩欧美亚洲| 精品国产一区二区在线观看| 精品一区二区三区在线观看| 精品国产伦一区二区三区免费| 青青草精品视频| 日韩欧美综合一区| 狠狠色丁香婷综合久久| 日韩欧美色电影| 精品一区二区三区欧美| 精品国产电影一区二区| 国产成人自拍网| 国产精品久久国产精麻豆99网站| 97久久超碰精品国产| 亚洲精品ww久久久久久p站| 91久久精品一区二区二区| 亚洲成人一区二区在线观看| 欧美日韩在线一区二区| 日本成人中文字幕在线视频| 精品国产凹凸成av人网站| 丁香天五香天堂综合| 中文字幕日韩一区| 欧美日韩一级二级三级| 麻豆国产欧美一区二区三区| www一区二区| 91免费看片在线观看| 午夜精品福利在线| 久久美女高清视频| 色综合av在线| 精久久久久久久久久久| 亚洲欧洲精品一区二区三区| 精品视频一区二区不卡| 国产v日产∨综合v精品视频| 一卡二卡欧美日韩| 欧美成人精品3d动漫h| 99久久婷婷国产综合精品| 石原莉奈一区二区三区在线观看| 26uuu亚洲| 在线观看亚洲精品视频| 国产在线不卡视频| 亚洲狠狠丁香婷婷综合久久久| 欧美一级二级三级乱码| 丁香桃色午夜亚洲一区二区三区| 亚洲福利一区二区| 国产偷国产偷亚洲高清人白洁 | 视频在线观看91| 国产精品美女久久久久久久久久久| 色综合天天在线| 激情久久久久久久久久久久久久久久| 亚洲欧洲99久久| 精品国产乱码久久久久久老虎| 色伊人久久综合中文字幕| 狠狠色丁香婷婷综合| 亚洲另类春色校园小说| 久久综合九色综合欧美98| 欧美色综合网站| 99久久国产免费看| 国产尤物一区二区在线| 亚洲va欧美va人人爽| 中文字幕一区在线| 亚洲精品一线二线三线无人区| 欧美日韩一区小说| 99re66热这里只有精品3直播 | 日本不卡不码高清免费观看 | 欧美精品一区二区蜜臀亚洲| 日本精品视频一区二区三区| 国产成人亚洲综合a∨婷婷图片| 视频一区二区不卡| 亚洲国产视频网站| 亚洲三级理论片| 国产精品日韩精品欧美在线| 日韩一卡二卡三卡国产欧美| 在线观看亚洲a| 色av成人天堂桃色av| 99在线精品免费| 91在线视频观看| 不卡电影一区二区三区| 成人精品视频.| 成人综合婷婷国产精品久久| 国产精品一二一区| 国产激情偷乱视频一区二区三区| 久久99精品一区二区三区三区| 日日夜夜一区二区| 日韩激情一区二区| 天天射综合影视| 免费高清不卡av| 男人的j进女人的j一区| 另类成人小视频在线| 久久99久久久久久久久久久| 日韩电影免费在线| 麻豆国产精品视频| 狠狠v欧美v日韩v亚洲ⅴ| 精品午夜久久福利影院| 国产伦精品一区二区三区视频青涩 | 午夜影院在线观看欧美| 香蕉影视欧美成人| 美女脱光内衣内裤视频久久网站 | 欧美一区二区高清| 日韩欧美www| 国产精品视频看| 日韩一区在线播放| 夜夜精品视频一区二区| 午夜欧美视频在线观看| 另类中文字幕网| 成人开心网精品视频| 色域天天综合网| 91精品国产免费| 久久精品欧美一区二区三区不卡| 国产精品欧美一区二区三区| 中文字幕综合网| 日日骚欧美日韩| 丰满亚洲少妇av| 欧美三日本三级三级在线播放| 91精品国产91综合久久蜜臀| 久久综合久久99| 一区二区三区中文在线| 伦理电影国产精品| 91蜜桃在线免费视频| 欧美一区二区三区爱爱| 中文字幕av不卡| 日韩综合一区二区| 高清国产一区二区三区| 欧美色成人综合| 中文成人av在线| 成人国产电影网| 亚洲一二三专区| 亚洲综合色自拍一区| 国产精品丝袜黑色高跟| 国产精品网曝门| 《视频一区视频二区| 蜜桃视频一区二区三区在线观看| 国产精品18久久久久久久网站| 欧美无乱码久久久免费午夜一区| 欧美成人一区二区三区在线观看| 成人免费视频在线观看| 日韩成人精品视频| 日本久久电影网| 国产精品欧美久久久久无广告| 美女视频黄免费的久久| 亚洲精品在线电影| 亚洲欧美日韩在线播放| 国产乱一区二区| 欧美高清视频一二三区| 一区在线中文字幕| 国产黄色精品视频| 666欧美在线视频| 一区二区三区不卡视频在线观看 | 欧美高清在线视频| 蜜臂av日日欢夜夜爽一区| 在线视频你懂得一区| 国产精品美女久久久久久久久| 国内不卡的二区三区中文字幕| 91麻豆精品国产91久久久| 国产另类ts人妖一区二区| 欧美日韩国产美| 亚洲午夜激情网页| 91久久免费观看| 一区二区三区在线观看动漫| 成人av在线网站| 国产精品天美传媒沈樵| 国产成人免费视频一区| 亚洲精品在线三区| 免费成人深夜小野草| 欧美高清视频在线高清观看mv色露露十八 | 99热这里都是精品| 中文字幕一区二区三区不卡| 成人福利视频在线| 国产精品福利电影一区二区三区四区| 国产福利91精品| 国产精品入口麻豆九色| 99久久99精品久久久久久|