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

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

?? device.c

?? CH374 USB-HOST文件系統單片機子程序庫
?? 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一区二区三区免费野_久草精品视频
欧美高清精品3d| 天天色天天操综合| 国产91丝袜在线播放| www国产成人| 美国一区二区三区在线播放| 欧美欧美欧美欧美首页| 亚洲一二三区在线观看| 欧美男男青年gay1069videost| 亚洲美女精品一区| 色婷婷久久久综合中文字幕| 国产精品素人视频| 色视频成人在线观看免| 亚洲精品免费看| 4hu四虎永久在线影院成人| 日本不卡的三区四区五区| 日韩一级片网址| 成人avav影音| 一区二区三区欧美日韩| 3d动漫精品啪啪| 国产乱码精品一区二区三| 国产精品久久久久久久久免费相片| 成人久久18免费网站麻豆| 一区二区日韩av| 欧美一二三区在线| 99久久亚洲一区二区三区青草| 日日骚欧美日韩| 成人免费在线播放视频| 日韩欧美美女一区二区三区| 色网综合在线观看| 久久爱www久久做| 亚洲综合一区二区精品导航| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 日本视频在线一区| 国产欧美精品一区二区三区四区 | 日本不卡视频在线观看| 久久久精品tv| 欧美精品久久99| 色哟哟国产精品| 国产精品亚洲第一区在线暖暖韩国| 自拍视频在线观看一区二区| 91精品国产乱| 在线观看91视频| 91色porny蝌蚪| 欧美一区二区精品在线| 日韩中文字幕av电影| 91在线观看成人| 九色综合狠狠综合久久| 国产东北露脸精品视频| 97久久超碰国产精品| 欧美日韩精品欧美日韩精品一 | 天天av天天翘天天综合网| 狠狠色丁香婷婷综合久久片| 欧美视频一区二区三区| 久久久久久久精| 日本欧洲一区二区| 91久久香蕉国产日韩欧美9色| 久久午夜色播影院免费高清| 香蕉成人伊视频在线观看| 成人99免费视频| 久久夜色精品国产噜噜av| 亚洲一二三四在线观看| 成人免费观看av| 亚洲国产经典视频| 国内精品伊人久久久久av一坑 | 91精品久久久久久蜜臀| 亚洲一区在线观看网站| 欧美在线观看视频一区二区三区| 国产精品污www在线观看| 福利一区福利二区| 亚洲欧美自拍偷拍色图| 99久久99久久精品国产片果冻| 久久久久久久久久久99999| 国产精品1024| 亚洲区小说区图片区qvod| eeuss鲁片一区二区三区在线看| 日本一区二区成人| 97久久久精品综合88久久| 亚洲国产日韩精品| 7777精品伊人久久久大香线蕉| 日本欧美大码aⅴ在线播放| 欧美成va人片在线观看| 粉嫩高潮美女一区二区三区| 中文字幕一区二区不卡| 色噜噜久久综合| 日本人妖一区二区| 亚洲国产激情av| 色国产精品一区在线观看| 日韩影院免费视频| 久久久久久久av麻豆果冻| 91福利视频在线| 国产做a爰片久久毛片| 亚洲精品国产一区二区精华液| 欧美人妖巨大在线| 国产成人亚洲综合色影视| 亚洲一区二区三区四区在线| 久久蜜桃一区二区| 欧美老肥妇做.爰bbww| 成人精品高清在线| 免费在线看一区| 亚洲午夜在线视频| 国产精品九色蝌蚪自拍| 日韩视频一区在线观看| 色吊一区二区三区| 91在线观看地址| 国产麻豆欧美日韩一区| 麻豆成人久久精品二区三区小说| 一区二区三区中文字幕在线观看| 国产丝袜美腿一区二区三区| 欧美成人综合网站| 欧美一区二区三区思思人| 欧美日韩一区二区三区在线| 91浏览器打开| 91在线精品秘密一区二区| 亚洲精品美腿丝袜| 国产午夜精品一区二区| 亚洲日本va在线观看| 久久蜜臀精品av| 欧美成人一区二区三区| 欧美日韩aaa| 欧美狂野另类xxxxoooo| 欧美在线观看一区| 91麻豆精东视频| av一区二区三区黑人| 成人国产在线观看| 99久久精品免费看国产免费软件| 亚洲午夜日本在线观看| 一区二区三区不卡视频| 亚洲精品伦理在线| 一区二区三区在线观看动漫| 一区在线播放视频| 亚洲啪啪综合av一区二区三区| 国产色一区二区| 中文一区二区完整视频在线观看| 久久久久久麻豆| 一区免费观看视频| 国产精品热久久久久夜色精品三区| 欧美极品美女视频| 亚洲日本在线视频观看| 亚洲3atv精品一区二区三区| 日韩制服丝袜av| 日本在线不卡一区| 成人美女视频在线看| 91美女片黄在线观看| 欧美日韩中文字幕一区二区| 91精品国产高清一区二区三区 | 岛国一区二区在线观看| 色综合中文字幕| 欧美一区二区精品久久911| 久久精子c满五个校花| 一区二区三区在线不卡| 激情综合色播激情啊| 波多野结衣亚洲| 精品少妇一区二区三区在线视频| 国产精品久线在线观看| 亚洲乱码日产精品bd| 开心九九激情九九欧美日韩精美视频电影 | 国产乱子轮精品视频| 日本精品视频一区二区| 精品欧美乱码久久久久久1区2区| 亚洲乱码日产精品bd| 七七婷婷婷婷精品国产| gogogo免费视频观看亚洲一| 91精品国产高清一区二区三区蜜臀| √…a在线天堂一区| 亚洲欧美日韩成人高清在线一区| 日韩精品一级中文字幕精品视频免费观看 | 亚洲视频网在线直播| 国产一区二区三区国产| 欧美欧美欧美欧美首页| 国产精品美女久久福利网站| 国产成人一级电影| 国产午夜亚洲精品羞羞网站| 日韩激情中文字幕| 精品视频在线看| 一区二区三区在线高清| 不卡的av网站| 国产欧美视频在线观看| 麻豆一区二区三区| 欧美一区二区黄色| 日韩高清一区在线| 色悠悠亚洲一区二区| 亚洲日本欧美天堂| 色就色 综合激情| 爽好多水快深点欧美视频| 欧美精品久久一区二区三区| 亚洲色图欧洲色图| 欧美亚洲一区二区在线| 日韩电影在线免费| 精品捆绑美女sm三区| 成人高清免费观看| 一区二区三区小说| 欧美人成免费网站| 麻豆成人免费电影| 国产精品全国免费观看高清| 青青草精品视频| 国产精品久久久久久久蜜臀| 欧美亚洲高清一区| 丝袜美腿亚洲综合| 久久久噜噜噜久噜久久综合| 色综合久久久久综合体桃花网|