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

📄 fw_epmg.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000074   0828               CMP         R0,#+8
   \   00000076   04D1               BNE         ??fw_ep0RxDone_6
   \   00000078   2089               LDRH        R0,[R4, #+8]
   \   0000007A   0904               LSL         R1,R1,#+16
   \   0000007C   090C               LSR         R1,R1,#+16
   \   0000007E   8142               CMP         R1,R0
   \   00000080   06D3               BCC         ??fw_ep0RxDone_2
    112                {
    113                  fw_writeEndpoint(FW_EP_BULK_IN, 0, 0); /* Send zero packet at the end */
   \                     ??fw_ep0RxDone_6:
   \   00000082   0022               MOV         R2,#+0
   \   00000084   0021               MOV         R1,#+0
   \   00000086   0120               MOV         R0,#+1
   \   00000088   ........           _BLF        fw_writeEndpoint,??fw_writeEndpoint??rT
    114                  fw_controlData.state = FW_STATE_END;
    115                }
    116              }
    117              else
    118              {
    119                fw_controlData.state = FW_STATE_END;
   \                     ??fw_ep0RxDone_5:
   \   0000008C   0020               MOV         R0,#+0
   \   0000008E   2073               STRB        R0,[R4, #+12]
   \                     ??fw_ep0RxDone_2:
   \   00000090   10BC               POP         {R4}
   \   00000092   01BC               POP         {R0}
   \   00000094   0047               BX          R0                 ;; return
    120              }
    121            }
    122          }
    123          
    124          
    125          /*****************************************************************
    126          *
    127          * ROUTINE         fw_processCommand
    128          *
    129          *-----------------------------------------------------------------
    130          *
    131          * Purpose :
    132          *     called by the task when a setup packet is received
    133          *
    134          * Input parameters  : NONE
    135          *
    136          * Output parameters : NONE
    137          *
    138          * Global data : fw_controlData : request to be processed
    139          *
    140          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    141          void fw_processCommand(void)
    142          {
   \                     fw_processCommand:
   \   00000000   11B5               PUSH        {R0,R4,LR}
    143            UCHAR _type, _req;
    144          
    145            if(fw_controlData.DeviceRequest.bmRequestType & 0x80)
   \   00000002   ....               LDR         R4,??DataTable4    ;; fw_controlData
   \   00000004   2078               LDRB        R0,[R4, #+0]
   \   00000006   0006               LSL         R0,R0,#+24
   \   00000008   01D5               BPL         ??fw_processCommand_0
    146            {
    147              fw_changedir(FW_DEVICE_TO_HOST);
   \   0000000A   0120               MOV         R0,#+1
   \   0000000C   00E0               B           ??fw_processCommand_1
    148            }
    149            else
    150            {
    151              fw_changedir(FW_HOST_TO_DEVICE);
   \                     ??fw_processCommand_0:
   \   0000000E   0020               MOV         R0,#+0
   \                     ??fw_processCommand_1:
   \   00000010   ........           _BLF        fw_changedir,??fw_changedir??rT
    152            }
    153          
    154            _type = fw_controlData.DeviceRequest.bmRequestType & FW_USB_REQUEST_TYPE_MASK;
   \   00000014   2178               LDRB        R1,[R4, #+0]
   \   00000016   6020               MOV         R0,#+96
   \   00000018   0840               AND         R0,R1
    155            /* take only the first four bits of the request */
    156            _req = fw_controlData.DeviceRequest.bRequest & FW_USB_REQUEST_MASK;
    157          
    158            /* process the rigth command */
    159            if (_type == FW_USB_STANDARD_REQUEST)
   \   0000001A   08D1               BNE         ??fw_processCommand_2
    160            {
    161              TRACE_DEBUG_L( "DeviceRequest:%d\n\r", _req );
    162              (*StandardDeviceRequest[_req])();
   \   0000001C   6078               LDRB        R0,[R4, #+1]
   \   0000001E   0007               LSL         R0,R0,#+28
   \   00000020   000F               LSR         R0,R0,#+28
   \   00000022   8000               LSL         R0,R0,#+2
   \   00000024   1449               LDR         R1,??fw_processCommand_3  ;; StandardDeviceRequest
   \   00000026   0858               LDR         R0,[R1, R0]
   \   00000028   ........           BL          ??rT_BX_R0
   \   0000002C   21E0               B           ??fw_processCommand_4
    163              /* fw_getStatus,  fw_clearFeature,  fw_reserved,  fw_setFeature, */
    164              /* fw_reserved,  fw_setAddress,  fw_getDescriptor,  fw_reserved, */
    165              /* fw_getConfiguration,  fw_setConfiguration,  fw_getInterface,  */
    166              /* fw_setInterface, fw_reserved */
    167            }
    168            else
    169            {
    170              if (_type == FW_USB_CLASS_REQUEST)
   \                     ??fw_processCommand_2:
   \   0000002E   2028               CMP         R0,#+32
   \   00000030   1BD1               BNE         ??fw_processCommand_5
    171              {
    172                UCHAR _pBuff;
    173                UCHAR _dataSize;
    174                /* !!!! point entree driver: ms_classRequest */
    175                if( USBMS_OK == ms_classRequest( fw_controlData.DeviceRequest, &_pBuff, &_dataSize ) )
   \   00000032   6846               MOV         R0,SP
   \   00000034   01B4               PUSH        {R0}
   \   00000036   401C               ADD         R0,R0,#+1
   \   00000038   01B4               PUSH        {R0}
   \   0000003A   82B0               SUB         SP,#+8
   \   0000003C   6946               MOV         R1,SP
   \   0000003E   2068               LDR         R0,[R4, #0]
   \   00000040   0860               STR         R0,[R1, #0]
   \   00000042   6068               LDR         R0,[R4, #+4]
   \   00000044   4860               STR         R0,[R1, #+4]
   \   00000046   0FBC               POP         {R0-R3}
   \   00000048   ........           _BLF        ms_classRequest,??ms_classRequest??rT
   \   0000004C   0028               CMP         R0,#+0
   \   0000004E   0CD1               BNE         ??fw_processCommand_5
    176                {
    177                  if( _dataSize != 0 )
   \   00000050   6846               MOV         R0,SP
   \   00000052   0078               LDRB        R0,[R0, #+0]
   \   00000054   0028               CMP         R0,#+0
   \   00000056   05D0               BEQ         ??fw_processCommand_6
    178                  {
    179                    /* we suppose that answer is always shorter than 1 packet */
    180                    fw_singleTransmit( &_pBuff, _dataSize );
   \   00000058   6846               MOV         R0,SP
   \   0000005A   0178               LDRB        R1,[R0, #+0]
   \   0000005C   401C               ADD         R0,R0,#+1
   \                     ??fw_processCommand_7:
   \   0000005E   ........           _BLF        fw_singleTransmit,??fw_singleTransmit??rT
   \   00000062   06E0               B           ??fw_processCommand_4
    181                  }
    182                  else
    183                  {
    184                    fw_singleTransmit(0,0);
   \                     ??fw_processCommand_6:
   \   00000064   0021               MOV         R1,#+0
   \   00000066   0020               MOV         R0,#+0
   \   00000068   F9E7               B           ??fw_processCommand_7
    185                  }
    186                }
    187                else
    188                {
    189                  fw_controlData.state = FW_STATE_END;
   \                     ??fw_processCommand_5:
   \   0000006A   0020               MOV         R0,#+0
   \   0000006C   2073               STRB        R0,[R4, #+12]
    190                  fw_stallEp0();
   \   0000006E   ........           _BLF        fw_stallEp0,??fw_stallEp0??rT
    191                }
    192              }
    193              else
    194              {
    195                fw_controlData.state = FW_STATE_END;
    196                fw_stallEp0();
    197              }
    198            }
    199          }
   \                     ??fw_processCommand_4:
   \   00000072   18BC               POP         {R3,R4}
   \   00000074   01BC               POP         {R0}
   \   00000076   0047               BX          R0                 ;; return
   \                     ??fw_processCommand_3:
   \   00000078   ........           DC32        StandardDeviceRequest
    200          
    201          
    202          /*****************************************************************
    203          *
    204          * ROUTINE         fw_ep0TxDone
    205          *
    206          *-----------------------------------------------------------------
    207          *
    208          * Purpose :
    209          *         called when something is transmitted by EP0
    210          *
    211          * Input parameters  : NONE
    212          *
    213          * Output parameters : NONE
    214          *
    215          * Global data : fw_controlData : request to be processed
    216          *
    217          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    218          void fw_ep0TxDone(void)
    219          {
   \                     fw_ep0TxDone:
   \   00000000   70B5               PUSH        {R4-R6,LR}
    220            USHORT _i = fw_controlData.wLength - fw_controlData.wCount;
   \   00000002   ....               LDR         R4,??DataTable4    ;; fw_controlData
   \   00000004   6089               LDRH        R0,[R4, #+10]
   \   00000006   2189               LDRH        R1,[R4, #+8]
   \   00000008   0D1A               SUB         R5,R1,R0
   \   0000000A   2D04               LSL         R5,R5,#+16
   \   0000000C   2D0C               LSR         R5,R5,#+16
    221          
    222            /* if the command is not finish */
    223            if( fw_controlData.state != FW_STATE_END)
   \   0000000E   217B               LDRB        R1,[R4, #+12]
   \   00000010   0029               CMP         R1,#+0
   \   00000012   1ED0               BEQ         ??fw_ep0TxDone_0
    224            {
    225              /* if the size of the transfer is longer than the max packet */
    226              if( _i >= FW_EP0_MAXPACKET_SIZE)
   \   00000014   2169               LDR         R1,[R4, #+16]
   \   00000016   0918               ADD         R1,R1,R0
   \   00000018   082D               CMP         R5,#+8
   \   0000001A   07D3               BCC         ??fw_ep0TxDone_1
    227              {
    228                fw_writeEndpoint(FW_EP_CTRL, fw_controlData.pData + fw_controlData.wCount, FW_EP0_MAXPACKET_SIZE);
   \   0000001C   0822               MOV         R2,#+8
   \   0000001E   0020               MOV         R0,#+0
   \   00000020   ........           _BLF        fw_writeEndpoint,??fw_writeEndpoint??rT
    229                fw_controlData.wCount += FW_EP0_MAXPACKET_SIZE;
   \   00000024   6089               LDRH        R0,[R4, #+10]
   \   00000026   0830               ADD         R0,#+8
   \   00000028   6081               STRH        R0,[R4, #+10]
   \   0000002A   12E0               B           ??fw_ep0TxDone_0
    230              }
    231              /* else if there are something to send */
    232              else
    233              {
    234                if( _i != 0)
   \                     ??fw_ep0TxDone_1:
   \   0000002C   0026               MOV         R6,#+0
   \   0000002E   281C               MOV         R0,R5
   \   00000030   08D0               BEQ         ??fw_ep0TxDone_2
    235                {
    236                  fw_writeEndpoint(FW_EP_CTRL, fw_controlData.pData + fw_controlData.wCount, _i);
   \   00000032   2A06               LSL         R2,R5,#+24
   \   00000034   120E               LSR         R2,R2,#+24

⌨️ 快捷键说明

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