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

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

?? device.c

?? CH3xx系列芯片和開發套件開發資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
													if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) P2 = dat;
													else dat = P2;
													break;
												case 0xA8:
													if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) IE = dat;
													else dat = IE;
													break;
												case 0xB0:
													if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) P3 = dat;
													else dat = P3;
													break;
												case 0xB8:
													if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) IP = dat;
													else dat = IP;
													break;
												case 0xC8:
													if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) T2CON = dat;
													else dat = T2CON;
													break;
												default:
													dat = 0;
													break;
											}
											break;
										case USB_CMD_MEM_S_IRAM:
											if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) *(PUINT8)pudp->down.u.mByte[0] = dat;
											else dat = *(PUINT8)pudp->down.u.mByte[0];
											break;
										case USB_CMD_MEM_S_XRAM:
											if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) *(PUINT8X)( pudp->down.u.mByte[0] | (UINT16)pudp->down.u.mByte[1] << 8 )= dat;
											else dat = *(PUINT8X)( pudp->down.u.mByte[0] | (UINT16)pudp->down.u.mByte[1] << 8 );
											break;
										case USB_CMD_MEM_S_ROM:
											if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) pudp->up.mStatus = ERR_UNSUPPORT;  /* 命令不支持 */
											else dat = *(PUINT8C)( pudp->down.u.mByte[0] | (UINT16)pudp->down.u.mByte[1] << 8 );
											break;
									}
									if ( ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) == 0 ) pudp->up.mBuffer[ l ] = dat;  /* 返回讀出的數據 */
									pudp->down.u.mByte[0] ++;
									if ( pudp->down.u.mByte[0] == 0 ) pudp->down.u.mByte[1] ++;
								}
								if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) pudp->up.mLength = 0;  /* 寫操作不返回數據 */
								pudp->up.mStatus = ERR_SUCCESS;
							}
						}
						else switch ( pudp->down.mCommand ) {  /* 命令類型:實現特定功能,分析命令碼 */
							case USB_CMD_GET_FW_INFO:  /* 獲取調試固件程序的版本,并取消未完成的上傳數據塊 */
								pudp->up.mBuffer[0] = THIS_FIRMWARE_VER;
								pudp->up.mLength = 1;
								pudp->up.mStatus = ERR_SUCCESS;
								Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_NAK( Read374Byte( REG_USB_ENDP2 ) ) );  /* 同步觸發位不變,設置USB端點2的IN正忙,返回NAK */
								break;
							case USB_CMD_GET_APP_INFO:  /* 獲取當前應用系統的版本和說明字符串 */
								pudp->up.mBuffer[0] = THIS_APP_SYS_VER;
								l = 0;
								str = THIS_APP_SYS_STR;
								while ( pudp->up.mBuffer[ l ] = *str ) { l ++; str ++; }  /* 說明字符串 */
								pudp->up.mLength = 1 + sizeof( THIS_APP_SYS_STR );
								pudp->up.mStatus = ERR_SUCCESS;
								break;
/* 							case MY_CMD_CH451: */
							default:  /* 命令不支持 */
								pudp->up.mLength = 0;
								pudp->up.mStatus = ERR_UNSUPPORT;
								break;
						}
						l = pudp->up.mLength + (UINT8)( & ( (USB_UP_PKT *)0 ) -> mBuffer );
						Write374Byte( REG_USB_LENGTH, l );
						Write374Block( RAM_ENDP2_TRAN, l, (PUINT8)&pudp->up );  // 向USB端點2的發送緩沖區寫入數據塊
						Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG );
//						Write374Index( REG_USB_ENDP2 );  // 對于并口連接可以用本行及下面一行代替上一行的程序,減少寫一次index的時間,提高效率
//						Write374Data( M_SET_EP2_TRAN_ACK( Read374Data0( ) ) ^ BIT_EP2_RECV_TOG );
					}
				}
				break;
			}
			case USB_INT_EP2_IN: {  // 批量端點上傳成功,未處理
				Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_NAK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_TRAN_TOG );
//				Write374Index( REG_USB_ENDP2 );  // 對于并口連接可以用本行及下面一行代替上一行的程序,減少寫一次index的時間,提高效率
//				Write374Data( M_SET_EP2_TRAN_NAK( Read374Data0( ) ) ^ BIT_EP2_TRAN_TOG );
				break;
			}
			case USB_INT_EP1_IN: {  // 中斷端點上傳成功,未處理
				Write374Byte( REG_USB_ENDP1, M_SET_EP1_TRAN_NAK( Read374Byte( REG_USB_ENDP1 ) ) ^ BIT_EP1_TRAN_TOG );
				break;
			}
			case USB_INT_EP0_SETUP: {  // 控制傳輸
				USB_SETUP_REQ	SetupReqBuf;
				l = Read374Byte( REG_USB_LENGTH );
				if ( l == sizeof( USB_SETUP_REQ ) ) {
					Read374Block( RAM_ENDP0_RECV, l, (PUINT8)&SetupReqBuf );
					SetupLen = SetupReqBuf.wLengthL;
					if ( SetupReqBuf.wLengthH || SetupLen > 0x7F ) SetupLen = 0x7F;  // 限制總長度
					l = 0;  // 默認為成功并且上傳0長度
					if ( ( SetupReqBuf.bType & DEF_USB_REQ_TYPE ) != DEF_USB_REQ_STAND ) {  /* 只支持標準請求 */
						l = 0xFF;  // 操作失敗
					}
					else {  // 標準請求
						SetupReq = SetupReqBuf.bReq;  // 請求碼
						switch( SetupReq ) {
							case DEF_USB_GET_DESCR:
								switch( SetupReqBuf.wValueH ) {
									case 1:
										pDescr = (PUINT8)( &MyDevDescr[0] );
										l = sizeof( MyDevDescr );
										break;
									case 2:
										pDescr = (PUINT8)( &MyCfgDescr[0] );
										l = sizeof( MyCfgDescr );
										break;
									case 3:
										switch( SetupReqBuf.wValueL ) {
											case 1:
												pDescr = (PUINT8)( &MyManuInfo[0] );
												l = sizeof( MyManuInfo );
												break;
											case 2:
												pDescr = (PUINT8)( &MyProdInfo[0] );
												l = sizeof( MyProdInfo );
												break;
											case 0:
												pDescr = (PUINT8)( &MyLangDescr[0] );
												l = sizeof( MyLangDescr );
												break;
											default:
												l = 0xFF;  // 操作失敗
												break;
										}
										break;
									default:
										l = 0xFF;  // 操作失敗
										break;
								}
								if ( SetupLen > l ) SetupLen = l;  // 限制總長度
								l = SetupLen >= RAM_ENDP0_SIZE ? RAM_ENDP0_SIZE : SetupLen;  // 本次傳輸長度
								Write374Block( RAM_ENDP0_TRAN, l, pDescr );  /* 加載上傳數據 */
								SetupLen -= l;
								pDescr += l;
								break;
							case DEF_USB_SET_ADDRESS:
								SetupLen = SetupReqBuf.wValueL;  // 暫存USB設備地址
								break;
							case DEF_USB_GET_CONFIG:
								Write374Byte( RAM_ENDP0_TRAN, UsbConfig );
								if ( SetupLen >= 1 ) l = 1;
								break;
							case DEF_USB_SET_CONFIG:
								UsbConfig = SetupReqBuf.wValueL;
								break;
							case DEF_USB_CLR_FEATURE:
								if ( ( SetupReqBuf.bType & 0x1F ) == 0x02 ) {  // 不是端點不支持
									switch( SetupReqBuf.wIndexL ) {
										case 0x82:
											Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_NAK( Read374Byte( REG_USB_ENDP2 ) ) );
											break;
										case 0x02:
											Write374Byte( REG_USB_ENDP2, M_SET_EP2_RECV_ACK( Read374Byte( REG_USB_ENDP2 ) ) );
											break;
										case 0x81:
											Write374Byte( REG_USB_ENDP1, M_SET_EP1_TRAN_NAK( Read374Byte( REG_USB_ENDP1 ) ) );
											break;
										case 0x01:
											Write374Byte( REG_USB_ENDP1, M_SET_EP1_RECV_ACK( Read374Byte( REG_USB_ENDP1 ) ) );
											break;
										default:
											l = 0xFF;  // 操作失敗
											break;
									}
								}
								else l = 0xFF;  // 操作失敗
								break;
							case DEF_USB_GET_INTERF:
								Write374Byte( RAM_ENDP0_TRAN, 0 );
								if ( SetupLen >= 1 ) l = 1;
								break;
							case DEF_USB_GET_STATUS:
								Write374Byte( RAM_ENDP0_TRAN, 0 );
								Write374Byte( RAM_ENDP0_TRAN + 1, 0 );
								if ( SetupLen >= 2 ) l = 2;
								else l = SetupLen;
								break;
							default:
								l = 0xFF;  // 操作失敗
								break;
						}
					}
				}
				else l = 0xFF;  // 操作失敗
				if ( l == 0xFF ) {  // 操作失敗
					Write374Byte( REG_USB_ENDP0, M_SET_EP0_RECV_STA( M_SET_EP0_TRAN_STA( 0 ) ) );  // STALL
				}
				else if ( l <= RAM_ENDP0_SIZE ) {  // 上傳數據
					Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_ACK( M_SET_EP0_RECV_ACK( Read374Byte( REG_USB_ENDP0 ) ), l ) | BIT_EP0_TRAN_TOG );  // DATA1
				}
				else {  // 下傳數據或其它
					Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_NAK( M_SET_EP0_RECV_ACK( Read374Byte( REG_USB_ENDP0 ) ) ) | BIT_EP0_RECV_TOG );  // DATA1
				}
				break;
			}
			case USB_INT_EP0_IN: {
				switch( SetupReq ) {
					case DEF_USB_GET_DESCR:
						l = SetupLen >= RAM_ENDP0_SIZE ? RAM_ENDP0_SIZE : SetupLen;  // 本次傳輸長度
						Write374Block( RAM_ENDP0_TRAN, l, pDescr );  /* 加載上傳數據 */
						SetupLen -= l;
						pDescr += l;
						Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_ACK( Read374Byte( REG_USB_ENDP0 ), l ) ^ BIT_EP0_TRAN_TOG );
						break;
					case DEF_USB_SET_ADDRESS:
						Write374Byte( REG_USB_ADDR, SetupLen );
					default:
						Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_NAK( 0 ) );  // 結束
						break;
				}
				break;
			}
			case USB_INT_EP0_OUT: {
				switch( SetupReq ) {
//					case download:
//						get_data;
//						break;
					case DEF_USB_GET_DESCR:
					default:
						Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_NAK( 0 ) );  // 結束
						break;
				}
				break;
			}
			default: {
				break;
			}
		}
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );  // 清中斷標志
	}
	else if ( s & BIT_IF_USB_SUSPEND ) {  // USB總線掛起
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_USB_SUSPEND );  // 清中斷標志
		Write374Byte( REG_SYS_CTRL, Read374Byte( REG_SYS_CTRL ) | BIT_CTRL_OSCIL_OFF );  // 時鐘振蕩器停止振蕩,進入睡眠狀態
	}
	else if ( s & BIT_IF_WAKE_UP ) {  // 芯片喚醒完成
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_WAKE_UP );  // 清中斷標志
	}
	else {  // 意外的中斷,不可能發生的情況,除了硬件損壞
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG );  // 清中斷標志
	}
/*	IE0 = 0;  清中斷標志,與單片機硬件有關,對應于INT0中斷 */
}

/* 關閉CH374的所有USB通訊 */
void	CH374OffUSB( void ) {
	EX0 = 0;  /* 關閉USB中斷,本程序中USB主機模式下使用查詢方式 */
	Write374Byte( REG_USB_SETUP, 0x00 );  /* 關閉USB操作 */
//	CH374Reset( );  /* 復位也可以 */
	CH374DelaymS( 10 );  /* 為USB主從切換進行時間緩沖,這是必要的延時操作,用于讓計算機認為USB設備已經撤離 */
/* 如果CH374仍然連接著計算機,而程序使CH374切換到USB主機模式,那么會導致與計算機之間雙USB主機沖突 */
}

void device( ) {
	CH374DeviceInit( );  /* 初始化USB設備模式 */
	FreeUSBmS = 0;  /* 清除USB空閑計時 */
	while( 1 ) {
		if ( IsKeyPress( ) ) {  /* 有鍵按下 */
			if ( FreeUSBmS >= 250 ) {  /* USB空閑超過250毫秒 */
				printf( "Exit USB device mode\n" );
				CH374OffUSB( );  /* 關閉USB設備 */
				return;
			}
		}
		if ( FreeUSBmS < 250 ) FreeUSBmS ++;  /* USB空閑計時,避免在USB通訊過程中由用戶按鍵導致USB主從切換 */
		CH374DelaymS( 1 );
/* USB設備模式全部在中斷服務中處理,主程序可以做其它事情,當然也可以在主程序中使用查詢方式處理USB設備的通訊 */
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品久久久久久久多人混战| 国产欧美精品区一区二区三区| 精品精品国产高清一毛片一天堂| 亚洲欧美偷拍另类a∨色屁股| 七七婷婷婷婷精品国产| 99精品偷自拍| 国产欧美一区视频| 麻豆免费看一区二区三区| 色欧美乱欧美15图片| 久久网这里都是精品| 亚洲国产另类精品专区| 成人三级在线视频| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲成人免费在线观看| 91美女福利视频| 亚洲国产精品激情在线观看| 久久成人18免费观看| 欧美日韩亚洲综合一区二区三区 | 久久久.com| 日日摸夜夜添夜夜添精品视频 | 国产精品99精品久久免费| 91麻豆精品国产91| 亚洲午夜免费视频| 在线视频欧美精品| 亚洲国产成人91porn| 色诱视频网站一区| 亚洲欧美色一区| 色av成人天堂桃色av| 久久精品夜色噜噜亚洲a∨| 蜜臀av性久久久久蜜臀av麻豆| 在线综合+亚洲+欧美中文字幕| 亚洲国产美女搞黄色| 欧美性大战久久久久久久蜜臀| 亚洲免费观看高清| 欧美性猛交xxxxxxxx| 亚洲区小说区图片区qvod| 91欧美激情一区二区三区成人| 亚洲精品成a人| 欧美午夜免费电影| 三级在线观看一区二区| 日韩欧美一区在线| 国产伦精品一区二区三区视频青涩| 精品国产伦一区二区三区观看体验| 精品一区二区影视| 国产欧美精品一区二区色综合| 岛国av在线一区| 日韩伦理av电影| 欧美日韩电影在线| 国产精品一区二区在线观看不卡| 中文字幕二三区不卡| 一本到一区二区三区| 亚洲无人区一区| 日韩免费一区二区| av亚洲产国偷v产偷v自拍| 樱桃视频在线观看一区| 91精品国产品国语在线不卡| 国产综合色产在线精品| 亚洲欧洲国产日韩| 欧美色视频一区| 九九在线精品视频| 亚洲欧美一区二区不卡| 欧美一级二级在线观看| 不卡一区中文字幕| 午夜激情久久久| 国产亚洲一区二区三区四区 | 国产高清久久久久| 一区二区三区免费看视频| 日韩一区二区在线观看| 大桥未久av一区二区三区中文| 亚洲动漫第一页| 久久精品一区蜜桃臀影院| 欧美伊人精品成人久久综合97 | 视频一区免费在线观看| 国产精品午夜在线观看| 欧美日韩三级一区| 国产精品123| 偷拍亚洲欧洲综合| 中文字幕亚洲一区二区av在线| 欧美一区二区三区男人的天堂| 99久久婷婷国产综合精品| 色婷婷亚洲婷婷| 成人网男人的天堂| 看片的网站亚洲| 亚洲成人久久影院| 国产精品成人免费精品自在线观看| 日韩一区二区三区三四区视频在线观看 | 国产成人精品一区二| 午夜av一区二区| 亚洲视频小说图片| 久久久电影一区二区三区| 欧美人牲a欧美精品| 99re这里都是精品| 国产精品夜夜嗨| 九色综合狠狠综合久久| 日韩av在线播放中文字幕| 亚洲激情男女视频| 亚洲欧美日韩国产手机在线| 国产欧美日韩另类一区| 日韩欧美激情四射| 欧美一区二区三区喷汁尤物| 欧洲av在线精品| 色就色 综合激情| 91在线无精精品入口| 成人h版在线观看| 丁香婷婷综合激情五月色| 激情国产一区二区| 经典三级一区二区| 狠狠色丁香九九婷婷综合五月| 久久精品国产色蜜蜜麻豆| 青青草97国产精品免费观看 | 欧美电视剧免费观看| 欧美日韩视频不卡| 欧美视频日韩视频在线观看| 在线观看三级视频欧美| 一本一道波多野结衣一区二区| 91首页免费视频| 91网页版在线| 欧美系列在线观看| 欧美精品久久天天躁| 7777精品伊人久久久大香线蕉| 欧美老肥妇做.爰bbww视频| 欧美人妖巨大在线| 日韩久久久久久| 欧美激情在线观看视频免费| 国产精品乱码人人做人人爱| 国产精品家庭影院| 亚洲黄色尤物视频| 午夜电影网一区| 久久99精品一区二区三区三区| 国产精品白丝jk白祙喷水网站| 国产丶欧美丶日本不卡视频| 不卡的电视剧免费网站有什么| 日本高清不卡一区| 欧美精品日韩精品| 久久这里只精品最新地址| 中文在线免费一区三区高中清不卡| 国产精品精品国产色婷婷| 亚洲午夜激情网站| 国产一区二区主播在线| 2020国产成人综合网| 中文字幕av不卡| 亚洲香肠在线观看| 精品亚洲国内自在自线福利| 国产盗摄一区二区三区| 日本伦理一区二区| 欧美成人aa大片| 亚洲免费伊人电影| 久久不见久久见免费视频7| 成人av电影在线| 欧美日韩国产在线观看| 久久精品一区二区三区四区| 夜夜精品视频一区二区| 狠狠色丁香婷婷综合| 色婷婷av一区二区三区软件| 日韩免费在线观看| 一二三区精品福利视频| 国产一区二区三区免费观看| 色哟哟国产精品免费观看| 欧美成人video| 亚洲精品成人悠悠色影视| 国产一区二区三区免费| 欧美日韩视频在线第一区| 国产精品乱码妇女bbbb| 蜜臀av一区二区在线免费观看| 91麻豆国产香蕉久久精品| 精品国产制服丝袜高跟| 性做久久久久久| 99re在线视频这里只有精品| 精品欧美久久久| 午夜视频在线观看一区二区三区 | 日本高清不卡一区| 国产日本欧洲亚洲| 蜜臀av性久久久久蜜臀aⅴ| 一本色道久久综合精品竹菊 | 精品国产髙清在线看国产毛片| 亚洲色图制服丝袜| 粉嫩在线一区二区三区视频| 91精品国产综合久久福利软件 | 亚洲激情六月丁香| av在线一区二区三区| 久久久亚洲高清| 蜜芽一区二区三区| 538在线一区二区精品国产| 亚洲综合在线视频| 一本色道久久加勒比精品| 亚洲欧洲精品一区二区三区不卡| 国产精品一区二区在线观看不卡| 精品免费一区二区三区| 日本欧美韩国一区三区| 6080午夜不卡| 日本午夜一本久久久综合| 欧美军同video69gay| 丝瓜av网站精品一区二区| 欧美性猛片xxxx免费看久爱| 夜夜嗨av一区二区三区| 欧美四级电影在线观看| 五月天久久比比资源色| 欧美在线视频不卡| 天堂资源在线中文精品| 制服.丝袜.亚洲.另类.中文 |