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

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

?? upsd3400_usb_app.lst

?? uPSD34xx Disk driver
?? LST
?? 第 1 頁 / 共 4 頁
字號:
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE UPSD3400_USB_APP
OBJECT MODULE PLACED IN upsd3400_usb_app.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE upsd3400_usb_app.c BROWSE DEBUG OBJECTEXTEND SRC(.\upsd3400_usb_app.SRC)

line level    source

   1          /*------------------------------------------------------------------------------
   2          upsd3400_usb_app.c
   3          
   4          Version:
   5          September 13, 2005 Ver 1.1 - Updated disclaimer, renamed file.
   6          March 22, 2005 - Version 1.0 - Initial Release.
   7          
   8          Description:  USB Mass Storage Class application module. 
   9          
  10          Compilers:
  11          Raisonance, Keil
  12          
  13          THIS INFORMATION (or THIS SOFTWARE or THIS DOCUMENT) IS FOR GUIDANCE ONLY. ST 
  14          MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS 
  15          SOFTWARE nor for any infringement of patents or other rights of third parties 
  16          which may result from its use. ST MICROELECTRONICS SHALL NOT BE HELD LIABLE FOR 
  17          ANY DIRECT, INDIRECT INCIDENTAL OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY 
  18          CLAIMS ARISING IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, 
  19          OR USE OF THIS SOFTWARE. Specifications mentioned in this publication are 
  20          subject to change without notice. This publication supersedes and replaces all 
  21          information previously supplied. STMicroelectronics products are not authorized 
  22          for use as critical components in life support devices or systems without the 
  23          express written approval of STMicroelectronics.
  24          ------------------------------------------------------------------------------*/
  25          
  26          #pragma NOAREGS
  27          
  28          #include "upsd3400.h"
  29          #include "upsd3400_hardware.h"
  30          #include "upsd3400_usb.h"
  31          #include "upsd3400_upsd_usb.h"
  32          #include "upsd3400_usb_app.h"
  33          
  34          #define USB_MS_SectorSize 512
  35          #define USB_MS_UnitSize   (USB_MS_SectorSize*9*64)
  36          
  37          extern xdata PSD_REGS UPSD_xreg;
  38          
  39          data unsigned      char gbCBWCB[16];
  40          data unsigned long  int gdwCBWTag;
  41          data unsigned long  int gdwCBWDataTransferLength;
  42          data unsigned      char gbCBWFlags;
  43          data unsigned      char gbCBWLUN;
  44          data unsigned      char gbCBWCBLength;
  45          data unsigned      char gbCSWStatus;
  46          data unsigned      char gbBulkPipeStage;
  47          
  48          static data unsigned int TransferLength;
  49          static data unsigned int PhysicalDataAddr;
  50          
  51          extern unsigned char data usbState, ep0state, ep1state;
  52          extern setup_buffer setupPacket;
  53          
  54          #define USB_FIFO ((unsigned char volatile xdata *) USB_BASE_ADDR)
  55          
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 2   

  56          #define UMSC_IN_ENDPOINT SELEP1
  57          #define UMSC_OUT_ENDPOINT SELEP1
  58          
  59          #define UMSC_MASK_IN_ENDPOINT IN1F
  60          #define UMSC_MASK_OUT_ENDPOINT OUT1F
  61          
  62          
  63          void ReturnCSW(void)
  64          /******************************************************************************
  65            Function   : void ReturnCSW(void)
  66            Parameters : none
  67            Description: Handle CSW package.
  68                         Command Status Wrapper (CSW) shall start on a packet boundary
  69                         and shall end as a short packet with exactly 13 (0Dh) bytes
  70                         transferred. Fields appear aligned to byte offsets equal to
  71                         a multiple of their byte size. All CSW transfers shall
  72                         be ordered with the LSB (byte 0) first (little endian).
  73             ******************************************************************************/
  74           {
  75   1        USEL  = INDIR | UMSC_IN_ENDPOINT;          //Select EP1 IN
  76   1      
  77   1      /*dCSWSignature:
  78   1        Signature that helps identify this data packet as a CSW. The signature field
  79   1        shall contain the value 53425355h (little endian), indicating CSW. */
  80   1        USB_FIFO[ 0] = 0x55;                       // dCSWSignature
  81   1        USB_FIFO[ 1] = 0x53;
  82   1        USB_FIFO[ 2] = 0x42;
  83   1        USB_FIFO[ 3] = 0x53;
  84   1      /*dCSWTag:
  85   1        The device shall set this field to the value received in the dCBWTag
  86   1        of the associated CBW.*/
  87   1        USB_FIFO[ 4] = *((uchar *)&gdwCBWTag+3);   // dCSWTag, LSB read first
  88   1        USB_FIFO[ 5] = *((uchar *)&gdwCBWTag+2);
  89   1        USB_FIFO[ 6] = *((uchar *)&gdwCBWTag+1);
  90   1        USB_FIFO[ 7] = *((uchar *)&gdwCBWTag+0);
  91   1      /*dCSWDataResidue:
  92   1        For Data-Out the device shall report in the dCSWDataResidue the difference
  93   1        between
  94   1        the amount of data expected as stated in the dCBWDataTransferLength,
  95   1        and the actual amount of data processed by the device.
  96   1        For Data-In the device shall report in the dCSWDataResidue the difference
  97   1        between the amount of data expected as stated in the dCBWDataTransferLength
  98   1        and the actual amount of relevant data sent by the device.
  99   1        The dCSWDataResidue shall not exceed the value sent in the dCBWDataTransferLength.
 100   1        We return always zero, it is simple.
 101   1        */
 102   1        USB_FIFO[ 8] = 0x00;                       // dCSWDataResidue
 103   1        USB_FIFO[ 9] = 0x00;
 104   1        USB_FIFO[10] = 0x00;
 105   1        USB_FIFO[11] = 0x00;
 106   1      /*bCSWStatus:
 107   1        bCSWStatus indicates the success or failure of the command.
 108   1        The device shall set this byte to zero if the command completed successfully.
 109   1        A non-zero value shall indicate a failure during command execution according
 110   1        to the following table:
 111   1        00h Command Passed ("good status")
 112   1        01h Command Failed
 113   1        02h Phase Error
 114   1        03h and 04h Reserved (Obsolete)
 115   1        05h to FFh Reserved
 116   1        */
 117   1        USB_FIFO[12] = gbCSWStatus;                // bCSWStatus
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 3   

 118   1      
 119   1        USIZE = 0x0D;                              // fire !
 120   1      
 121   1        gbBulkPipeStage = BS_CSW_DONE_PHASE;
 122   1       }
 123          
 124          void SpecificIncrementSectorAddress(void)
 125          /******************************************************************************
 126           Function   : void SpecificIncrementSectorAddress(void)
 127           Parameters : none
 128           Description: Increments PhysicalDataAddr of 512b (1 sector),
 129                        adjust PAGE and TransferLength.
 130                        Used in Read and Write Commands
 131           ******************************************************************************/
 132           {
 133   1        PhysicalDataAddr   += 64;                  // next sector physical address
 134   1        if (PhysicalDataAddr < 0x8000)
 135   1         {
 136   2          PhysicalDataAddr += 0x8000;        // adjust address to the top half of memory
 137   2          UPSD_xreg.PAGE   += 1;                   // adjust PAGE
 138   2         }
 139   1        TransferLength--;                          // decrement sector counter
 140   1       }
 141          
 142          // Flash parameters
 143          #define NVM_DATA_POLL     0x80              // flash status "data poll" bit at DQ7
 144          #define NVM_DATA_TOGGLE   0x40            // flash status "toggle poll" bit at DQ6
 145          #define NVM_ERROR         0x20               // flash status "error" bit at DQ5
 146          
 147          
 148          BOOL EraseMainFlashSector(void)
 149          /******************************************************************************
 150           Function   : BOOL EraseMainFlashSector()
 151           Parameters : (unsigned int addr,unsigned char wbyte)
 152           Description: Erases Main Flash Sector
 153           ******************************************************************************/
 154           {
 155   1        data unsigned char err,error,done;
 156   1        data unsigned char poll;
 157   1      
 158   1        done = FALSE;
 159   1        err = FALSE;
 160   1      
 161   1        ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0xAA;
 162   1                                       // unlock main flash, write 0xAA to addess 0xX555
 163   1        ((unsigned char volatile xdata *) 0x8000)[0x0AAA] = 0x55;
 164   1                                       // unlock main flash, write 0x55 to addess 0xXAAA
 165   1        ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0x80;
 166   1                                                   // write 0x80 command to erase sector
 167   1        ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0xAA;
 168   1                                                   // continue unlock sequence
 169   1        ((unsigned char volatile xdata *) 0x8000)[0x0AAA] = 0x55;
 170   1                                                   // continue unlock sequence
 171   1        ((unsigned char volatile xdata *) 0x8000)[0x0000] = 0x30;
 172   1                                                // write 0x30 to sector address to erase
 173   1      
 174   1        do                      // now use dat polling method to verify successful erase
 175   1         {
 176   2          poll = ((unsigned char volatile xdata *) 0x8000)[0x0000];
 177   2                                                   // read flash status from any address
 178   2                                               // within the defined flash address space
 179   2          error = poll & NVM_ERROR;                // save timeout error bit at DQ5
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 4   

 180   2          poll = poll & NVM_DATA_POLL;             // look at D7
 181   2          if (poll == NVM_DATA_POLL)               // compare DQ7
 182   2           {
 183   3            done = TRUE;             // bulk erase OK, indicate successful exit criteria
 184   3           }
 185   2          else if (error == NVM_ERROR)             // check for timeout error
 186   2           {
 187   3            err = TRUE;                            // indicate timeout error occurred
 188   3           }
 189   2      
 190   2         }
 191   1        while((done == FALSE) && (err == FALSE));
 192   1      
 193   1      
 194   1        if (err == TRUE)                  // make sure timeout error and dat poll didn't
 195   1                                                   // occur simultaneously
 196   1         {
 197   2          poll = ((unsigned char volatile xdata *) 0x8000)[0x000];
 198   2                                                   // Read flash status again
 199   2          poll = poll & NVM_DATA_POLL;           // get DQ7 of poll byte read from flash
 200   2          if (poll == NVM_DATA_POLL)               // compare DQ7
 201   2           {
 202   3            done = TRUE;                           // the flash erased OK at the same
 203   3                         // time timout error occured, indicate successful exit criteria
 204   3            err  = FALSE;
 205   3           }
 206   2          else
 207   2           {
 208   3            ((unsigned char volatile xdata *) 0x8000)[0x0555] = 0xF0;
 209   3                                      // reset the flash array (short reset instruction)
 210   3           }
 211   2         }
 212   1      
 213   1        return err;
 214   1       }
 215          
 216          
 217          
 218          
 219          
 220          
 221          
 222          BOOL WriteToMainFlash(unsigned int addr,unsigned char wdat)
 223          /******************************************************************************
 224           Function   : BOOL WriteToMainFlash()
 225           Parameters : (unsigned int addr,unsigned char wbyte)
 226           Description: Writes 1 byte to Main Flash
 227           ******************************************************************************/
 228           {
 229   1        data unsigned char err,error,done;
 230   1        data unsigned char poll,dat;
 231   1      
 232   1        err = FALSE;
 233   1      
 234   1        if ( ((unsigned char volatile xdata *) 0)[addr] != wdat)
 235   1         {
 236   2          done = FALSE;
 237   2          ((unsigned char volatile xdata *) 0)[0x8555] = 0xAA;
 238   2                                       // unlock main flash, write 0xAA to addess 0xX555
 239   2          ((unsigned char volatile xdata *) 0)[0x8AAA] = 0x55;
 240   2                                       // unlock main flash, write 0x55 to addess 0xXAAA
 241   2          ((unsigned char volatile xdata *) 0)[0x8555] = 0xA0;
C51 COMPILER V7.50   UPSD3400_USB_APP                                                      09/13/2005 18:00:20 PAGE 5   

 242   2                                                   // write 0xA0 command to program
 243   2          ((unsigned char volatile xdata *) 0)[addr] = wdat;
 244   2                                                   // write byte to flash
 245   2          dat = wdat & NVM_DATA_POLL;              // get bit DQ7 of the original dat
 246   2      
 247   2          do                    // now use dat polling method to verify successful write
 248   2           {
 249   3            poll = ((unsigned char volatile xdata *) 0)[addr];
 250   3                                           // Read the location that was just programmed
 251   3            error = poll & NVM_ERROR;              // save timeout error bit at DQ5
 252   3            poll = poll & NVM_DATA_POLL;         // get DQ7 of poll byte read from flash
 253   3      
 254   3            if (dat == poll)                       // compare DQ7
 255   3             {
 256   4              done = TRUE;                         // dat byte programmed into flash OK,
 257   4                                                   // indicate successful exit criteria
 258   4             }
 259   3            else if (error ==  NVM_ERROR )         // check for timeout error
 260   3             {
 261   4              err = TRUE;                          // indicate timeout error occurred
 262   4             }
 263   3      
 264   3           }
 265   2          while((done == FALSE) && (err == FALSE));
 266   2      
 267   2          if (err == TRUE)                // make sure timeout error and dat poll didn't
 268   2                                                   // occur simultaneously
 269   2           {
 270   3            poll = ((unsigned char volatile xdata *) 0)[addr];
 271   3                                                   // Read location in flash again
 272   3            poll = poll & NVM_DATA_POLL;         // get DQ7 of poll byte read from flash
 273   3            if (dat == poll)                       // compare DQ7
 274   3             {
 275   4              done = TRUE;             // data byte programmed into flash OK at the same
 276   4                         // time timout error occured, indicate successful exit criteria
 277   4              err  = FALSE;
 278   4             }
 279   3            else
 280   3             {
 281   4              ((unsigned char volatile xdata *) 0)[0x8555] = 0xF0;
 282   4                                      // reset the flash array (short reset instruction)
 283   4             }
 284   3           }
 285   2         }
 286   1        return err;
 287   1       }
 288          
 289          
 290          
 291          
 292          
 293          
 294          
 295          void WriteBufferToFlash(void)
 296          /******************************************************************************
 297           Function   : void WriteBufferToFlash()
 298           Parameters : (none)
 299           Description: Receives (writes) TransferLength sectors with length of 512 Bytes

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本亚洲欧美天堂免费| 亚洲国产一区二区三区青草影视| 91免费在线视频观看| 日韩av在线播放中文字幕| 国产欧美一区二区精品久导航 | 久久精品一区二区三区不卡| 不卡的av电影| 久久99久久久久| 亚洲综合免费观看高清完整版| 久久色.com| 欧美人与z0zoxxxx视频| 91一区二区在线观看| 国产一区二区三区综合| 丝袜亚洲精品中文字幕一区| 中文字幕日韩一区二区| 欧美大白屁股肥臀xxxxxx| 在线观看一区二区视频| 国产成人啪午夜精品网站男同| 日av在线不卡| 天天综合色天天综合色h| 亚洲四区在线观看| 中文字幕国产一区| 久久综合精品国产一区二区三区| 欧美日韩成人综合天天影院| 91啪亚洲精品| kk眼镜猥琐国模调教系列一区二区 | 欧美精品一区二区三区高清aⅴ | 亚洲视频在线观看一区| 欧美国产激情二区三区| 久久亚洲综合色| 亚洲精品在线免费观看视频| 欧美日韩亚洲国产综合| 91黄色激情网站| 一本色道久久综合狠狠躁的推荐| 粉嫩aⅴ一区二区三区四区| 国产一区二区视频在线播放| 久国产精品韩国三级视频| 日韩**一区毛片| 日产国产高清一区二区三区| 婷婷综合五月天| 青青草一区二区三区| 美女视频一区二区三区| 精品一区二区三区视频在线观看| 美女视频黄久久| 黄一区二区三区| 国产成人综合在线播放| 国产精品888| 成人毛片视频在线观看| 不卡av免费在线观看| 99国产精品久久久| 日本道在线观看一区二区| 国产精品蜜臀在线观看| 久久久av毛片精品| 欧美精品丝袜中出| 欧美三级日本三级少妇99| 色综合天天综合给合国产| 欧美亚洲自拍偷拍| 欧美日韩成人激情| 精品国产乱码久久久久久1区2区| 欧美成人精精品一区二区频| 久久久久国产精品麻豆ai换脸| 2021中文字幕一区亚洲| 亚洲国产精品99久久久久久久久 | 99久久精品久久久久久清纯| 91日韩一区二区三区| 在线观看日韩毛片| 欧美一级欧美一级在线播放| 欧美成人一区二区三区在线观看| 久久久综合视频| 国产精品第一页第二页第三页| 亚洲乱码国产乱码精品精的特点| 亚洲欧美福利一区二区| 天天av天天翘天天综合网 | 图片区小说区区亚洲影院| 蜜臀精品一区二区三区在线观看| 日本最新不卡在线| 另类小说色综合网站| 精品一区二区三区蜜桃| a级高清视频欧美日韩| 91国产福利在线| 日韩午夜av一区| 国产人妖乱国产精品人妖| 亚洲一区二三区| 美国十次综合导航| 91丨国产丨九色丨pron| 精品视频在线视频| 欧美高清在线视频| 亚洲午夜国产一区99re久久| 欧美bbbbb| 国产不卡高清在线观看视频| 欧美亚洲丝袜传媒另类| 精品日韩av一区二区| 樱桃国产成人精品视频| 美国毛片一区二区| 精品一二线国产| 91在线看国产| 欧美精品乱码久久久久久按摩| 欧美一区二区三区在线电影| 91精品国产乱码久久蜜臀| 国产精品色在线观看| 亚洲va中文字幕| 丁香亚洲综合激情啪啪综合| 欧美性做爰猛烈叫床潮| 中国av一区二区三区| 午夜精品久久久久久久| eeuss鲁一区二区三区| 欧美一区二区三区播放老司机| 国产精品福利影院| 蜜桃视频第一区免费观看| 日本精品裸体写真集在线观看 | 欧美精品色一区二区三区| 久久久久久夜精品精品免费| 夜夜嗨av一区二区三区中文字幕| 激情综合网天天干| 欧美午夜精品一区二区三区| 日本一区二区三区dvd视频在线| 午夜精品福利一区二区蜜股av| aaa亚洲精品一二三区| 日韩欧美不卡在线观看视频| 亚洲国产一区二区三区青草影视| 国产成人在线网站| 精品国产一区二区国模嫣然| 一区二区成人在线视频| 色综合久久久久综合体| 久久久精品日韩欧美| 久久99深爱久久99精品| 欧美日韩在线电影| 五月开心婷婷久久| 成人自拍视频在线观看| 国产午夜精品理论片a级大结局| 亚洲一区二区3| 91激情五月电影| 国产欧美日本一区二区三区| 国产精品一区二区免费不卡| 欧美三区免费完整视频在线观看| 国产精品毛片久久久久久久| 国产一区二区三区最好精华液| 91精品在线一区二区| 青青国产91久久久久久| 在线亚洲一区二区| 国产精品国产三级国产aⅴ无密码| 国产成人午夜高潮毛片| 久久久久久久久久久99999| 午夜精品久久久久久不卡8050| 欧美在线制服丝袜| 亚洲成人久久影院| 欧美在线观看一二区| 亚洲黄色录像片| 在线影视一区二区三区| 亚洲一二三四区不卡| 色吧成人激情小说| 天使萌一区二区三区免费观看| 一本一道波多野结衣一区二区| 亚洲综合色婷婷| 色婷婷av一区二区三区大白胸| 亚洲精品成a人| 激情深爱一区二区| 久久精品亚洲国产奇米99| 免费观看久久久4p| 日韩三级免费观看| 国产成人av电影在线| 久久青草欧美一区二区三区| 成人av网址在线| 亚洲欧美另类图片小说| 欧美日韩和欧美的一区二区| 亚洲福利视频一区二区| 日韩精品一区二区三区中文不卡 | 国产精品嫩草影院av蜜臀| 99国产精品久久久久久久久久| 亚洲日韩欧美一区二区在线| 欧美体内she精高潮| 日韩电影免费在线看| 久久精品夜色噜噜亚洲a∨| 丁香激情综合国产| 亚洲一区二区在线免费看| 色欧美片视频在线观看| 欧美aaaaaa午夜精品| 欧美激情一区二区在线| 色综合久久中文综合久久97| 欧美aaaaaa午夜精品| 日本一区二区综合亚洲| 欧美日韩色综合| 麻豆91在线看| 亚洲裸体xxx| 日韩一区二区不卡| 91麻豆123| 亚洲va在线va天堂| 国产精品国产三级国产aⅴ中文 | 在线观看免费亚洲| 久久福利视频一区二区| 久久久一区二区| 色久综合一二码| 国产一区二区免费视频| 国产精品久久久99| 精品国产污污免费网站入口| aaa欧美日韩| 国产电影一区在线| 亚洲va欧美va人人爽| 亚洲日本韩国一区| 国产亚洲人成网站|