亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99久久99久久精品免费观看| 亚洲一区二区不卡免费| 亚洲丰满少妇videoshd| 一本色道久久综合精品竹菊| 国产精品女主播在线观看| 国产在线国偷精品免费看| 日韩色视频在线观看| 亚洲成人你懂的| 欧美视频三区在线播放| 亚洲免费视频成人| 91亚洲国产成人精品一区二三| 国产精品久久福利| 床上的激情91.| 日本一区二区三区免费乱视频| 国产激情一区二区三区| 国产欧美一区二区三区鸳鸯浴| 国产精品主播直播| 激情综合色播五月| 精品粉嫩超白一线天av| 久草精品在线观看| 亚洲精品一区二区三区四区高清| 久久99日本精品| 久久久www成人免费毛片麻豆 | 国产精品美女久久久久久2018| 国产大片一区二区| 欧美高清在线精品一区| 成人免费毛片a| 亚洲精品五月天| 欧美日韩精品欧美日韩精品一综合| 亚洲一卡二卡三卡四卡五卡| 欧美亚洲一区二区在线| 天天综合网 天天综合色| 欧美福利视频一区| 精品亚洲成av人在线观看| 国产拍欧美日韩视频二区| 97久久超碰精品国产| 一区二区高清免费观看影视大全| 欧美精三区欧美精三区| 精品一区二区三区视频在线观看| 中文字幕精品三区| 在线观看亚洲精品| 日本不卡在线视频| 久久久精品免费网站| 9人人澡人人爽人人精品| 亚洲综合在线五月| 欧美一区二区三区免费| 粉嫩高潮美女一区二区三区| 亚洲免费视频成人| 日韩美女视频在线| 白白色亚洲国产精品| 色悠久久久久综合欧美99| 亚洲va在线va天堂| 欧美激情一区二区在线| 欧美男生操女生| 成人一区二区视频| 一区二区三区四区国产精品| 欧美mv和日韩mv国产网站| 成人精品一区二区三区中文字幕| 亚洲图片有声小说| 国产欧美日韩不卡免费| 777精品伊人久久久久大香线蕉| 国产精品一二三四五| 亚洲五码中文字幕| 国产精品久久久久久久久搜平片| 欧美挠脚心视频网站| 成人理论电影网| 日本伊人色综合网| 亚洲免费视频成人| 精品久久久久久综合日本欧美| 一本到三区不卡视频| 国内精品视频666| 五月天网站亚洲| 中文字幕一区在线| 久久久精品欧美丰满| 日韩三级在线免费观看| 欧洲人成人精品| 成人免费视频国产在线观看| 久久精工是国产品牌吗| 五月天亚洲婷婷| 亚洲蜜臀av乱码久久精品蜜桃| 日韩一区二区在线看| 欧洲精品在线观看| 成人精品电影在线观看| 激情小说亚洲一区| 麻豆freexxxx性91精品| 亚洲国产精品久久人人爱| 国产精品二三区| 国产午夜精品一区二区 | 2024国产精品| 欧美一区二区免费观在线| 欧日韩精品视频| 色噜噜夜夜夜综合网| 91在线精品一区二区| av电影一区二区| 成人综合在线网站| 国产精品一二三四区| 国产美女久久久久| 国产精品亚洲第一| 国产伦精品一区二区三区免费迷 | 亚洲色图第一区| 最新欧美精品一区二区三区| 国产精品视频在线看| 日本一区二区三区在线观看| 久久久久久久综合色一本| 久久综合色天天久久综合图片| 精品国产欧美一区二区| 久久这里只有精品6| 精品国产91久久久久久久妲己| 精品久久一区二区| 久久久久久久精| 狠狠色丁香婷婷综合| 美女尤物国产一区| 精品无人区卡一卡二卡三乱码免费卡| 免费av网站大全久久| 久久99精品国产麻豆婷婷| 激情综合色丁香一区二区| 国产一区 二区| av在线播放不卡| 在线这里只有精品| 3d动漫精品啪啪一区二区竹菊| 日韩一级成人av| 久久综合色之久久综合| 国产精品丝袜一区| 一区二区三区四区不卡在线| 亚洲午夜精品在线| 麻豆精品视频在线观看视频| 国精品**一区二区三区在线蜜桃| 国产精品1区2区| 91浏览器打开| 欧美午夜在线一二页| 精品剧情在线观看| 亚洲欧洲成人自拍| 午夜国产精品影院在线观看| 久久国产三级精品| av在线播放不卡| 9191久久久久久久久久久| 久久精品综合网| 亚洲男人的天堂一区二区| 天堂蜜桃91精品| 国产+成+人+亚洲欧洲自线| 欧美优质美女网站| 久久综合资源网| 一区二区三区精品| 麻豆免费看一区二区三区| 成人黄色免费短视频| 91麻豆精品国产91久久久久久久久 | 欧美日韩一级片在线观看| 精品少妇一区二区三区日产乱码 | 欧美日韩免费观看一区二区三区 | 日本韩国精品一区二区在线观看| 欧美精品一二三区| 国产嫩草影院久久久久| 午夜精品福利视频网站| 夫妻av一区二区| 日韩一区二区麻豆国产| 亚洲人成精品久久久久| 久久精品久久久精品美女| 99国产精品久久| 精品国精品自拍自在线| 午夜在线成人av| av动漫一区二区| 精品国产成人在线影院| 亚洲一区视频在线观看视频| 丁香六月综合激情| 欧美大片拔萝卜| 亚洲午夜一区二区三区| 不卡的电影网站| 久久亚洲精品国产精品紫薇| 亚洲电影视频在线| www.久久久久久久久| 精品国产91亚洲一区二区三区婷婷 | 成人动漫av在线| 精品久久久久一区| 五月天一区二区三区| 色欧美日韩亚洲| 中文字幕av免费专区久久| 美女视频一区在线观看| 欧美日韩视频在线第一区 | 日韩电影在线观看电影| 色一区在线观看| 国产精品久久久久久久第一福利| 精品在线一区二区| 欧美一级久久久| 亚洲成人午夜影院| 欧洲亚洲精品在线| 亚洲视频在线观看三级| 懂色av一区二区夜夜嗨| 久久久久久久久久久黄色| 激情成人午夜视频| 精品少妇一区二区三区视频免付费 | 欧美日韩高清一区二区| 亚洲一区二区三区在线播放| 色婷婷av一区二区三区之一色屋| 国产欧美日韩亚州综合| 国产v日产∨综合v精品视频| 欧美国产综合色视频| 国产91精品免费| 亚洲国产精品黑人久久久| 粉嫩aⅴ一区二区三区四区五区| 久久久激情视频|