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

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

?? device.c

?? CH374的開發(fā)程序
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
													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;  /* 返回讀出的數(shù)據(jù) */
									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;  /* 寫操作不返回?cái)?shù)據(jù) */
								pudp->up.mStatus = ERR_SUCCESS;
							}
						}
						else switch ( pudp->down.mCommand ) {  /* 命令類型:實(shí)現(xiàn)特定功能,分析命令碼 */
							case USB_CMD_GET_FW_INFO:  /* 獲取調(diào)試固件程序的版本,并取消未完成的上傳數(shù)據(jù)塊 */
								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 ) ) );  /* 同步觸發(fā)位不變,設(shè)置USB端點(diǎn)2的IN正忙,返回NAK */
								break;
							case USB_CMD_GET_APP_INFO:  /* 獲取當(dāng)前應(yīng)用系統(tǒng)的版本和說明字符串 */
								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端點(diǎn)2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊
						Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG );
//						Write374Index( REG_USB_ENDP2 );  // 對(duì)于并口連接可以用本行及下面一行代替上一行的程序,減少寫一次index的時(shí)間,提高效率
//						Write374Data( M_SET_EP2_TRAN_ACK( Read374Data0( ) ) ^ BIT_EP2_RECV_TOG );
					}
				}
				break;
			}
			case USB_INT_EP2_IN: {  // 批量端點(diǎn)上傳成功,未處理
				Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_NAK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_TRAN_TOG );
//				Write374Index( REG_USB_ENDP2 );  // 對(duì)于并口連接可以用本行及下面一行代替上一行的程序,減少寫一次index的時(shí)間,提高效率
//				Write374Data( M_SET_EP2_TRAN_NAK( Read374Data0( ) ) ^ BIT_EP2_TRAN_TOG );
				break;
			}
			case USB_INT_EP1_IN: {  // 中斷端點(diǎn)上傳成功,未處理
				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;  // 限制總長(zhǎng)度
					l = 0;  // 默認(rèn)為成功并且上傳0長(zhǎng)度
					if ( ( SetupReqBuf.bType & DEF_USB_REQ_TYPE ) != DEF_USB_REQ_STAND ) {  /* 只支持標(biāo)準(zhǔn)請(qǐng)求 */
						l = 0xFF;  // 操作失敗
					}
					else {  // 標(biāo)準(zhǔn)請(qǐng)求
						SetupReq = SetupReqBuf.bReq;  // 請(qǐng)求碼
						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;  // 限制總長(zhǎng)度
								l = SetupLen >= RAM_ENDP0_SIZE ? RAM_ENDP0_SIZE : SetupLen;  // 本次傳輸長(zhǎng)度
								Write374Block( RAM_ENDP0_TRAN, l, pDescr );  /* 加載上傳數(shù)據(jù) */
								SetupLen -= l;
								pDescr += l;
								break;
							case DEF_USB_SET_ADDRESS:
								SetupLen = SetupReqBuf.wValueL;  // 暫存USB設(shè)備地址
								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 ) {  // 不是端點(diǎn)不支持
									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 ) {  // 上傳數(shù)據(jù)
					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 {  // 下傳數(shù)據(jù)或其它
					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;  // 本次傳輸長(zhǎng)度
						Write374Block( RAM_ENDP0_TRAN, l, pDescr );  /* 加載上傳數(shù)據(jù) */
						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 ) );  // 結(jié)束
						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 ) );  // 結(jié)束
						break;
				}
				break;
			}
			default: {
				break;
			}
		}
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );  // 清中斷標(biāo)志
	}
	else if ( s & BIT_IF_USB_SUSPEND ) {  // USB總線掛起
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_USB_SUSPEND );  // 清中斷標(biāo)志
		Write374Byte( REG_SYS_CTRL, Read374Byte( REG_SYS_CTRL ) | BIT_CTRL_OSCIL_OFF );  // 時(shí)鐘振蕩器停止振蕩,進(jìn)入睡眠狀態(tài)
	}
	else if ( s & BIT_IF_WAKE_UP ) {  // 芯片喚醒完成
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_WAKE_UP );  // 清中斷標(biāo)志
	}
	else {  // 意外的中斷,不可能發(fā)生的情況,除了硬件損壞
		Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG );  // 清中斷標(biāo)志
	}
/*	IE0 = 0;  清中斷標(biāo)志,與單片機(jī)硬件有關(guān),對(duì)應(yīng)于INT0中斷 */
}

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

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区小说| 久久精品亚洲一区二区三区浴池| 日本精品裸体写真集在线观看 | 丝袜美腿亚洲一区| 男男gaygay亚洲| 99精品久久久久久| 欧美顶级少妇做爰| 国产婷婷色一区二区三区四区| 亚洲色图另类专区| 九色综合国产一区二区三区| 91丨九色丨黑人外教| 精品剧情v国产在线观看在线| 国产精品久久三| 麻豆精品在线播放| 99久久精品久久久久久清纯| 日韩一二在线观看| 亚洲色图清纯唯美| 国产精品一卡二卡在线观看| 欧美日韩精品欧美日韩精品一综合| 久久久亚洲国产美女国产盗摄| 五月综合激情日本mⅴ| 成人精品鲁一区一区二区| 制服丝袜中文字幕亚洲| 亚洲色图欧美激情| 春色校园综合激情亚洲| 久久久久久影视| 蜜臀av在线播放一区二区三区| 99精品国产一区二区三区不卡| 蜜臀av一区二区三区| 偷拍与自拍一区| 欧美亚洲国产怡红院影院| 国产精品国产自产拍高清av王其| 激情综合色综合久久综合| 欧美男生操女生| 午夜久久电影网| 欧美日韩国产小视频在线观看| 亚洲精选视频免费看| 一本一本大道香蕉久在线精品| 国产精品全国免费观看高清 | 一区二区三区日韩欧美| 91日韩精品一区| 亚洲国产精华液网站w| 国产99久久久国产精品潘金| 国产精品动漫网站| 91片在线免费观看| 日韩中文字幕1| 精品欧美一区二区在线观看| 狠狠色狠狠色综合| 国产精品免费av| 在线影院国内精品| 日韩一区精品字幕| 久久在线观看免费| 91女神在线视频| 秋霞电影网一区二区| 国产三区在线成人av| 91在线视频免费91| 水野朝阳av一区二区三区| 精品国产乱码久久久久久久| 91麻豆高清视频| 奇米精品一区二区三区四区| 中文字幕第一区二区| 欧美日韩视频在线观看一区二区三区 | 五月激情六月综合| 国产日韩欧美制服另类| 欧美性猛交xxxxxx富婆| 国产精品亚洲一区二区三区妖精 | 欧美羞羞免费网站| 久久se精品一区二区| 亚洲一区精品在线| 欧美高清在线视频| 日韩你懂的在线观看| 色狠狠av一区二区三区| 国精品**一区二区三区在线蜜桃| 亚洲黄色小说网站| 中文字幕成人av| 欧美videos中文字幕| 欧美日韩激情一区| 一本到一区二区三区| 成人看片黄a免费看在线| 精品亚洲成a人| 日本成人在线看| 五月天视频一区| 亚洲一区在线看| 亚洲黄一区二区三区| 亚洲视频资源在线| 中文字幕一区二区三区视频| 欧美国产综合色视频| 久久久91精品国产一区二区精品 | 成人精品亚洲人成在线| 国产a精品视频| 国产成人精品在线看| 成人免费高清视频在线观看| 成人免费电影视频| 懂色av一区二区三区蜜臀 | 一区二区三区国产豹纹内裤在线| 国产精品久久久久影院亚瑟| 99国产精品国产精品久久| 白白色亚洲国产精品| 91蜜桃视频在线| 欧美三级乱人伦电影| 欧美喷水一区二区| 91麻豆精品在线观看| 欧美主播一区二区三区| 久久国内精品视频| 奇米888四色在线精品| 日韩电影在线观看电影| 午夜精品久久久久久久99水蜜桃 | 欧美日韩国产不卡| 欧美成人精品福利| 欧美一区欧美二区| 久久久精品中文字幕麻豆发布| 亚洲国产精品黑人久久久| 亚洲国产激情av| 亚洲一区二区三区在线播放| 人人精品人人爱| 国产福利一区二区三区| av一区二区三区在线| 欧美肥妇bbw| 久久久高清一区二区三区| 最新国产成人在线观看| 亚洲国产精品一区二区尤物区| 国产福利91精品一区二区三区| 99麻豆久久久国产精品免费| 欧美人成免费网站| 国产精品动漫网站| 久久精品国产99久久6| 成人手机在线视频| 日韩网站在线看片你懂的| 亚洲乱码国产乱码精品精可以看| 天天操天天综合网| a在线欧美一区| 日韩一区二区三区四区五区六区| 亚洲精品视频观看| 国产suv精品一区二区883| 777久久久精品| 午夜久久久久久电影| 日本精品免费观看高清观看| 精品日韩欧美一区二区| 午夜影视日本亚洲欧洲精品| 91一区在线观看| 国产精品久久久99| 国模套图日韩精品一区二区| 欧美一区二区视频在线观看 | 日韩国产在线一| 欧美网站大全在线观看| 日韩伦理免费电影| 懂色av一区二区三区免费观看| 久久久久久久综合色一本| 九一九一国产精品| 日韩三级精品电影久久久| 石原莉奈一区二区三区在线观看| 欧美午夜视频网站| 亚洲国产一区二区三区青草影视| 在线观看一区二区视频| 亚洲午夜免费视频| 欧美视频在线一区二区三区 | 国产一区二区免费在线| 精品少妇一区二区三区视频免付费 | 日韩三级电影网址| 捆绑紧缚一区二区三区视频| 欧美一级理论性理论a| 麻豆精品一区二区| 久久久亚洲高清| 成人va在线观看| 亚洲激情在线播放| 91精品婷婷国产综合久久性色 | 欧美色大人视频| 久久国产剧场电影| 久久精品在这里| 91在线视频官网| 亚洲成人av一区| 国产喷白浆一区二区三区| 97久久久精品综合88久久| 亚洲综合色区另类av| 精品少妇一区二区| 色综合视频一区二区三区高清| 亚洲精品一二三| 欧美白人最猛性xxxxx69交| 粉嫩在线一区二区三区视频| 亚洲v中文字幕| 国产精品日韩成人| 日韩视频免费观看高清在线视频| 91在线你懂得| 国产福利91精品| 婷婷中文字幕综合| 中文字幕一区二区三区在线不卡| 精品欧美久久久| 91在线观看一区二区| 久久99精品国产麻豆婷婷洗澡| 亚洲高清中文字幕| 亚洲视频一区在线观看| 日韩欧美黄色影院| 91精品一区二区三区在线观看| 在线视频欧美区| 91香蕉视频污在线| 高清成人免费视频| 国产一区三区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲国产欧美一区二区三区丁香婷| 国产精品家庭影院|