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

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

?? upsd3400_upsd_usb.c

?? upsd34xx系列單片機(jī)keil環(huán)境中的開(kāi)發(fā)例程
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*------------------------------------------------------------------------------
upsd3400_upsd_usb.c

Version:
March 22, 2005 - Version 1.0 - Initial Release.

Description:  Basic USB Functions that include enumeration.

Note:
It is important to change, as appropriate, the PLL setting in the 
USBInitialize() function to match the MCU's oscillator in order for
USB to work properly.

Copyright (c) 2005 STMicroelectronics Inc.

This example demo code is provided as is and has no warranty,
implied or otherwise.  You are free to use/modify any of the provided
code at your own risk in your applications with the expressed limitation
of liability (see below) so long as your product using the code contains
at least one uPSD product (device).

LIMITATION OF LIABILITY:   NEITHER STMicroelectronics NOR ITS VENDORS OR 
AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA,
INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS AGREEMENT OR
OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
------------------------------------------------------------------------------*/

#pragma NOAREGS

#include "upsd3400.h"
#include "upsd3400_usb.h"
#include "upsd3400_upsd_usb.h"
#include "upsd3400_usb_app.h"



#define MASS_STORAGE 1



// Constant Variables for USB Descriptors
extern const device_descriptor code deviceDesc;
extern const configuration_descriptor code configDesc;
extern const uchar * const code stringDescTable[];

unsigned char data usbState, ep0state, ep1state;
static unsigned char confignum;
static unsigned char remotewakeupen;
static unsigned char DevIdleRate;

setup_buffer setupPacket;
static unsigned char* pTransmitBufferEP0;
static unsigned char  bytesToTransmitEP0;

//data unsigned char xdata * TxBufferEP0;
//data unsigned char xdata * RxBufferEP0;

#define USB_FIFO ((unsigned char volatile xdata *) USB_BASE_ADDR)






/******************************************************************************

                              PRODUCT SPECIFIC AREA

 ******************************************************************************




void DK3400_EnableUSBPullUp(void)
/******************************************************************************
 Function   : void DK3400_EnableUSBPullUp()
 Parameters : (void)
 Description: Enables DK3400 USB PullUP
 ******************************************************************************
 {
// Enable DK3400_USB_PullUp
  UPSD_xreg.DIRECTION_C |=128;               // PC7=Out
  UPSD_xreg.DRIVE_C     &=127;               // PC7=Push/Pull
  UPSD_xreg.DATAOUT_C   |=128;               // PC7=1
 }



void DK3400_DisableUSBPullUp(void)
/******************************************************************************
 Function   : void DK3400_EnableUSBPullUp()
 Parameters : (void)
 Description: Enables DK3400 USB PullUP
 ******************************************************************************
 {
// Disable DK3400_USB_PullUp
  UPSD_xreg.DIRECTION_C &=127;               // PC7=in
 }







/******************************************************************************

                              PRODUCT INDEPENDENT AREA

 ******************************************************************************/



void OnUsbReset()
/******************************************************************************
 Function   : void OnUsbReset()
 Parameters : none
 Description: USB driver module initialization routine.
 ******************************************************************************/
 {
  UCTL &= ~USBEN;
  UCTL |= USBEN;                             //USB enable

  UIE0  = RSTIE | SUSPENDIE;                 //Enable RESET, SUSPEND, RESUME INT
  UIE1  = IN0IE;                             //Enable EP0 IN INT
  UIE2  = OUT0IE;                            //Enable EP0 OUT INT
  UIE3  = 0;

  UPAIR = 0;//1+2+4+8;                                 //1+2+4+8;

  USEL  = OUTDIR | SELEP0;                   //Select EP0 OUT
  UCON  = ENABLE_FIFO | EPFIFO_BSY;

  USEL  = INDIR | SELEP0;                    //Select EP0 IN
  UCON  = ENABLE_FIFO;

  confignum = 0;
  usbState  = US_DEFAULT;
  ep0state  = US_EPDEFAULT;
  ep1state  = US_EPDEFAULT;
 }








void STALL_EP0()
/******************************************************************************
 Function   : void STALL_EP0()
 Parameters : none
 Description: Stalls EP0.
              This endpoint is halted or a control pipe request is not supported.
              Endpoint can be unstalled by Bus Reset.
 ******************************************************************************/
 {
  USEL     = INDIR | SELEP0;
  UCON    |= STALL | ENABLE_FIFO;
  UCON    &= ~TOGGLE;                        //clear toggle
  USIZE    = 0;
  ep0state = US_EPSTALL;
 }






void STALL_EP1()
/******************************************************************************
 Function   : void STALL_EP1()
 Parameters : none
 Description: Stalls EP1.
              This endpoint is halted or a control pipe request is not supported.
              Endpoint can be unstalled by Bus Reset.
 ******************************************************************************/
 {
  USEL     = INDIR | SELEP1;
  UCON    |= STALL;
  UCON    &= ~TOGGLE;                        //clear toggle
  USIZE    = 0;
  ep1state = US_EPSTALL;
 }





/*
void RemoteWakeup()
/******************************************************************************
 Function   : void RemoteWakeup()
 Parameters : none
 Description: USB device remote wakeup
 ******************************************************************************/
/*
 {
  data int i;
  if (remotewakeupen)
   {
    UCTL |= WAKEUP;

    for (i=0;i<10000;i++)                    // delay cca 10ms();
     {
      i++;
      i--;
     }
    UCTL &= ~WAKEUP;
    usbState = US_DEFAULT;
   }
 }
*/





void OnUsbSuspend()
/******************************************************************************
 Function   : void OnUsbSuspend()
 Parameters : none
 Description: service routine for USB Suspend event
 ******************************************************************************/
 {
  usbState =  US_SUSPENDED;
 }






void OnUsbResume()
/******************************************************************************
 Function   : void OnUsbResume()
 Parameters : none
 Description: service routine for USB Host resume event
 ******************************************************************************/
 {
  usbState =  US_DEFAULT;
 }







void TransmitZeroLengthEP0()
/******************************************************************************
 Function   : void TransmitZeroLengthEP0()
 Parameters : none
 Description: Transmits zero length data of EP0.
 ******************************************************************************/
 {
  data unsigned int count;

  USEL  = INDIR | SELEP0;
  UCON ^= TOGGLE;
  count = 0;
  while (UCON & EPFIFO_BSY)                  //check busy
   {
    count++;
    if (count==0)
     {
      USIZE = 0;
      return;
     }
   }
  USIZE = 0;
 }












void TransmitEP0()
/******************************************************************************
 Function   : void TransmitEP0()
 Parameters : none
 Description: Transmits next segment of descriptor buffer (pTransmitBufferEP0).
 ******************************************************************************/
 {
  data unsigned char i;
  data unsigned char nBytes;
  data unsigned  int count;
  data unsigned ZLPacket;

  if (bytesToTransmitEP0 == 0)
   {
    USEL  = OUTDIR | SELEP0;                 //Select EP0 OUT
    UCON |= ENABLE_FIFO;
    UCON |= TOGGLE;
    USIZE = 0;
    return;
   }
  else
   {
    USEL  = INDIR | SELEP0;                  //select EP0 IN
    UCON |= ENABLE_FIFO;

    count = 0;
    while (UCON & EPFIFO_BSY)                //check busy
     {
      count++;
      if (count==0)
       {
        USIZE = 0;
        return;
       }
     }

    UCON ^= TOGGLE;

    if (pTransmitBufferEP0 == NULL)
     {
      bytesToTransmitEP0 = 0;
      ZLPacket = 0;
     }
    else
     {
      ZLPacket = (bytesToTransmitEP0 == EP0_PKT_SIZE)?1:0;
     }

    nBytes = bytesToTransmitEP0;
    if (nBytes > EP0_PKT_SIZE)
     {
      nBytes = EP0_PKT_SIZE;
     }

    for(i=0; i<nBytes; i++)
     {
      USB_FIFO[i] = *pTransmitBufferEP0++;
     }
    bytesToTransmitEP0 -= nBytes;
    USIZE = nBytes;

    if (ZLPacket)
     {
      pTransmitBufferEP0 = NULL;
      bytesToTransmitEP0 = 255;
     }
   }
 }







void OnGetStatus()
/******************************************************************************
 Function   : void OnGetStatus()
 Parameters : none
 Description: Handler for GET_STATUS requests.
 ******************************************************************************/
 {
  USEL  = INDIR | SELEP0;                    //select EP0 OUT
  UCON |= TOGGLE;                            //DATA1
  UCON |= ENABLE_FIFO;


  if((setupPacket.wIndex.lo == 0x00) & (setupPacket.wIndex.hi == 0x00))
   {
    USB_FIFO[0] = 0x01 | (remotewakeupen<<1);
    USB_FIFO[1] = 0;
   }
  else if((setupPacket.wIndex.lo == 0x81) & (setupPacket.wIndex.hi == 0x00))
   {
                                             //endpoint1
    if(ep1state == US_EPSTALL)
     {
      USB_FIFO[0] = 1;
     }
    else
     {
      USB_FIFO[0] = 0;
     }
    USB_FIFO[1] = 0;
   }
  else
   {
    STALL_EP0();                // No features currently implemented, so stall EP0
    return;
   }
  USIZE = 0x02;

  bytesToTransmitEP0 = 0;
 }






void OnClearFeature()
/******************************************************************************
 Function   : void OnClearFeature()
 Parameters : none
 Description: Handler for ClearFeature()
 ******************************************************************************/
 {
                                             //clear device remote wakeup enable
  if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
   {
    remotewakeupen = 0x00;
   }
                                             //clear EP1 STALL
  else

  if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP1_ADDR))
   {
    ep1state = US_EPDEFAULT;

    USEL =  INDIR | SELEP1;
    UCON &= ~STALL;
    UCON |= ENABLE_FIFO;
   }
  else
   {
    STALL_EP0();
    return;
   }
  TransmitZeroLengthEP0();
 }







void OnSetFeature()
/******************************************************************************
 Function   : void OnSetFeature()
 Parameters : none

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2017欧美狠狠色| 国产婷婷一区二区| 制服丝袜成人动漫| 蜜臀av一级做a爰片久久| 精品国产一区二区三区久久影院| 亚洲成人免费视频| 久久看人人爽人人| 精品久久久久久亚洲综合网| 一本色道久久综合亚洲91| 九九视频精品免费| 天堂久久久久va久久久久| 国产精品蜜臀av| 亚洲人成在线观看一区二区| 精品国产一二三区| 亚洲激情欧美激情| 亚洲婷婷国产精品电影人久久| 精品国产制服丝袜高跟| 亚洲欧美激情小说另类| 高清成人免费视频| 韩国三级电影一区二区| 激情欧美日韩一区二区| 3atv在线一区二区三区| 亚洲国产中文字幕在线视频综合 | 久久先锋资源网| 久久电影网站中文字幕| 国产精品一区一区| 色老综合老女人久久久| 欧美日本在线播放| 久久精品一二三| 国产激情偷乱视频一区二区三区| 成人亚洲一区二区一| av亚洲产国偷v产偷v自拍| 成人免费视频视频在线观看免费| 2021久久国产精品不只是精品 | 欧美三级中文字幕在线观看| 色呦呦日韩精品| 亚洲成av人片在www色猫咪| 欧美欧美欧美欧美首页| 国产美女在线观看一区| 在线免费观看日韩欧美| 久久久久久久av麻豆果冻| 国产福利视频一区二区三区| 中文字幕色av一区二区三区| 奇米精品一区二区三区四区| 色综合久久九月婷婷色综合| 日韩在线一区二区三区| 亚洲欧洲在线观看av| 日韩一区二区三区免费看| 亚洲一二三区在线观看| 欧美电影免费观看高清完整版在线观看| 亚洲欧洲精品成人久久奇米网| 欧美日韩一区三区| 99re6这里只有精品视频在线观看| 日韩情涩欧美日韩视频| 色哟哟国产精品免费观看| 精品系列免费在线观看| 亚洲成av人片一区二区梦乃| 国产精品麻豆一区二区| 中文字幕第一页久久| av亚洲精华国产精华精华 | 欧美在线观看视频一区二区| 成人黄色a**站在线观看| 精品成人佐山爱一区二区| 欧美精品日韩综合在线| 国模冰冰炮一区二区| 久久99国产精品免费| 久久超碰97人人做人人爱| 久久精品国产精品亚洲精品| 五月激情综合网| 久久噜噜亚洲综合| 亚洲男人电影天堂| 天天做天天摸天天爽国产一区| 视频一区欧美日韩| 久久福利视频一区二区| 国产精品一区二区黑丝| 99视频精品在线| 欧美日韩一区小说| 久久精品在线免费观看| 亚洲精品视频一区二区| 天天影视色香欲综合网老头| 免费观看在线色综合| 国产精品伊人色| 欧美高清视频在线高清观看mv色露露十八 | 天天综合色天天| 国产电影一区在线| 欧美日韩精品久久久| 中文字幕电影一区| 男人的j进女人的j一区| 欧美又粗又大又爽| 日日摸夜夜添夜夜添亚洲女人| 精品亚洲成a人在线观看| 在线观看欧美日本| 久久久久久久综合日本| 日韩国产欧美在线观看| 免费在线观看日韩欧美| 日本精品一级二级| 欧美激情一区二区三区在线| 久久国产婷婷国产香蕉| 日韩片之四级片| 三级精品在线观看| 欧美精品久久久久久久多人混战 | 亚洲一区二区三区四区五区黄| 亚洲人午夜精品天堂一二香蕉| 久久成人综合网| 精品乱人伦一区二区三区| 日韩av一二三| 久久伊人蜜桃av一区二区| 日韩黄色在线观看| 欧美精品一区二区不卡| 国产精品99久久久久久宅男| 国产精品成人午夜| 日本不卡一区二区三区| 久久久久久久久免费| 成人av免费在线播放| 亚洲一区二区三区爽爽爽爽爽| 欧美视频你懂的| 国产成人精品影视| 亚洲激情中文1区| 精品裸体舞一区二区三区| 91伊人久久大香线蕉| 欧美一级淫片007| 日韩理论片网站| 欧美一区二区三区四区高清| 国产精一品亚洲二区在线视频| 国产精品久久影院| 精品久久久久久久久久久久包黑料| 国产精品99久久久久久有的能看| 成人免费一区二区三区在线观看 | 精品一区二区免费视频| 亚洲精品自拍动漫在线| 国产日产欧美一区二区视频| 老司机精品视频一区二区三区| 国产精品久久久久精k8| 国产农村妇女毛片精品久久麻豆| 日韩视频不卡中文| 欧美一区二区三区在线看| 欧美日韩亚州综合| 欧美性大战久久久久久久| aaa欧美日韩| 99riav久久精品riav| 91色在线porny| 成人黄色综合网站| 9久草视频在线视频精品| 国产美女久久久久| 国产精品66部| 97se亚洲国产综合自在线| 99久久国产综合色|国产精品| 国产黑丝在线一区二区三区| 成人一级黄色片| 91国偷自产一区二区三区成为亚洲经典 | 国产精品99久久久久久有的能看 | 99riav一区二区三区| 色婷婷久久综合| 欧美一区二区黄色| 欧美极品美女视频| 亚洲电影你懂得| 精品制服美女久久| a亚洲天堂av| 日韩女优av电影在线观看| 国产精品国产三级国产普通话蜜臀| 国产精品福利一区二区三区| 亚洲综合激情网| www.色综合.com| 91精品国产综合久久精品图片| 久久久久久免费| 日本系列欧美系列| 91久久线看在观草草青青| 精品国精品自拍自在线| 一区二区三区视频在线看| 中文字幕精品一区二区精品绿巨人| 一区二区三区四区在线免费观看| 久久不见久久见免费视频1| 在线看一区二区| 亚洲精品视频在线看| 国产精品18久久久久| 日韩一区二区免费在线电影| 亚洲成人免费在线观看| 在线精品亚洲一区二区不卡| 欧美极品另类videosde| 北岛玲一区二区三区四区| 精品av久久707| 国产在线乱码一区二区三区| 91精品国产手机| 国产乱子伦视频一区二区三区 | 欧美视频日韩视频在线观看| 亚洲第一综合色| 欧美日韩日日摸| 久久国产福利国产秒拍| 精品久久久久久综合日本欧美| 蜜桃视频一区二区三区| 久久久99精品久久| 日本精品视频一区二区| 亚洲国产成人av网| 日韩午夜电影在线观看| 极品瑜伽女神91| 一区二区三区鲁丝不卡| 欧美男人的天堂一二区| 国产一区二区在线电影| 亚洲欧美日韩国产一区二区三区| 欧美日本在线观看|