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

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

?? usbhost.c

?? 單片機讀寫U盤源碼 基于51單片機和國產USB芯片CH374
?? C
?? 第 1 頁 / 共 3 頁
字號:

/*********************************************************************************************************
** 函數名稱: mSetControlIn
** 功能描述: 設置默認控制數據輸入
**
** 輸 入: 
** 輸 出: 
**         
** 全局變量: 無
** 調用模塊: 無
** 調試碼:   無
**  
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  mSetControlIn( void )
{
     mSaveUsbPid = DEF_USB_PID_IN ;
     Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( DEF_USB_PID_IN, mDiskDefaultEndp ) ) ;
     Write374Byte( REG_USB_H_CTRL, mSaveDevEndpTog | BIT_HOST_START );
}

/*********************************************************************************************************
** 函數名稱: mSetControlOut
** 功能描述: 設置默認控制數據輸出
**
** 輸 入: 
** 輸 出: 
**         
** 全局變量: 無
** 調用模塊: 無
** 調試碼:   無
**  
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  mSetControlOut( void )
{
     mSaveUsbPid = DEF_USB_PID_OUT ; 
     Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( DEF_USB_PID_OUT, mDiskDefaultEndp ) );
     Write374Byte( REG_USB_H_CTRL, mSaveDevEndpTog | BIT_HOST_START );
}

/*********************************************************************************************************
** 函數名稱: mSetBulkIn
** 功能描述: 設置批量數據輸入
**
** 輸 入: 
** 輸 出: 
**         
** 全局變量: 無
** 調用模塊: 無
** 調試碼:   無
**  
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  mSetBulkIn( void )
{
     mSaveUsbPid = DEF_USB_PID_IN ;
     Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( DEF_USB_PID_IN, mDiskBulkInEndp ) ) ;
     Write374Byte( REG_USB_H_CTRL, mSaveDevEndpTog | BIT_HOST_START );
}

/*********************************************************************************************************
** 函數名稱: mSetBulkOut
** 功能描述: 設置批量數據輸出
**
** 輸 入: 
** 輸 出: 
**         
** 全局變量: 無
** 調用模塊: 無
** 調試碼:   無
**  
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  mSetBulkOut( void )
{
     mSaveUsbPid = DEF_USB_PID_OUT ; 
     Write374Byte( REG_USB_H_PID, M_MK_HOST_PID_ENDP( DEF_USB_PID_OUT, mDiskBulkOutEndp ) );
     Write374Byte( REG_USB_H_CTRL, mSaveDevEndpTog | BIT_HOST_START );
}

/*********************************************************************************************************
** 函數名稱: HostTransactInter
** 功能描述: CH374傳輸事務
**           需預先輸入mSaveUsbPid,PID令牌+目的端點地址,同步標志
**           NAK重試,超時出錯重試
** 輸 入: 
** 輸 出: 返回同CH375
**         
** 全局變量: 無
** 調用模塊: 無
** 調試碼:   無
**  
**
** 作 者: 徐亦朱
** 日 期: 2007年9月24日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  HostTransactInter( void )
{
     UINT8 retry;
     UINT8 s;
     UINT8 r;
     UINT8 u;
     for ( retry = 3; retry != 0; retry -- )
     {
          s = Wait374Interrupt( ) ;
          if ( s == ERR_USB_UNKNOWN )   //中斷超時,可能是硬件異常,返回錯誤值
               return( s );
          s = Read374Byte( REG_INTER_FLAG );
          if ( s & BIT_IF_DEV_DETECT )  //USB設備插拔事件
          {
               mDelayuS( 200 );         // 等待傳輸完成
               Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_DEV_DETECT | BIT_IF_TRANSFER );   // 清中斷標志
               if ( s & BIT_IF_DEV_ATTACH )  //USB設備的當前連接狀態:1 = 已經連接/插入
               {
                    u = Read374Byte( REG_USB_SETUP );
                    if( s & BIT_IF_USB_DX_IN )    //速度匹配,不需要切換速度
                    {
                         if ( u & BIT_SETP_USB_SPEED )      //低速USB設備
                              return( USB_INT_CONNECT_LS );
                         return( USB_INT_CONNECT );         // 全速USB設備
                    }
                    else                //速度失配,需要切換速度
                    {
                         if ( u & BIT_SETP_USB_SPEED )
                              return( USB_INT_CONNECT );    // 全速USB設備
                         return( USB_INT_CONNECT_LS );      // 低速USB設備
                    }
               }
               else 
                    return( USB_INT_DISCONNECT );           // USB設備斷開事件 
          }
          else  if ( s & BIT_IF_TRANSFER )                  //傳輸完成
          {
               //mDelayuS( 200 );         // 等待傳輸完成
               #ifdef DEBUG_NOW
               printf( " 傳輸完成中斷.\n " ) ;
               #endif
               Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );   // 清中斷標志
               s = Read374Byte( REG_USB_STATUS );           // USB狀態
               r = s & BIT_STAT_DEV_RESP;                   // USB設備應答狀態
                          
               if ( mSaveUsbPid == DEF_USB_PID_IN )         //IN事務
               {
                    #ifdef DEBUG_NOW
                    printf ( " The PID is IN \n " ) ;
                    #endif
                    if ( M_IS_HOST_IN_DATA( s ) )           //DEF_USB_PID_DATA0 or DEF_USB_PID_DATA1
                    {
                         if ( s & BIT_STAT_TOG_MATCH )
                         {
                              #ifdef DEBUG_NOW
                              printf( " The In_PID's Hand is Right \n " ) ;
                              #endif
                              return( USB_INT_SUCCESS );
                         }    
                         goto mHostTransRetry;              //不同步則需丟棄后重試
                    }
               }
               else  if ( mSaveUsbPid == DEF_USB_PID_OUT )  //OUT事務
               {
                    #ifdef DEBUG_NOW
                    printf ( " The PID is OUT \n " ) ;
                    #endif
                    if ( r == DEF_USB_PID_ACK )
                    {     
                         #ifdef DEBUG_NOW
                         printf( " The OUT_PID's Hand is ACK \n " ) ;
                         #endif
                         return( USB_INT_SUCCESS ) ;
                    }
               }
               else  if ( mSaveUsbPid == DEF_USB_PID_SETUP )//SETUP事務
               {
                    #ifdef DEBUG_NOW
                    printf ( " The PID is SETUP \n " ) ;
                    #endif
                    /*if ( r == DEF_USB_PID_ACK )
                    {     
                         #ifdef DEBUG_NOW
                         printf( " The SETUP_PID's Hand is ACK \n " ) ;
                         #endif
                         return( USB_INT_SUCCESS ) ;
                    }*/
                    return( USB_INT_SUCCESS ) ;
               }
               if ( r == DEF_USB_PID_NAK )                  //NAK重試
               {
                    #ifdef DEBUG_NOW
                    printf ( " The Hand is NAK \n " ) ;
                    #endif
                    retry ++ ;
                    goto mHostTransRetry;
               }
               else  if ( ! M_IS_HOST_TIMEOUT( s ) )        //錯誤或者無需重試或者意外應答,不是超時/出錯
               {    
                    #ifdef DEBUG_NOW
                    printf ( " The Hand is 錯誤或者無需重試或者意外應答,不是超時/出錯 \n " ) ;
                    #endif
                    return( r | 0x20 );
               }
          }
          else                          //其他中斷,不應該發生的情況
          {
               mDelaymS( 200 );         //等待傳輸完成
               #ifdef DEBUG_NOW
               printf ( " 其他中斷,不應該發生的情況 \n " ) ;
               #endif
               Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_INTER_FLAG );      //清中斷標志 
          }
               
mHostTransRetry:
     if( retry > 1 )          //繼續重試
     {
          #ifdef DEBUG_NOW
          printf ( " 繼續重試 \n " ) ;
          #endif
          Write374Byte( REG_USB_H_CTRL, Read374Byte( REG_USB_H_CTRL ) | BIT_HOST_START ); //再次啟動傳輸
     }
     
     }
     return( 0x20 );
}

/*********************************************************************************************************
** 函數名稱: HostCtrlTransfer374
** 功能描述: 執行控制傳輸
**           需預先輸入mSaveUsbPid,PID令牌+目的端點地址,同步標志
**           NAK重試,超時出錯重試
** 輸 入:   ReqBuf指向8字節請求碼,DatBuf為收發緩沖區
**           如果需要接收和發送數據,那么DatBuf需要指向有效緩沖區用于存放后續數據,
**           實際成功收發的總長度保存在ReqLen指向的字節變量中
** 輸 出:   返回同CH375
**         
** 全局變量: 無
** 調用模塊: 無
** 調試碼:   無
**  
**
** 作 者: 徐亦朱

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线一区观看| 丝袜美腿成人在线| 久久午夜羞羞影院免费观看| 欧美日韩精品一区二区三区四区 | 亚洲图片你懂的| 2014亚洲片线观看视频免费| 日韩欧美色综合网站| 欧美一区二区久久久| 日韩欧美三级在线| 精品国产乱码91久久久久久网站| 日韩欧美二区三区| 欧美r级电影在线观看| 欧美成人aa大片| 久久婷婷成人综合色| 国产视频一区二区在线观看| 欧美国产精品专区| 亚洲欧美日韩一区二区三区在线观看| 国产精品乱子久久久久| 中文字幕一区二区三区av | 色婷婷久久综合| 欧美亚洲一区二区在线| 精品视频在线看| 欧美一区二区三区啪啪| 久久老女人爱爱| 亚洲欧洲三级电影| 亚洲综合网站在线观看| 日韩高清不卡一区二区| 久草精品在线观看| 丰满少妇在线播放bd日韩电影| 成人激情开心网| 欧美日韩一卡二卡三卡| 日韩欧美一卡二卡| 中文字幕精品一区二区精品绿巨人 | 麻豆91免费观看| 成人午夜大片免费观看| 欧美系列一区二区| 精品欧美一区二区三区精品久久| 国产欧美日韩视频在线观看| 自拍偷拍亚洲综合| 蜜芽一区二区三区| www.亚洲免费av| 日韩女优制服丝袜电影| 亚洲欧美二区三区| 捆绑调教美女网站视频一区| 91蜜桃在线免费视频| 日韩久久久精品| 亚洲最新视频在线播放| 国产最新精品精品你懂的| 在线这里只有精品| 国产网站一区二区三区| 亚洲成人三级小说| 大白屁股一区二区视频| 911精品产国品一二三产区| 亚洲国产精品v| 美美哒免费高清在线观看视频一区二区 | 日韩精品一级中文字幕精品视频免费观看| 黑人巨大精品欧美一区| 在线观看视频一区二区欧美日韩| 久久久久久久久久久99999| 亚洲国产乱码最新视频| jlzzjlzz亚洲女人18| 日韩精品中文字幕一区二区三区| 亚洲图片有声小说| 91麻豆成人久久精品二区三区| xvideos.蜜桃一区二区| 裸体一区二区三区| 欧美日韩国产另类一区| 亚洲嫩草精品久久| 暴力调教一区二区三区| 亚洲国产成人私人影院tom| 老司机一区二区| 日韩欧美不卡在线观看视频| 一区二区三区电影在线播| 日本美女一区二区| 成人免费看黄yyy456| 亚洲精品在线观| 久久99精品久久久久久久久久久久| 欧美视频一区二区三区在线观看| 中文字幕不卡的av| 成人高清伦理免费影院在线观看| 欧美激情一区二区在线| 国产乱码精品1区2区3区| 日韩免费成人网| 免费在线观看视频一区| 日韩一级二级三级精品视频| 开心九九激情九九欧美日韩精美视频电影| 欧美日韩国产三级| 亚洲成人免费影院| 在线成人av网站| 蜜桃视频在线观看一区二区| 欧美成人一区二区三区| 国产乱码精品一区二区三区忘忧草 | 中文字幕免费不卡在线| 成人美女视频在线观看18| 中文av一区二区| 色婷婷综合久久久久中文 | 欧美色成人综合| 视频一区二区不卡| 日韩精品一区二区在线观看| 国产精品一级黄| 中文在线免费一区三区高中清不卡| 播五月开心婷婷综合| 亚洲一区二区三区三| 欧美一区二区三区视频| 成人一区二区在线观看| 亚洲狠狠丁香婷婷综合久久久| 欧美亚洲动漫精品| 久88久久88久久久| 亚洲伦理在线精品| 欧美一区二区三区播放老司机| 国产美女视频91| 亚洲综合激情另类小说区| 日韩一二三区视频| 丁香天五香天堂综合| 一区二区三区中文在线观看| 日韩欧美另类在线| 成人av在线资源| 奇米影视一区二区三区| 国产精品私人自拍| 欧美日韩国产综合久久| 成人福利视频在线看| 三级在线观看一区二区| 国产偷国产偷精品高清尤物 | 亚洲综合色区另类av| 久久久精品tv| 欧美在线|欧美| 丰满白嫩尤物一区二区| 免费不卡在线视频| 一区二区三区国产| 中文字幕乱码日本亚洲一区二区 | 美日韩一级片在线观看| 国产精品日日摸夜夜摸av| 欧美日韩一级二级| 精品在线免费观看| 精品亚洲免费视频| 亚洲成a人片综合在线| 国产精品欧美综合在线| 欧美岛国在线观看| 欧美日韩免费观看一区二区三区| 国产成a人无v码亚洲福利| 日本sm残虐另类| 一区二区三区鲁丝不卡| 久久久99精品免费观看| 日韩精品专区在线影院重磅| 欧美色中文字幕| 91香蕉国产在线观看软件| 国产精品1区2区| 国内不卡的二区三区中文字幕| 日本中文一区二区三区| 亚洲午夜电影在线观看| 亚洲永久精品国产| 亚洲精品亚洲人成人网| 中文字幕亚洲欧美在线不卡| 国产丝袜美腿一区二区三区| 久久美女艺术照精彩视频福利播放| 欧美一级免费大片| 91精品啪在线观看国产60岁| 欧美裸体一区二区三区| 欧美视频在线不卡| 欧美三日本三级三级在线播放| 色网站国产精品| 在线观看中文字幕不卡| 在线影视一区二区三区| 在线视频中文字幕一区二区| 在线视频你懂得一区二区三区| 欧美揉bbbbb揉bbbbb| 欧美美女bb生活片| 日韩欧美的一区| 国产亚洲精品bt天堂精选| 欧美极品xxx| 亚洲视频 欧洲视频| 亚洲免费av高清| 性感美女久久精品| 免费成人在线网站| 国产69精品久久777的优势| 成人精品视频一区二区三区| 色偷偷88欧美精品久久久| 欧美日本韩国一区| 久久精品网站免费观看| 亚洲精品美国一| 蜜臀精品久久久久久蜜臀| 国产麻豆视频精品| 91麻豆国产自产在线观看| 欧美高清视频一二三区| 欧美韩日一区二区三区四区| 亚洲最新视频在线播放| 久久疯狂做爰流白浆xx| 92精品国产成人观看免费| 欧美一区二区国产| 国产精品第一页第二页第三页| 五月天激情小说综合| 激情深爱一区二区| 91电影在线观看| 国产亚洲欧洲997久久综合| 尤物av一区二区| 国产乱码精品一区二区三区av | 99久久精品费精品国产一区二区| 欧美日韩亚洲综合一区| 久久久久国产免费免费| 亚洲国产一二三|