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

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

?? upsd3400_upsd_usb.c

?? upsd34xx系列單片機keil環境中的開發例程
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*------------------------------------------------------------------------------
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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99久久久久| 天堂av在线一区| 丁香婷婷综合色啪| 国产日产欧美精品一区二区三区| 国产一区二区三区在线观看免费 | 欧美性猛片xxxx免费看久爱| 亚洲视频一区二区免费在线观看| www.成人网.com| 亚洲精品免费播放| 欧美久久一二区| 久久国产精品一区二区| 国产亚洲精品资源在线26u| 懂色中文一区二区在线播放| 日韩美女精品在线| 5566中文字幕一区二区电影| 美女被吸乳得到大胸91| 国产日韩欧美一区二区三区乱码 | 91精品国产免费| 国产制服丝袜一区| 亚洲欧美日韩在线不卡| 欧美一区二区精品在线| 国产xxx精品视频大全| 亚洲三级电影网站| 欧美一卡在线观看| 成人99免费视频| 日韩激情一区二区| 国产精品第一页第二页第三页| 91网站最新地址| 麻豆精品久久精品色综合| 日本一区二区三区四区在线视频 | 欧美一级国产精品| 成人av电影免费观看| 丝袜亚洲另类欧美综合| 国产亚洲婷婷免费| 欧美日本一区二区三区| 国产ts人妖一区二区| 午夜不卡av在线| 国产精品久久久久影视| 欧美一级片免费看| 91国偷自产一区二区开放时间| 久久99精品久久久久| 亚洲乱码国产乱码精品精小说 | 久久欧美中文字幕| 欧美日韩精品高清| 99在线热播精品免费| 狠狠色综合色综合网络| 成人开心网精品视频| 日韩av电影天堂| 亚洲欧美日韩中文字幕一区二区三区| 日韩欧美国产精品| 欧美日韩免费视频| 波多野结衣亚洲一区| 美女视频黄免费的久久 | 国产成人精品亚洲日本在线桃色| 亚洲欧美日韩一区| 久久久精品免费免费| 欧美一级淫片007| 欧美色精品在线视频| 91在线精品一区二区三区| 国产精品一卡二| 蜜臀av性久久久久av蜜臀妖精| 亚洲少妇30p| 国产亚洲1区2区3区| 欧美精品一区二区三区一线天视频| 欧美日韩午夜精品| 在线看国产一区二区| 成人av电影免费在线播放| 国产高清成人在线| 国产成人在线电影| 精一区二区三区| 日韩电影一区二区三区四区| 石原莉奈在线亚洲二区| 亚洲综合免费观看高清完整版在线 | 国产精品免费视频网站| 久久久久久久久久看片| 久久久www免费人成精品| 欧美精品一区二区三区在线| 精品久久久久香蕉网| 欧美不卡视频一区| 精品蜜桃在线看| 精品国产免费视频| 久久精品一区蜜桃臀影院| 久久综合久久99| 国产亚洲精品中文字幕| 亚洲国产精品精华液2区45| 国产精品久久久久久久久久久免费看| 中文字幕av一区二区三区高| 中文字幕在线不卡视频| 亚洲欧美日韩在线| 亚洲成av人片观看| 久久超碰97人人做人人爱| 精品一区二区免费| 丁香激情综合国产| 欧美最猛黑人xxxxx猛交| 欧美日韩高清一区二区| 欧美大片拔萝卜| 欧美国产精品一区二区三区| 国产精品高潮呻吟久久| 一区二区三区高清不卡| 青娱乐精品视频| 久久精品国产亚洲5555| 国产1区2区3区精品美女| 色综合久久中文综合久久97| 欧美日韩在线电影| 2014亚洲片线观看视频免费| 中文字幕在线观看一区| 亚洲激情图片小说视频| 久久99国产精品麻豆| 北条麻妃国产九九精品视频| 欧洲另类一二三四区| 日韩一级片在线播放| 欧美精彩视频一区二区三区| 一区二区三区在线视频免费观看| 日韩不卡一区二区三区| kk眼镜猥琐国模调教系列一区二区| 色88888久久久久久影院按摩 | 亚洲精品大片www| 日韩电影免费在线观看网站| 欧美日韩国产综合一区二区| 精品久久久久久久久久久久久久久久久| 国产欧美日韩麻豆91| 亚洲成人免费看| 国产69精品久久99不卡| 在线观看91精品国产麻豆| 国产精品久久夜| 免费在线视频一区| 色偷偷久久人人79超碰人人澡| 欧美一卡二卡在线观看| 亚洲精品视频免费观看| 国产一区视频在线看| 在线精品观看国产| 日本一区二区高清| 麻豆中文一区二区| 91黄色小视频| 国产精品麻豆99久久久久久| 老色鬼精品视频在线观看播放| 91猫先生在线| 国产午夜亚洲精品不卡| 奇米色一区二区| 欧美日韩一区二区在线观看视频 | 在线欧美一区二区| 国产日韩精品一区二区浪潮av| 亚洲成人综合在线| 色先锋aa成人| 国产精品嫩草久久久久| 国产精品中文字幕欧美| 欧美一级日韩免费不卡| 亚洲成a人在线观看| av一本久道久久综合久久鬼色| 日韩欧美国产系列| 日韩高清一区二区| 欧美午夜电影一区| 一区二区三区在线免费| 色综合视频在线观看| 国产欧美日韩不卡| 国产超碰在线一区| 中文字幕欧美国产| 国产成人日日夜夜| 国产色一区二区| 高清在线成人网| 国产欧美精品区一区二区三区| 国产精品综合久久| 久久久蜜臀国产一区二区| 精品一区二区三区影院在线午夜| 制服丝袜日韩国产| 日本不卡的三区四区五区| 在线播放一区二区三区| 日本欧美韩国一区三区| 91麻豆精品国产91久久久使用方法 | 亚洲精品写真福利| 在线观看日韩av先锋影音电影院| 亚洲伦理在线精品| 欧美性猛交xxxx黑人交| 亚洲一区二区精品久久av| 欧美性色aⅴ视频一区日韩精品| 亚洲一级电影视频| 欧美群妇大交群中文字幕| 亚洲成人福利片| 日韩亚洲欧美在线| 激情综合一区二区三区| 久久精品夜色噜噜亚洲a∨| 国产九色精品成人porny | 国产精品免费视频网站| 白白色 亚洲乱淫| 国产精品一区久久久久| 国产欧美视频在线观看| 成人99免费视频| 一区二区激情小说| 欧美一区午夜精品| 国产精品1区二区.| 一区二区三区不卡视频在线观看| 欧美日韩一区二区电影| 捆绑紧缚一区二区三区视频| 欧美国产日本韩| 欧美色视频在线| 国内精品久久久久影院一蜜桃| 欧美国产精品中文字幕| 欧美亚一区二区| 国产精品一区二区x88av| 依依成人精品视频|