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

📄 fw_chap9.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    148                /* clear TX stall for IN on EPn. */
    149                USB_EVENT |= USB_EVENT_MASK_IN_STALL_CLEARED;
   \   0000003C   2025               MOV         R5,#+32
   \   0000003E   1D43               ORR         R5,R3
   \   00000040   1570               STRB        R5,[R2, #+0]
    150                /* Reset data toggle */
    151                AT91F_UDP_ResetEp( USBDEV_BASE_UDP, USBDEV_UDP_EP1 ); // FW_EP_BULK_IN
   \   00000042   0222               MOV         R2,#+2
   \   00000044   03E0               B           ??fw_clearFeature_3
    152              }
    153              else
    154              {
    155                /* clear RX stall for OUT on EPn. */
    156                USB_EVENT |= USB_EVENT_MASK_OUT_STALL_CLEARED;
   \                     ??fw_clearFeature_2:
   \   00000046   1025               MOV         R5,#+16
   \   00000048   1D43               ORR         R5,R3
   \   0000004A   1570               STRB        R5,[R2, #+0]
    157                /* Reset data toggle */
    158                AT91F_UDP_ResetEp( USBDEV_BASE_UDP, USBDEV_UDP_EP2 ); // FW_EP_BULK_OUT
   \   0000004C   0422               MOV         R2,#+4
   \                     ??fw_clearFeature_3:
   \   0000004E   0A60               STR         R2,[R1, #+0]
   \   00000050   0860               STR         R0,[R1, #+0]
    159              }
    160              AT91F_UDP_EnableEp( USBDEV_BASE_UDP,_endp );
   \   00000052   A000               LSL         R0,R4,#+2
   \   00000054   0F49               LDR         R1,??fw_clearFeature_1+0x4  ;; 0xfffb0000
   \   00000056   0818               ADD         R0,R1,R0
   \   00000058   016B               LDR         R1,[R0, #+48]
   \   0000005A   8022               MOV         R2,#+128
   \   0000005C   1202               LSL         R2,R2,#+8          ;; #+32768
   \   0000005E   0A43               ORR         R2,R1
   \   00000060   0263               STR         R2,[R0, #+48]
    161          
    162              fw_singleTransmit(0, 0);
   \                     ??fw_clearFeature_4:
   \   00000062   0021               MOV         R1,#+0
   \   00000064   0020               MOV         R0,#+0
   \   00000066   ........           BL          fw_singleTransmit
   \   0000006A   0EE0               B           ??fw_clearFeature_5
    163            }
    164            else
    165            {
    166              if(fw_controlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP)
   \                     ??fw_clearFeature_0:
   \   0000006C   0128               CMP         R0,#+1
   \   0000006E   04D1               BNE         ??fw_clearFeature_6
    167              {
    168                stallEndpointStatus &= ~(1<<4);
   \   00000070   3078               LDRB        R0,[R6, #+0]
   \   00000072   EF21               MOV         R1,#+239
   \   00000074   0140               AND         R1,R0
   \   00000076   3170               STRB        R1,[R6, #+0]
    169                fw_singleTransmit(0, 0);
   \   00000078   F3E7               B           ??fw_clearFeature_4
    170              }
    171              else
    172              {
    173                TRACE_DEBUG_H( "stall\n\r");
    174                fw_stallEp0();
   \                     ??fw_clearFeature_6:
   \   0000007A   0121               MOV         R1,#+1
   \   0000007C   0020               MOV         R0,#+0
   \   0000007E   ........           _BLF        fw_setEndpointStatus,??fw_setEndpointStatus??rT
    175                stallEndpointStatus &= ~(1<<FW_EP_CTRL);
   \   00000082   3078               LDRB        R0,[R6, #+0]
   \   00000084   FE21               MOV         R1,#+254
   \   00000086   0140               AND         R1,R0
   \   00000088   3170               STRB        R1,[R6, #+0]
    176              }
    177            }
    178          }
   \                     ??fw_clearFeature_5:
   \   0000008A   70BC               POP         {R4-R6}
   \   0000008C   01BC               POP         {R0}
   \   0000008E   0047               BX          R0                 ;; return
   \                     ??fw_clearFeature_1:
   \   00000090   2800FBFF           DC32        0xfffb0028
   \   00000094   0000FBFF           DC32        0xfffb0000
    179          
    180          
    181          /*****************************************************************
    182          *
    183          * ROUTINE     fw_getConfiguration
    184          *
    185          *-----------------------------------------------------------------
    186          *
    187          * Purpose :
    188          *   9.4.2 Get Configuration ( GET_CONFIGURATION )
    189          *   This request returns the current device configuration value.
    190          *
    191          * Input parameters : NONE
    192          *
    193          * Output parameters : NONE
    194          *
    195          * Global data : fw_deviceState : bitmap for different device caracteristics
    196          *
    197          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    198          void fw_getConfiguration(void)
    199          {
   \                     fw_getConfiguration:
   \   00000000   01B5               PUSH        {R0,LR}
    200            UCHAR _c = fw_deviceState & FW_DS_CONFIG; /* only one configuration */
   \   00000002   6846               MOV         R0,SP
   \   00000004   ....               LDR         R1,??DataTable13   ;; fw_deviceState
   \   00000006   0978               LDRB        R1,[R1, #+0]
   \   00000008   0122               MOV         R2,#+1
   \   0000000A   0A40               AND         R2,R1
   \   0000000C   0270               STRB        R2,[R0, #+0]
    201          
    202            TRACE_DEBUG_H( "getConf\n\r");
    203            fw_singleTransmit(&_c, 1);
   \   0000000E   ....               B           ?Subroutine15
    204          }

   \                                 In segment CODE, align 4, keep-with-next
   \                     ?Subroutine15:
   \   00000000   0121               MOV         R1,#+1
   \   00000002   ........           BL          fw_singleTransmit
   \   00000006   08BC               POP         {R3}
   \   00000008   01BC               POP         {R0}
   \   0000000A   0047               BX          R0                 ;; return
    205          
    206          
    207          /*****************************************************************
    208          *
    209          * ROUTINE     fw_getDescriptor
    210          *
    211          *-----------------------------------------------------------------
    212          *
    213          * Purpose :
    214          *   9.4.3 Get Descriptor ( GET_DESCRIPTOR )
    215          *   This request returns the specified descriptor if the descriptor exists.
    216          *
    217          * Input parameters : NONE
    218          *
    219          * Output parameters : NONE
    220          *
    221          * Global data : fw_device
    222          *   fw_config
    223          *   fw_controlData : request to be processed
    224          *
    225          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    226          void fw_getDescriptor(void)
    227          {
   \                     fw_getDescriptor:
   \   00000000   00B5               PUSH        {LR}
    228            UCHAR _bDescriptor = fw_controlData.DeviceRequest.wValue >> 8;
   \   00000002   ....               LDR         R0,??DataTable7    ;; fw_controlData + 2
   \   00000004   0088               LDRH        R0,[R0, #+0]
   \   00000006   010A               LSR         R1,R0,#+8
    229          
    230            if (_bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
   \   00000008   0848               LDR         R0,??fw_getDescriptor_0  ;; fw_device
   \   0000000A   0129               CMP         R1,#+1
   \   0000000C   03D1               BNE         ??fw_getDescriptor_1
    231            {
    232              fw_codeTransmit((UCHAR *)&fw_device, sizeof(USB_DEVICE_DESCRIPTOR));
   \   0000000E   1221               MOV         R1,#+18
   \                     ??fw_getDescriptor_2:
   \   00000010   ........           BL          fw_codeTransmit
   \   00000014   08E0               B           ??fw_getDescriptor_3
    233            }
    234            else
    235            {
    236              if (_bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE)
   \                     ??fw_getDescriptor_1:
   \   00000016   0229               CMP         R1,#+2
   \   00000018   02D1               BNE         ??fw_getDescriptor_4
    237              {
    238                fw_codeTransmit((UCHAR *)&fw_config, sizeof(FW_FULL_CONFIG_DESCRIPTOR));
   \   0000001A   2021               MOV         R1,#+32
   \   0000001C   1430               ADD         R0,#+20
   \   0000001E   F7E7               B           ??fw_getDescriptor_2
    239              }
    240              else
    241              {
    242                TRACE_ERROR( "stalled\n\r");
    243                fw_stallEp0();
   \                     ??fw_getDescriptor_4:
   \   00000020   0121               MOV         R1,#+1
   \   00000022   0020               MOV         R0,#+0
   \   00000024   ........           _BLF        fw_setEndpointStatus,??fw_setEndpointStatus??rT
    244              }
    245            }
    246          }
   \                     ??fw_getDescriptor_3:
   \   00000028   01BC               POP         {R0}
   \   0000002A   0047               BX          R0                 ;; return
   \                     ??fw_getDescriptor_0:
   \   0000002C   ........           DC32        fw_device
    247          
    248          
    249          /*****************************************************************
    250          *
    251          * ROUTINE     fw_getInterface
    252          *
    253          *-----------------------------------------------------------------
    254          *
    255          * Purpose :
    256          *   9.4.4 Get Interface ( GET_INTERFACE )
    257          *   This request returns the selected alternate setting for the specified interface.
    258          *
    259          * Input parameters : NONE
    260          *
    261          * Output parameters : NONE
    262          *
    263          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    264          void fw_getInterface(void)
    265          {
   \                     fw_getInterface:
   \   00000000   01B5               PUSH        {R0,LR}
    266            UCHAR _txdat = 0;        /* Only one alternate settings per interface = 0 */
   \   00000002   6846               MOV         R0,SP
   \   00000004   0021               MOV         R1,#+0
   \   00000006   0170               STRB        R1,[R0, #+0]
    267          
    268            TRACE_DEBUG_H( "getInt\n\r");
    269            fw_singleTransmit(&_txdat, 1);
   \   00000008                      REQUIRE ?Subroutine15
   \   00000008                      ;; // Fall through to label ?Subroutine15
    270          }
    271          
    272          
    273          /*****************************************************************
    274          *
    275          * ROUTINE     fw_getStatus
    276          *
    277          *-----------------------------------------------------------------
    278          *
    279          * Purpose :
    280          *   9.4.5 Get Status ( GET_STATUS )
    281          *   This request returns status for the specified recipient.
    282          *

⌨️ 快捷键说明

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