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

📄 fw_epmg.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000038   ........           _BLF        fw_writeEndpoint,??fw_writeEndpoint??rT
    237                  fw_controlData.wCount += _i;
   \   0000003C   6089               LDRH        R0,[R4, #+10]
   \   0000003E   4019               ADD         R0,R0,R5
   \   00000040   6081               STRH        R0,[R4, #+10]
    238                  fw_controlData.state = FW_STATE_END;
   \   00000042   04E0               B           ??fw_ep0TxDone_3
    239                  fw_controlData.pData = NULL;
    240                }
    241                else
    242                {
    243                  fw_writeEndpoint(FW_EP_CTRL, 0, 0); /* Send zero packet at the end */
   \                     ??fw_ep0TxDone_2:
   \   00000044   0022               MOV         R2,#+0
   \   00000046   311C               MOV         R1,R6
   \   00000048   301C               MOV         R0,R6
   \   0000004A   ........           _BLF        fw_writeEndpoint,??fw_writeEndpoint??rT
    244                  fw_controlData.state = FW_STATE_END;
   \                     ??fw_ep0TxDone_3:
   \   0000004E   2673               STRB        R6,[R4, #+12]
    245                  fw_controlData.pData = NULL;
   \   00000050   2661               STR         R6,[R4, #+16]
    246                }
    247              }
    248            }
    249          }
   \                     ??fw_ep0TxDone_0:
   \   00000052   70BC               POP         {R4-R6}
   \   00000054   01BC               POP         {R0}
   \   00000056   0047               BX          R0                 ;; return
    250          
    251          
    252          /*****************************************************************
    253          *
    254          * ROUTINE         fw_ep0RxTxDone
    255          *
    256          *-----------------------------------------------------------------
    257          *
    258          * Purpose :
    259          *         called when something must be handled on EP0
    260          *
    261          * Input parameters  : NONE
    262          *
    263          * Output parameters : NONE
    264          *
    265          * Global data : fw_controlData : request to be processed
    266          *
    267          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    268          void fw_ep0RxTxDone(void)
    269          {
   \                     fw_ep0RxTxDone:
   \   00000000   F3B5               PUSH        {R0,R1,R4-R7,LR}
    270            USHORT _i = fw_controlData.wLength - fw_controlData.wCount;
   \   00000002   ....               LDR         R4,??DataTable4    ;; fw_controlData
   \   00000004   2089               LDRH        R0,[R4, #+8]
   \   00000006   6189               LDRH        R1,[R4, #+10]
   \   00000008   471A               SUB         R7,R0,R1
   \   0000000A   3F04               LSL         R7,R7,#+16
   \   0000000C   3F0C               LSR         R7,R7,#+16
    271          
    272            UCHAR _buff[8];
    273          
    274            if(fw_IsSetupPacket(FW_EP_CTRL) != 0)
   \   0000000E   0020               MOV         R0,#+0
   \   00000010   ........           _BLF        fw_IsSetupPacket,??fw_IsSetupPacket??rT
   \   00000014   0028               CMP         R0,#+0
   \   00000016   2AD0               BEQ         ??fw_ep0RxTxDone_0
    275            {
    276              fw_controlData.wLength = 0;
   \   00000018   0020               MOV         R0,#+0
   \   0000001A   A060               STR         R0,[R4, #+8]
    277              fw_controlData.wCount = 0;
    278          
    279              _i = fw_readEndpoint(FW_EP_CTRL,(UCHAR *)(&(fw_controlData.DeviceRequest)));
   \   0000001C   211C               MOV         R1,R4
   \   0000001E   ........           _BLF        fw_readEndpoint,??fw_readEndpoint??rT
   \   00000022   0704               LSL         R7,R0,#+16
   \   00000024   3F0C               LSR         R7,R7,#+16
    280              // if the data are not valid
    281              if(_i == 0)
   \   00000026   05D1               BNE         ??fw_ep0RxTxDone_1
    282              {
    283                _i = fw_readEndpoint(FW_EP_CTRL,(UCHAR *)(&(fw_controlData.DeviceRequest)));
   \   00000028   211C               MOV         R1,R4
   \   0000002A   0020               MOV         R0,#+0
   \   0000002C   ........           _BLF        fw_readEndpoint,??fw_readEndpoint??rT
   \   00000030   0704               LSL         R7,R0,#+16
   \   00000032   3F0C               LSR         R7,R7,#+16
    284              }
    285          
    286              if(_i != sizeof(FW_DEVICE_REQUEST))
   \                     ??fw_ep0RxTxDone_1:
   \   00000034   082F               CMP         R7,#+8
   \   00000036   03D0               BEQ         ??fw_ep0RxTxDone_2
    287              {
    288                fw_acknowledgeSetup(FW_EP_CTRL);
   \   00000038   0020               MOV         R0,#+0
   \   0000003A   ........           _BLF        fw_acknowledgeSetup,??fw_acknowledgeSetup??rT
    289                return;
   \   0000003E   60E0               B           ??fw_ep0RxTxDone_3
    290              }
    291          
    292              /* Acknowledge setup here to unlock in/out endp */
    293              if(fw_controlData.DeviceRequest.bmRequestType & 0x80)
   \                     ??fw_ep0RxTxDone_2:
   \   00000040   2078               LDRB        R0,[R4, #+0]
   \   00000042   0006               LSL         R0,R0,#+24
   \   00000044   01D5               BPL         ??fw_ep0RxTxDone_4
    294              {
    295                fw_changedir(FW_DEVICE_TO_HOST);
   \   00000046   0120               MOV         R0,#+1
   \   00000048   00E0               B           ??fw_ep0RxTxDone_5
    296              }
    297              else
    298              {
    299                fw_changedir(FW_HOST_TO_DEVICE);
   \                     ??fw_ep0RxTxDone_4:
   \   0000004A   0020               MOV         R0,#+0
   \                     ??fw_ep0RxTxDone_5:
   \   0000004C   ........           _BLF        fw_changedir,??fw_changedir??rT
    300              }
    301              fw_acknowledgeSetup(FW_EP_CTRL);
   \   00000050   0020               MOV         R0,#+0
   \   00000052   ........           _BLF        fw_acknowledgeSetup,??fw_acknowledgeSetup??rT
    302          
    303              fw_controlData.wLength = fw_controlData.DeviceRequest.wLength;
   \   00000056   E088               LDRH        R0,[R4, #+6]
   \   00000058   2081               STRH        R0,[R4, #+8]
    304              fw_controlData.wCount = 0;
   \   0000005A   0020               MOV         R0,#+0
   \   0000005C   6081               STRH        R0,[R4, #+10]
    305              fw_controlData.state = FW_STATE_START;
   \   0000005E   0120               MOV         R0,#+1
   \   00000060   2073               STRB        R0,[R4, #+12]
    306              fw_deviceState |= FW_DS_SETUP;
   \   00000062   ....               LDR         R0,??DataTable8    ;; fw_deviceState
   \   00000064   0178               LDRB        R1,[R0, #+0]
   \   00000066   0422               MOV         R2,#+4
   \   00000068   0A43               ORR         R2,R1
   \   0000006A   0270               STRB        R2,[R0, #+0]
   \   0000006C   49E0               B           ??fw_ep0RxTxDone_3
    307          
    308            }
    309            else
    310            {
    311              // Data or Status phase
    312              if(fw_controlData.state == FW_STATE_START)
   \                     ??fw_ep0RxTxDone_0:
   \   0000006E   0225               MOV         R5,#+2
   \   00000070   254E               LDR         R6,??fw_ep0RxTxDone_6  ;; 0xfffb0030
   \   00000072   207B               LDRB        R0,[R4, #+12]
   \   00000074   0128               CMP         R0,#+1
   \   00000076   3068               LDR         R0,[R6, #+0]
   \   00000078   3DD1               BNE         ??fw_ep0RxTxDone_7
    313              {
    314                if( AT91F_UDP_EpStatus( USBDEV_BASE_UDP, FW_EP_CTRL ) &  USBDEV_UDP_TXCOMP )     // Data sent to host
   \   0000007A   C007               LSL         R0,R0,#+31
   \   0000007C   20D5               BPL         ??fw_ep0RxTxDone_8
    315                {
    316                  // Send the next packet
    317                  _i = fw_writeEndpoint(FW_EP_CTRL, fw_controlData.pData + fw_controlData.wCount,
    318                  min(FW_EP0_MAXPACKET_SIZE,(fw_controlData.wLength - fw_controlData.wCount)));
   \   0000007E   6189               LDRH        R1,[R4, #+10]
   \   00000080   081C               MOV         R0,R1
   \   00000082   2289               LDRH        R2,[R4, #+8]
   \   00000084   531A               SUB         R3,R2,R1
   \   00000086   092B               CMP         R3,#+9
   \   00000088   01DB               BLT         ??fw_ep0RxTxDone_9
   \   0000008A   0822               MOV         R2,#+8
   \   0000008C   00E0               B           ??fw_ep0RxTxDone_10
   \                     ??fw_ep0RxTxDone_9:
   \   0000008E   521A               SUB         R2,R2,R1
   \                     ??fw_ep0RxTxDone_10:
   \   00000090   1206               LSL         R2,R2,#+24
   \   00000092   120E               LSR         R2,R2,#+24
   \   00000094   2169               LDR         R1,[R4, #+16]
   \   00000096   0918               ADD         R1,R1,R0
   \   00000098   0020               MOV         R0,#+0
   \   0000009A   ........           _BLF        fw_writeEndpoint,??fw_writeEndpoint??rT
   \   0000009E   0704               LSL         R7,R0,#+16
   \   000000A0   3F0C               LSR         R7,R7,#+16
    319                  if((_i == 0) && (fw_controlData.wLength - fw_controlData.wCount != 0))
   \   000000A2   03D1               BNE         ??fw_ep0RxTxDone_11
   \   000000A4   2089               LDRH        R0,[R4, #+8]
   \   000000A6   6189               LDRH        R1,[R4, #+10]
   \   000000A8   401A               SUB         R0,R0,R1
   \   000000AA   09D1               BNE         ??fw_ep0RxTxDone_8
    320                  {
    321                  }
    322                  else
    323                  {
    324                    if((fw_controlData.wLength - fw_controlData.wCount) < FW_EP0_MAXPACKET_SIZE) /* No more Data to transmit */
   \                     ??fw_ep0RxTxDone_11:
   \   000000AC   6089               LDRH        R0,[R4, #+10]
   \   000000AE   2189               LDRH        R1,[R4, #+8]
   \   000000B0   091A               SUB         R1,R1,R0
   \   000000B2   0829               CMP         R1,#+8
   \   000000B4   02DA               BGE         ??fw_ep0RxTxDone_12
    325                    {
    326                      fw_controlData.state = FW_STATE_END;
   \   000000B6   0021               MOV         R1,#+0
   \   000000B8   2173               STRB        R1,[R4, #+12]
    327                      fw_controlData.pData = NULL;
   \   000000BA   2161               STR         R1,[R4, #+16]
    328                    }
    329                    fw_controlData.wCount += _i;
   \                     ??fw_ep0RxTxDone_12:
   \   000000BC   C019               ADD         R0,R0,R7
   \   000000BE   6081               STRH        R0,[R4, #+10]
    330                  }
    331                }
    332          
    333                if( AT91F_UDP_EpStatus( USBDEV_BASE_UDP, FW_EP_CTRL ) & USBDEV_UDP_RX_DATA_BK0 )  // Data received
   \                     ??fw_ep0RxTxDone_8:
   \   000000C0   3068               LDR         R0,[R6, #+0]
   \   000000C2   2842               TST         R0,R5
   \   000000C4   1DD0               BEQ         ??fw_ep0RxTxDone_3
    334                {
    335                  USHORT _Read = 0;
    336          
    337                  /* if the size of the transfer is longer than the max packet */
    338                  if( _i >= FW_EP0_MAXPACKET_SIZE)
   \   000000C6   6089               LDRH        R0,[R4, #+10]
   \   000000C8   2169               LDR         R1,[R4, #+16]
   \   000000CA   0918               ADD         R1,R1,R0
   \   000000CC   082F               CMP         R7,#+8
   \   000000CE   08D3               BCC         ??fw_ep0RxTxDone_13
    339                  {
    340                    _Read = fw_readEndpoint(FW_EP_CTRL, fw_controlData.pData + fw_controlData.wCount);
   \   000000D0   0020               MOV         R0,#+0
   \   000000D2   ........           _BLF        fw_readEndpoint,??fw_readEndpoint??rT
    341          
    342                    if (_Read == 0)
   \   000000D6   0004               LSL         R0,R0,#+16
   \   000000D8   08D0               BEQ         ??fw_ep0RxTxDone_14
    343                    {
    344                      // End of SetupPhase
    345                      goto EOSP;
    346                    }

⌨️ 快捷键说明

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