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

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

?? fw.lst

?? HIGH_SPEED_USB_To_ATA(IDE)Firmware相關代碼(EZ USB FX2芯片)
?? LST
?? 第 1 頁 / 共 4 頁
字號:
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FW
OBJECT MODULE PLACED IN fw.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fw.c ROM(COMPACT) OPTIMIZE(9,SPEED) REGFILE(.\fx2_ata.ORC) BROWSE ORDER INC
                    -DIR(c:\cypress\usb\target\inc) DEFINE(GPIF=0,FLASH=0,DEVICE_TYPE_IS_SCSI=1,DEVICE_TYPE_IS_IDE=1,VBUS_DETECT=1) DEBUG OBJ
                    -ECTEXTEND CODE

line level    source

   1          //-----------------------------------------------------------------------------
   2          //   File:      fw.c
   3          //   Contents:   Firmware frameworks task dispatcher and device request parser
   4          //            source.
   5          //
   6          // indent 3.  NO TABS!
   7          //
   8          //   Copyright (c) 2001 Cypress Semiconductor
   9          //
  10          // $Archive: /USB/atapifx2/software/fw.c $
  11          // $Date: 1/15/02 10:12a $
  12          // $Revision: 45 $
  13          //-----------------------------------------------------------------------------
  14          #include "fx2.h"
  15          #include "fx2regs.h"
  16          #include "gpif.h"
  17          #include "atapi.h"
  18          
  19          //-----------------------------------------------------------------------------
  20          // Constants
  21          //-----------------------------------------------------------------------------
  22          #define DELAY_COUNT   0x9248*8L      // Delay for 8 sec at 24Mhz, 4 sec at 48
  23          // USB constants
  24          // Class specific setup commands
  25          #define SC_BOMS_RESET           (0x21)      // Hard/soft depends on wValue field 0 = hard
  26          
  27          //-----------------------------------------------------------------------------
  28          // Global Variables
  29          //-----------------------------------------------------------------------------
  30          BOOL      Rwuen;
  31          BOOL      Selfpwr;
  32          volatile BOOL   Sleep;                  // Sleep mode enable flag
  33          BYTE   AlternateSetting;   // Alternate settings
  34          BYTE   Configuration;      // Current configuration
  35          
  36          
  37          //WORD   pDeviceDscr;   // Pointer to Device Descriptor; Descriptors may be moved
  38          //WORD   pDeviceQualDscr;
  39          //WORD   pHighSpeedConfigDscr;
  40          //WORD   pFullSpeedConfigDscr;   
  41          WORD   pConfigDscr;
  42          WORD   pOtherConfigDscr;   
  43          //WORD   pStringDscr;
  44          
  45          BYTE intrfcSubClass;
  46          
  47          //-----------------------------------------------------------------------------
  48          // Prototypes
  49          //-----------------------------------------------------------------------------
  50          void SetupCommand(void);
  51          void TD_Init(void);
  52          void TD_Poll(void);
  53          //BOOL TD_Suspend(void);
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 2   

  54          //BOOL TD_Resume(void);
  55          void DisconAndWaitForVbus();
  56          
  57          WORD wPacketSize;
  58          
  59          
  60          //-----------------------------------------------------------------------------
  61          // Code
  62          //-----------------------------------------------------------------------------
  63          
  64          // Task dispatcher
  65          
  66          void main(void)
  67          {
  68   1         BYTE     i;
  69   1      
  70   1         // Init globals
  71   1         MaxPIO = 0;                // reset MaxPIO value
  72   1         Sleep = FALSE;             // Reset suspend flag
  73   1         Rwuen = FALSE;             // Disable remote wakeup
  74   1         Selfpwr = FALSE;           // Disable self powered
  75   1      
  76   1         // if we are hung up in a GPIF transfer, abort it.  How could this happen?  If
  77   1         // we ended up here after a USB Reset or a MSC Reset, it is possible that the
  78   1         // GPIF is hung waiting for a transfer that will never complete.
  79   1         abortGPIF(); // TPM: Unconditionally abort
  80   1      
  81   1         TD_Init();
  82   1      
  83   1         // The following section of code is used to relocate the descriptor table from
  84   1         // ROM to RAM.  It is done here because we are done with the halfKBuffer at this point.
  85   1         // Although it looks wierd, the only way to get the proper values for the offsets
  86   1         // is to tell the compiler that we want the address of the variable, not the variable itself.
  87   1         mymemmovexx(halfKBuffer, (char xdata *) &DeviceDscr, (WORD)&DscrEndOffset);
  88   1      //   pDeviceDscr = (WORD)(halfKBuffer + (WORD)&DeviceDscrOffset);
  89   1      //   pDeviceQualDscr = (WORD)(halfKBuffer + (WORD)&DeviceQualDscrOffset);
  90   1      //   pHighSpeedConfigDscr = (WORD)(halfKBuffer + (WORD)&HighSpeedConfigDscrOffset);
  91   1      //   pFullSpeedConfigDscr = (WORD)(halfKBuffer + (WORD)&FullSpeedConfigDscrOffset);
  92   1      //   pStringDscr = (WORD)(halfKBuffer + (WORD)&StringDscrOffset);
  93   1      
  94   1         halfKBuffer[(WORD) &IntrfcSubClassHighSpeedOffset] = 
  95   1            halfKBuffer[(WORD) &IntrfcSubClassFullSpeedOffset] = intrfcSubClass;
  96   1      
  97   1      
  98   1         for (i = 0; i < ATAPI_INQUIRY_SERIAL_LEN *2; i++)
  99   1            halfKBuffer[i+(WORD)&SerialNumberOffset] = localSerialNumber[i];
 100   1        
 101   1         EZUSB_IRQ_ENABLE();            // Enable USB interrupt (INT2)
 102   1         EZUSB_ENABLE_RSMIRQ();            // Wake-up interrupt
 103   1      
 104   1         INTSETUP |= (bmAV2EN);     // Enable INT 2 autovectoring
 105   1      
 106   1         USBIE |= bmSUDAV | bmSUSP | bmURES | bmHSGRANT;   // Enable selected interrupts
 107   1         EA = 1;                  // Enable 8051 interrupts
 108   1      
 109   1         // Renumerate if necessary.  Do this by checking the renum bit.  If it
 110   1         // is already set, there is no need to renumerate.  The renum bit will
 111   1         // already be set if this firmware was loaded from an eeprom or if we
 112   1         // have already been through this code once and we are here again
 113   1         // because of a USB Reset.
 114   1         if(!(USBCS & bmRENUM))
 115   1         {
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 3   

 116   2             EZUSB_Discon(TRUE);   // renumerate
 117   2         }
 118   1      
 119   1      #ifdef VBUS_DETECT
 120   1         // check for the presence of VBus and re-connect.  If we loaded from eeprom
 121   1         // we are disconnected and need to connect.  If we just renumerated this
 122   1         // is not necessary but doesn't hurt anything.  VBus on the Rev *B 4611 boards
 123   1         // is tied to port A.6.
 124   1         if (IOA & bmBIT6)
 125   1         {
 126   2            USBCS &=~bmDISCON;
 127   2         }
 128   1         else
 129   1         {
 130   2            DisconAndWaitForVbus();
 131   2         }
 132   1      #else
                 // unconditionally re-connect.  If we loaded from eeprom we are
                 // disconnected and need to connect.  If we just renumerated this
                 // is not necessary but doesn't hurt anything
                 USBCS &=~bmDISCON;
              #endif
 138   1      
 139   1         CKCON = (CKCON&(~bmSTRETCH)) | FW_STRETCH_VALUE; // Set stretch to 0 (after renumeration)
 140   1      
 141   1         // complete the handshake phase of any pending SETUP transfer.
 142   1         // The only time this should happen is after a MSC Reset.  We want
 143   1         // to go through all of the EP init code before handshaking the status
 144   1         // phase of the MSC Reset.
 145   1         EP0CS |= bmHSNAK;
 146   1      
 147   1         // Task Dispatcher
 148   1         while(TRUE)                     // Main Loop
 149   1         {
 150   2      #ifdef VBUS_DETECT
 151   2            // we need to constantly monitor VBus (tied to Port A.6) and disconnect if
 152   2            // it isn't there.  This is to avoid driving D+ (a spec violation) when the
 153   2            // host isn't there.
 154   2            if (!(IOA & bmBIT6))
 155   2               DisconAndWaitForVbus();
 156   2      #endif
 157   2      
 158   2            TD_Poll();
 159   2         }
 160   1      }
 161          
 162          #ifdef VBUS_DETECT
 163          // This function monitors VBus from the host and stays disconnected until VBus is
 164          // is present.  VBus is tied to Port A.6 on the new FX2 ATAPI tailgate boards.
 165          // (4611 Rev *B)
 166          void DisconAndWaitForVbus()
 167          {
 168   1         USBCS |= bmDISCON;
 169   1         while (!(IOA & bmBIT6));
 170   1         USBCS &= ~bmDISCON;
 171   1      }
 172          #endif
 173             
 174          
 175          // Device request parser
 176          void SetupCommand(void)
 177          {
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 4   

 178   1         void   *dscr_ptr;
 179   1      
 180   1         switch(SETUPDAT[1])
 181   1         {
 182   2            case SC_GET_DESCRIPTOR:                      // *** Get Descriptor
 183   2               switch(SETUPDAT[3])         
 184   2                  {
 185   3                     case GD_DEVICE:                     // Device
 186   3                        SUDPTRH = MSB(pDeviceDscr);
 187   3                        SUDPTRL = LSB(pDeviceDscr);
 188   3                        break;
 189   3                     case GD_DEVICE_QUALIFIER:            // Device Qualifier
 190   3                        SUDPTRH = MSB(pDeviceQualDscr);
 191   3                        SUDPTRL = LSB(pDeviceQualDscr);
 192   3                        break;
 193   3                     case GD_CONFIGURATION:              // Configuration
 194   3                        SUDPTRH = MSB(pConfigDscr);
 195   3                        SUDPTRL = LSB(pConfigDscr);
 196   3                        break;
 197   3                     case GD_OTHER_SPEED_CONFIGURATION:  // Other Speed Configuration
 198   3                        // fx2bug - need to support multi other configs
 199   3                        SUDPTRH = MSB(pOtherConfigDscr);
 200   3                        SUDPTRL = LSB(pOtherConfigDscr);
 201   3                        break;
 202   3                     case GD_STRING:            // String
 203   3                        if(dscr_ptr = (void *)EZUSB_GetStringDscr(SETUPDAT[2]))
 204   3                        {
 205   4                           SUDPTRH = MSB(dscr_ptr);
 206   4                           SUDPTRL = LSB(dscr_ptr);
 207   4                        }
 208   3                        else 
 209   3                           EZUSB_STALL_EP0();   // Stall End Point 0
 210   3                        break;
 211   3                     default:                   // Invalid request
 212   3                        EZUSB_STALL_EP0();      // Stall End Point 0
 213   3                  }  // switch
 214   2               break;
 215   2            case SC_GET_INTERFACE:                  // *** Get Interface
 216   2               EP0BUF[0] = AlternateSetting;
 217   2               EP0BCH = 0;
 218   2               EP0BCL = 1;
 219   2               break;
 220   2            case SC_SET_INTERFACE:                  // *** Set Interface
 221   2               AlternateSetting = SETUPDAT[2];
 222   2               break;
 223   2            case SC_SET_CONFIGURATION:               // *** Set Configuration
 224   2            // BUGBUG -- Add delay for the CATC
 225   2               Configuration = SETUPDAT[2];
 226   2               break;
 227   2            case SC_GET_CONFIGURATION:               // *** Get Configuration
 228   2               EP0BUF[0] = Configuration;
 229   2               EP0BCH = 0;
 230   2               EP0BCL = 1;
 231   2               break;
 232   2            case SC_GET_STATUS:                 // *** Get Status
 233   2                  switch(SETUPDAT[0])
 234   2                  {
 235   3                     case GS_DEVICE:            // Device
 236   3                        EP0BUF[0] = ((BYTE)Rwuen << 1) | (BYTE)Selfpwr;
 237   3                        EP0BUF[1] = 0;
 238   3                        EP0BCH = 0;
 239   3                        EP0BCL = 2;
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 5   

 240   3                        break;
 241   3                     case GS_INTERFACE:         // Interface
 242   3                        EP0BUF[0] = 0;
 243   3                        EP0BUF[1] = 0;
 244   3                        EP0BCH = 0;
 245   3                        EP0BCL = 2;
 246   3                        break;
 247   3                     case GS_ENDPOINT:         // End Point
 248   3                        if (SETUPDAT[4] == 0x2)
 249   3                        {
 250   4                           EP0BUF[0] = (EP2CS & bmEPSTALL);
 251   4                        }
 252   3                        else if (SETUPDAT[4] == 0x88)
 253   3                        {
 254   4                           EP0BUF[0] = (EP8CS & bmEPSTALL);
 255   4                        }
 256   3                        else
 257   3                        {
 258   4                           EZUSB_STALL_EP0();   // Stall End Point 0
 259   4                           break;
 260   4                        }
 261   3      
 262   3                        EP0BUF[1] = 0;
 263   3                        EP0BCH = 0;
 264   3                        EP0BCL = 2;
 265   3                        break;
 266   3                     default:                   // Invalid Command
 267   3                        EZUSB_STALL_EP0();      // Stall End Point 0

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美极品少妇xxxxⅹ高跟鞋| 国产99精品在线观看| 日本高清不卡aⅴ免费网站| 欧美综合亚洲图片综合区| 精品国产乱码久久久久久图片| 中文字幕在线不卡| 九一九一国产精品| 欧美曰成人黄网| 国产精品乱码人人做人人爱| 免费看黄色91| 欧美色视频在线观看| 中文字幕国产一区| 激情综合网激情| 宅男在线国产精品| 亚洲综合男人的天堂| 99久久精品免费看| 国产亚洲欧洲997久久综合| 免费一级片91| 欧美精品自拍偷拍| 天天操天天色综合| 欧美色网站导航| 亚洲影院久久精品| 色综合久久久久| 亚洲色图.com| aaa亚洲精品一二三区| 国产丝袜在线精品| 国产.欧美.日韩| 久久综合色一综合色88| 狠狠久久亚洲欧美| 国产无一区二区| 成人午夜av在线| 欧美国产日韩在线观看| 从欧美一区二区三区| 欧美国产一区二区在线观看 | 日韩精品一区二区三区四区| 亚洲午夜在线电影| 欧美日韩三级在线| 日韩黄色免费网站| 日韩一区二区高清| 激情文学综合网| 久久九九影视网| 不卡av电影在线播放| 亚洲精品乱码久久久久久| 在线免费视频一区二区| 天天色天天操综合| 久久久久久一级片| 成人黄色小视频| 亚洲激情第一区| 欧美另类变人与禽xxxxx| 日韩av一二三| 久久久久国产免费免费| 91丨porny丨中文| 亚洲成av人片| 精品国产123| a在线欧美一区| 午夜精品久久久久久久久久久| 欧美一区二区三区在线看| 国产精品伊人色| 亚洲视频免费看| 日韩午夜精品视频| 成人免费毛片片v| 亚洲成av人影院| 国产偷国产偷亚洲高清人白洁 | 自拍偷拍亚洲欧美日韩| 欧美色图免费看| 成人综合婷婷国产精品久久免费| 亚洲日本va午夜在线影院| 欧美精品aⅴ在线视频| 国产九色sp调教91| 亚洲国产精品一区二区www在线| 日韩精品一区二区三区在线观看| 99热在这里有精品免费| 久久不见久久见免费视频1| 国产精品二三区| 欧美不卡在线视频| 一本色道综合亚洲| 久久99精品久久久久久久久久久久| 亚洲欧美电影一区二区| 精品国产乱码久久久久久免费| 99免费精品视频| 国产自产高清不卡| 亚洲成人www| 国产精品免费免费| 精品国内片67194| 欧美久久久久久久久中文字幕| 成人午夜又粗又硬又大| 男人的天堂亚洲一区| 亚洲亚洲人成综合网络| 国产视频一区不卡| 日韩欧美www| 欧美日韩免费不卡视频一区二区三区| 国产精品一区免费视频| 开心九九激情九九欧美日韩精美视频电影| 亚洲六月丁香色婷婷综合久久 | 日韩精品专区在线| 欧美性xxxxxx少妇| 91同城在线观看| caoporn国产一区二区| 国产乱码精品一区二区三区av| 日韩中文字幕一区二区三区| 一区二区三区在线观看国产| 中文字幕巨乱亚洲| 久久你懂得1024| 精品久久久久一区二区国产| 日韩三级高清在线| 欧美一区二区三区小说| 在线电影一区二区三区| 欧美视频一区二区三区| 欧洲国内综合视频| 色系网站成人免费| 日本韩国一区二区三区视频| 一本色道久久综合亚洲精品按摩| 波多野结衣在线aⅴ中文字幕不卡| 国产激情视频一区二区在线观看| 久久电影网电视剧免费观看| 久久精品国产亚洲高清剧情介绍| 喷白浆一区二区| 蜜桃视频在线观看一区二区| 蜜桃久久久久久| 日本午夜一区二区| 久久99蜜桃精品| 国产一区二区三区黄视频 | 日产精品久久久久久久性色| 亚洲国产欧美日韩另类综合| 日韩激情一区二区| 麻豆精品一区二区av白丝在线| 麻豆精品新av中文字幕| 国产自产视频一区二区三区| 国产美女精品人人做人人爽| 成人高清视频在线观看| 91蜜桃婷婷狠狠久久综合9色| 一本一本大道香蕉久在线精品| 欧美日韩一卡二卡| 精品日韩av一区二区| 中文字幕精品在线不卡| 一区二区三区欧美久久| 欧美aaaaa成人免费观看视频| 韩国精品久久久| 99久久精品免费观看| 精品婷婷伊人一区三区三| 日韩欧美在线影院| 国产女主播一区| 亚洲福利电影网| 国产最新精品免费| 99久久伊人精品| 欧美精品久久天天躁| 国产日产精品一区| 亚洲成人资源在线| 国产成人激情av| 欧美在线你懂得| 久久中文字幕电影| 一区二区三区欧美| 国产成人在线视频免费播放| 欧美综合在线视频| 国产三级精品视频| 日韩影院免费视频| 成人动漫一区二区| 日韩欧美久久一区| 一区二区三区蜜桃| 国产精品一区2区| 欧美男男青年gay1069videost | 337p日本欧洲亚洲大胆精品| 亚洲色图.com| 国产福利一区二区| 欧美二区在线观看| 中文字幕色av一区二区三区| 美女视频网站黄色亚洲| 色呦呦日韩精品| 国产日韩欧美麻豆| 免费人成精品欧美精品| 日本高清不卡一区| 亚洲国产高清在线| 麻豆国产精品一区二区三区 | 91美女视频网站| 久久综合九色综合久久久精品综合 | 不卡在线观看av| 精品伦理精品一区| 日韩国产在线观看| 欧美日韩国产综合一区二区| 中文字幕一区二区三区精华液| 精品无码三级在线观看视频| 欧美精品一二三| 亚洲国产一区在线观看| 成人爱爱电影网址| 国产欧美精品一区二区色综合| 久久99久久久久| 7777精品伊人久久久大香线蕉 | 欧美中文字幕久久| 亚洲精品伦理在线| 色综合久久中文字幕综合网| **网站欧美大片在线观看| 国产精品香蕉一区二区三区| 久久久久久久网| 激情偷乱视频一区二区三区| 日韩美女一区二区三区四区| 青青草原综合久久大伊人精品| 欧美日韩国产精选| 性做久久久久久| 欧美日本国产一区| 日韩高清国产一区在线|