⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mscuser.lst

📁 USB存储器
💻 LST
📖 第 1 页 / 共 5 页
字号:
  595   2            switch (CBW.CB[0]) {
  596   3              case SCSI_READ10:
  597   3                MSC_MemoryRead();
  598   3                break;
  599   3            }
  600   2            break;
  601   2          case MSC_BS_DATA_IN_LAST:
  602   2            MSC_SetCSW();
  603   2            break;
  604   2          case MSC_BS_DATA_IN_LAST_STALL:
  605   2            USB_SetStallEP(MSC_EP_IN);
  606   2            MSC_SetCSW();
  607   2            break;
  608   2          case MSC_BS_CSW:
  609   2            BulkStage = MSC_BS_CBW;
  610   2            break;
  611   2        }
  612   1      }
  613          
  614          
  615          /*
  616           *  MSC Bulk Out Callback
  617           *    Parameters:      None (global variables)
  618           *    Return Value:    None
  619           */
  620          
  621          void MSC_BulkOut (void) {
  622   1      
  623   1        BulkLen = USB_ReadEP(MSC_EP_OUT, BulkBuf);
  624   1        switch (BulkStage) {
  625   2          case MSC_BS_CBW:
  626   2            MSC_GetCBW();
  627   2            break;
  628   2          case MSC_BS_DATA_OUT:
  629   2            switch (CBW.CB[0]) {
  630   3              case SCSI_WRITE10:
  631   3                MSC_MemoryWrite();
  632   3                break;
  633   3              case SCSI_VERIFY10:
  634   3                MSC_MemoryVerify();
  635   3                break;
  636   3            }
  637   2            break;
  638   2          default:
  639   2            USB_SetStallEP(MSC_EP_OUT);
  640   2            CSW.bStatus = CSW_PHASE_ERROR;
  641   2            MSC_SetCSW();
  642   2            break;
  643   2        }
  644   1      }
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 11  

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (USB_SetStallEP?T)
 EXTERN CODE16 (USB_ReadEP?T)
 EXTERN CODE16 (USB_WriteEP?T)
 EXTERN DATA (EP0Buf)



*** PUBLICS:
 PUBLIC         MSC_Reset?T
 PUBLIC         MSC_GetMaxLUN?T
 PUBLIC         MSC_GetCBW?T
 PUBLIC         MSC_SetCSW?T
 PUBLIC         MSC_BulkIn?T
 PUBLIC         MSC_BulkOut?T
 PUBLIC         MSC_MemoryRead?T
 PUBLIC         MSC_MemoryWrite?T
 PUBLIC         MSC_MemoryVerify?T
 PUBLIC         MSC_RWSetup?T
 PUBLIC         DataInFormat?T
 PUBLIC         DataInTransfer?T
 PUBLIC         MSC_TestUnitReady?T
 PUBLIC         MSC_RequestSense?T
 PUBLIC         MSC_Inquiry?T
 PUBLIC         MSC_ModeSense6?T
 PUBLIC         MSC_ModeSense10?T
 PUBLIC         MSC_ReadCapacity?T
 PUBLIC         MSC_ReadFormatCapacity?T
 PUBLIC         Memory
 PUBLIC         MemOK
 PUBLIC         Offset
 PUBLIC         Length
 PUBLIC         BulkStage
 PUBLIC         BulkBuf
 PUBLIC         BulkLen
 PUBLIC         CBW
 PUBLIC         CSW



*** DATA SEGMENT '?DT0?AT_40002000_?1?mscuser':
 40002000          Memory:
 40002000            DS          16384

*** DATA SEGMENT '?DT0?mscuser':
 00000000          MemOK:
 00000000            DS          4
 00000004          Offset:
 00000004            DS          4
 00000008          Length:
 00000008            DS          4
 0000000C          CBW:
 0000000C            DS          31
 0000002B            ALIGN       4
 0000002C          CSW:
 0000002C            DS          13
 00000039          BulkStage:
 00000039            DS          1
 0000003A          BulkBuf:
 0000003A            DS          64
 0000007A          BulkLen:
 0000007A            DS          1



*** CODE SEGMENT '?PR?MSC_Reset?T?mscuser':
   51:   IOCLR1 = (LED_RD | LED_WR);  /* Turn Off R/W LED */
 00000000  4800      LDR         R1,=0x30000
 00000002  4800      LDR         R0,=0xE002801C
 00000004  6001      STR         R1,[R0,#0x0]
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 12  

   52:   BulkStage = MSC_BS_CBW;
 00000006  2100      MOV         R1,#0x0
 00000008  4800      LDR         R0,=BulkStage ; BulkStage
 0000000A  7001      STRB        R1,[R0,#0x0] ; BulkStage
   53:   return (TRUE);
 0000000C  2001      MOV         R0,#0x1
   54: }
 0000000E  4770      BX          R14
 00000010          ENDP ; 'MSC_Reset?T'


*** CODE SEGMENT '?PR?MSC_GetMaxLUN?T?mscuser':
   66:   EP0Buf[0] = 0;               /* No LUN associated with this device */
 00000000  2100      MOV         R1,#0x0
 00000002  4800      LDR         R0,=EP0Buf ; EP0Buf
 00000004  7001      STRB        R1,[R0,#0x0] ; EP0Buf
   67:   return (TRUE);
 00000006  2001      MOV         R0,#0x1
   68: }
 00000008  4770      BX          R14
 0000000A          ENDP ; 'MSC_GetMaxLUN?T'


*** CODE SEGMENT '?PR?MSC_MemoryRead?T?mscuser':
   78: void MSC_MemoryRead (void) {
 00000000  B510      PUSH        {R4,LR}
 00000002  ---- Variable 'n' assigned to Register 'R4' ----
 00000002            ; SCOPE-START
   81:   if (Length > MSC_MAX_PACKET) {
 00000002  4800      LDR         R0,=Length ; Length
 00000004  6800      LDR         R0,[R0,#0x0] ; Length
 00000006  2840      CMP         R0,#0x40
 00000008  D901      BLS         L_3  ; T=0x0000000E
   82:     n = MSC_MAX_PACKET;
 0000000A  2440      MOV         R4,#0x40
   83:   } else {
 0000000C  E000      B           L_4  ; T=0x00000010
 0000000E          L_3:
   84:     n = Length;
 0000000E  1C04      MOV         R4,R0 ; n
   85:   }
 00000010          L_4:
   87:   if ((Offset + n) > MSC_MemorySize) {
 00000010  1C22      MOV         R2,R4 ; n
 00000012  4800      LDR         R0,=Offset ; Offset
 00000014  6801      LDR         R1,[R0,#0x0] ; Offset
 00000016  188A      ADD         R2,R1,R2 ; n
 00000018  4800      LDR         R0,=0x4000
 0000001A  4282      CMP         R2,R0
 0000001C  D903      BLS         L_5  ; T=0x00000026
   88:     n = MSC_MemorySize - Offset;
 0000001E  1A44      SUB         R4,R0,R1
   89:     BulkStage = MSC_BS_DATA_IN_LAST_STALL;
 00000020  2204      MOV         R2,#0x4
 00000022  4800      LDR         R0,=BulkStage ; BulkStage
 00000024  7002      STRB        R2,[R0,#0x0] ; BulkStage
   90:   }
 00000026          L_5:
   92:   USB_WriteEP(MSC_EP_IN, (BYTE *)(MSC_MemoryStart + Offset), n);
 00000026  4800      LDR         R0,=0x40002000
 00000028  1809      ADD         R1,R0
 0000002A  1C22      MOV         R2,R4 ; n
 0000002C  2082      MOV         R0,#0x82
 0000002E  F7FF      BL          USB_WriteEP?T  ; T=0x0001  (1)
 00000030  FFE7      BL          USB_WriteEP?T  ; T=0x0001  (2)
   93:   Offset += n;
 00000032  1C20      MOV         R0,R4 ; n
 00000034  4800      LDR         R1,=Offset ; Offset
 00000036  6809      LDR         R1,[R1,#0x0] ; Offset
 00000038  1809      ADD         R1,R0 ; n
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 13  

 0000003A  4800      LDR         R0,=Offset ; Offset
 0000003C  6001      STR         R1,[R0,#0x0] ; Offset
   94:   Length -= n;
 0000003E  1C20      MOV         R0,R4 ; n
 00000040  4800      LDR         R1,=Length ; Length
 00000042  6809      LDR         R1,[R1,#0x0] ; Length
 00000044  1A09      SUB         R1,R0 ; n
 00000046  4800      LDR         R0,=Length ; Length
 00000048  6001      STR         R1,[R0,#0x0] ; Length
   96:   CSW.dDataResidue -= n;
 0000004A  1C22      MOV         R2,R4 ; n
 0000004C  4800      LDR         R3,=CSW + 0x8 ; CSW+8
 0000004E  7819      LDRB        R1,[R3,#0x0] ; CSW+8
 00000050  7858      LDRB        R0,[R3,#0x1] ; CSW+8
 00000052  0200      LSL         R0,R0,#0x8
 00000054  4301      ORR         R1,R0
 00000056  7898      LDRB        R0,[R3,#0x2] ; CSW+8
 00000058  0400      LSL         R0,R0,#0x10
 0000005A  4301      ORR         R1,R0
 0000005C  78D8      LDRB        R0,[R3,#0x3] ; CSW+8
 0000005E  0600      LSL         R0,R0,#0x18
 00000060  4301      ORR         R1,R0
 00000062  1A89      SUB         R1,R2 ; n
 00000064  4800      LDR         R0,=CSW + 0x8 ; CSW+8
 00000066  7001      STRB        R1,[R0,#0x0] ; CSW+8
 00000068  0A09      LSR         R1,R1,#0x8
 0000006A  7041      STRB        R1,[R0,#0x1] ; CSW+8
 0000006C  0A09      LSR         R1,R1,#0x8
 0000006E  7081      STRB        R1,[R0,#0x2] ; CSW+8
 00000070  0A09      LSR         R1,R1,#0x8
 00000072  70C1      STRB        R1,[R0,#0x3] ; CSW+8
   98:   if (Length == 0) {
 00000074  4800      LDR         R0,=Length ; Length
 00000076  6800      LDR         R0,[R0,#0x0] ; Length
 00000078  2800      CMP         R0,#0x0
 0000007A  D102      BNE         L_6  ; T=0x00000082
   99:     BulkStage = MSC_BS_DATA_IN_LAST;
 0000007C  2103      MOV         R1,#0x3
 0000007E  4800      LDR         R0,=BulkStage ; BulkStage
 00000080  7001      STRB        R1,[R0,#0x0] ; BulkStage
  100:   }
 00000082          L_6:
  102:   if (BulkStage != MSC_BS_DATA_IN) {
 00000082  4800      LDR         R0,=BulkStage ; BulkStage
 00000084  7800      LDRB        R0,[R0,#0x0] ; BulkStage
 00000086  2802      CMP         R0,#0x2
 00000088  D005      BEQ         L_7  ; T=0x00000096
  103:     IOCLR1 = LED_RD;            /* Turn Off Read LED */
 0000008A  4800      LDR         R1,=0x10000
 0000008C  4800      LDR         R0,=0xE002801C
 0000008E  6001      STR         R1,[R0,#0x0]
  104:     CSW.bStatus = CSW_CMD_PASSED;
 00000090  2100      MOV         R1,#0x0
 00000092  4800      LDR         R0,=CSW + 0xC ; CSW+12
 00000094  7001      STRB        R1,[R0,#0x0] ; CSW+12
  105:   }
 00000096          L_7:
 00000096            ; SCOPE-END
  106: }
 00000096  BC10      POP         {R4}
 00000098  BC08      POP         {R3}
 0000009A  4718      BX          R3
 0000009C          ENDP ; 'MSC_MemoryRead?T'


*** CODE SEGMENT '?PR?MSC_MemoryWrite?T?mscuser':
  116: void MSC_MemoryWrite (void) {
 00000000  B500      PUSH        {LR}
ARM COMPILER V2.42b,  mscuser                                                              02/01/06  23:45:16  PAGE 14  

 00000002            ; SCOPE-START
  119:   if ((Offset + BulkLen) > MSC_MemorySize) {
 00000002  4800      LDR         R0,=BulkLen ; BulkLen
 00000004  7800      LDRB        R0,[R0,#0x0] ; BulkLen
 00000006  1C02      MOV         R2,R0
 00000008  4800      LDR         R0,=Offset ; Offset
 0000000A  6800      LDR         R0,[R0,#0x0] ; Offset
 0000000C  1882      ADD         R2,R0,R2
 0000000E  4800      LDR         R1,=0x4000
 00000010  428A      CMP         R2,R1
 00000012  D90A      BLS         L_13  ; T=0x0000002A
  120:     BulkLen = MSC_MemorySize - Offset;
 00000014  1A09      SUB         R1,R0
 00000016  0609      LSL         R1,R1,#0x18
 00000018  0E09      LSR         R1,R1,#0x18
 0000001A  4800      LDR         R0,=BulkLen ; BulkLen
 0000001C  7001      STRB        R1,[R0,#0x0] ; BulkLen
  121:     BulkStage = MSC_BS_CSW;
 0000001E  2105      MOV         R1,#0x5
 00000020  4800      LDR         R0,=BulkStage ; BulkStage
 00000022  7001      STRB        R1,[R0,#0x0] ; BulkStage
  122:     USB_SetStallEP(MSC_EP_OUT);
 00000024  2002      MOV         R0,#0x2
 00000026  F7FF      BL          USB_SetStallEP?T  ; T=0x0001  (1)
 00000028  FFEB      BL          USB_SetStallEP?T  ; T=0x0001  (2)
  125:   for (n = 0; n < BulkLen; n++) {
 0000002A          L_13:
 0000002A  2000      MOV         R0,#0x0
 0000002C  ---- Variable 'n' assigned to Register 'R0' ----
 0000002C  E009      B           L_11  ; T=0x00000042
 0000002E          L_12:
  126:     Memory[Offset + n] = BulkBuf[n];
 0000002E  1C02      MOV         R2,R0 ; n
 00000030  4800      LDR         R1,=BulkBuf ; BulkBuf
 00000032  5C89      LDRB        R1,[R1,R2]
 00000034  1C02      MOV         R2,R0 ; n
 00000036  4800      LDR         R3,=Offset ; Offset
 00000038  681B      LDR         R3,[R3,#0x0] ; Offset
 0000003A  189B      ADD         R3,R2 ; n
 0000003C  4800      LDR         R2,=Memory ; Memory
 0000003E  54D1      STRB        R1,[R2,R3]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -