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

📄 fw_chap9.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    283          * Input parameters : NONE
    284          *
    285          * Output parameters : NONE
    286          *
    287          * Global data : fw_controlData : request to be processed
    288          *
    289          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    290          void fw_getStatus(void)
    291          {
   \                     fw_getStatus:
   \   00000000   11B5               PUSH        {R0,R4,LR}
    292            UCHAR _endp = 0, _txdat[2];
    293            UCHAR _bRecipient = fw_controlData.DeviceRequest.bmRequestType & FW_USB_RECIPIENT;
    294            /* UCHAR _c = 0; */
    295          
    296            TRACE_DEBUG_H( "fw_getStatus\n\r");
    297            switch(_bRecipient)
   \   00000002   ....               LDR         R0,??DataTable11   ;; stallEndpointStatus
   \   00000004   0078               LDRB        R0,[R0, #+0]
   \   00000006   0021               MOV         R1,#+0
   \   00000008   0322               MOV         R2,#+3
   \   0000000A   ....               LDR         R3,??DataTable12   ;; fw_controlData
   \   0000000C   1C78               LDRB        R4,[R3, #+0]
   \   0000000E   E406               LSL         R4,R4,#+27
   \   00000010   E40E               LSR         R4,R4,#+27
   \   00000012   04D0               BEQ         ??fw_getStatus_0
   \   00000014   012C               CMP         R4,#+1
   \   00000016   0ED0               BEQ         ??fw_getStatus_1
   \   00000018   022C               CMP         R4,#+2
   \   0000001A   0FD0               BEQ         ??fw_getStatus_2
   \   0000001C   1BE0               B           ??fw_getStatus_3
    298            {
    299              case FW_USB_RECIPIENT_DEVICE:
    300                // A GetStatus() request to a device returns the information shown in Figure 9-4.
    301                // DO=1 : Self powered
    302                // D1=1 : Remote Wakeup
    303                _txdat[0] = 0; /* bus powered */
   \                     ??fw_getStatus_0:
   \   0000001E   6B46               MOV         R3,SP
   \   00000020   1970               STRB        R1,[R3, #+0]
    304                if( (stallEndpointStatus&(1<<4)) == (1<<4) )
   \   00000022   C006               LSL         R0,R0,#+27
   \   00000024   01D5               BPL         ??fw_getStatus_4
    305                {
    306                  _txdat[0] = 3; /* remote wakeup */  // jcb
   \   00000026   6846               MOV         R0,SP
   \                     ??fw_getStatus_5:
   \   00000028   0270               STRB        R2,[R0, #+0]
    307                }
    308                _txdat[1] = 0;
   \                     ??fw_getStatus_4:
   \   0000002A   6846               MOV         R0,SP
   \   0000002C   4170               STRB        R1,[R0, #+1]
    309                fw_singleTransmit(_txdat, 2);
   \   0000002E   0221               MOV         R1,#+2
   \   00000030   ........           BL          fw_singleTransmit
   \   00000034   13E0               B           ??fw_getStatus_6
    310              break;
    311          
    312              case FW_USB_RECIPIENT_INTERFACE:
    313                // A GetStatus() request to an interface returns the information shown in Figure 9-5.
    314                // All are set to 0
    315                _txdat[0]=0;
   \                     ??fw_getStatus_1:
   \   00000036   6846               MOV         R0,SP
   \   00000038   0170               STRB        R1,[R0, #+0]
   \   0000003A   F6E7               B           ??fw_getStatus_4
    316                _txdat[1]=0;
    317                fw_singleTransmit(_txdat, 2);
    318              break;
    319          
    320              case FW_USB_RECIPIENT_ENDPOINT:
    321                // A GetStatus() request to an endpoint returns the information shown in Figure 9-6.
    322                // D0=1 : HALT
    323                _endp = (UCHAR)(fw_controlData.DeviceRequest.wIndex & (FW_EP_CTRL | FW_EP_BULK_IN | FW_EP_BULK_OUT));
   \                     ??fw_getStatus_2:
   \   0000003C   9B88               LDRH        R3,[R3, #+4]
   \   0000003E   1A40               AND         R2,R3
    324                _txdat[0] = 0;
   \   00000040   6B46               MOV         R3,SP
   \   00000042   1970               STRB        R1,[R3, #+0]
    325                if( (1<<_endp) == (stallEndpointStatus&(1<<_endp)) )
   \   00000044   0123               MOV         R3,#+1
   \   00000046   9340               LSL         R3,R2
   \   00000048   1A1C               MOV         R2,R3
   \   0000004A   0240               AND         R2,R0
   \   0000004C   9342               CMP         R3,R2
   \   0000004E   ECD1               BNE         ??fw_getStatus_4
    326                {
    327                  _txdat[0] = 1;
   \   00000050   6846               MOV         R0,SP
   \   00000052   0122               MOV         R2,#+1
   \   00000054   E8E7               B           ??fw_getStatus_5
    328                }
    329                _txdat[1] = 0;
    330                fw_singleTransmit(_txdat, 2);
    331              break;
    332          
    333              default:
    334                TRACE_DEBUG_H( "getSt:default\n\r");
    335                fw_stallEp0();
   \                     ??fw_getStatus_3:
   \   00000056   0121               MOV         R1,#+1
   \   00000058   0020               MOV         R0,#+0
   \   0000005A   ........           _BLF        fw_setEndpointStatus,??fw_setEndpointStatus??rT
    336            }
    337          }
   \                     ??fw_getStatus_6:
   \   0000005E   18BC               POP         {R3,R4}
   \   00000060   01BC               POP         {R0}
   \   00000062   0047               BX          R0                 ;; return
    338          
    339          
    340          /*****************************************************************
    341          *
    342          * ROUTINE     fw_setAddress
    343          *
    344          *-----------------------------------------------------------------
    345          *
    346          * Purpose :
    347          *   9.4.6 Set Address ( SET_ADDRESS )
    348          *   This request sets the device address for all future device accesses.
    349          *
    350          * Input parameters : NONE
    351          *
    352          * Output parameters : NONE
    353          *
    354          * Global data : fw_controlData : request to be processed
    355          *
    356          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    357          void fw_setAddress(void)
    358          {
   \                     fw_setAddress:
   \   00000000   00B5               PUSH        {LR}
    359            fw_singleTransmit(0,0);
   \   00000002   0021               MOV         R1,#+0
   \   00000004   0020               MOV         R0,#+0
   \   00000006   ........           BL          fw_singleTransmit
    360          
    361            fw_AskValidateAddress = fw_controlData.DeviceRequest.wValue & FW_DEVICE_ADDRESS_MASK;
   \   0000000A   0448               LDR         R0,??fw_setAddress_0  ;; fw_AskValidateAddress
   \   0000000C   ....               LDR         R1,??DataTable7    ;; fw_controlData + 2
   \   0000000E   0988               LDRH        R1,[R1, #+0]
   \   00000010   4906               LSL         R1,R1,#+25
   \   00000012   490E               LSR         R1,R1,#+25
   \   00000014   0170               STRB        R1,[R0, #+0]
    362          }
   \   00000016   01BC               POP         {R0}
   \   00000018   0047               BX          R0                 ;; return
   \   0000001A   C046               NOP         
   \                     ??fw_setAddress_0:
   \   0000001C   ........           DC32        fw_AskValidateAddress
    363          
    364          
    365          /*****************************************************************
    366          *
    367          * ROUTINE   fw_setConfiguration
    368          *
    369          *-----------------------------------------------------------------
    370          *
    371          * Purpose :
    372          *   9.4.7 Set Configuration ( SET_CONFIGURATION )
    373          *   This request sets the device configuration.
    374          *
    375          * Input parameters : NONE
    376          *
    377          * Output parameters : NONE
    378          *
    379          * Global data : fw_controlData : request to be processed
    380          *   fw_device_state : bitmap for different device caracteristics
    381          *
    382          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    383          void fw_setConfiguration(void)
    384          {
   \                     fw_setConfiguration:
   \   00000000   F0B5               PUSH        {R4-R7,LR}
    385            int _i = 0;
   \   00000002   0024               MOV         R4,#+0
   \   00000004   2448               LDR         R0,??fw_setConfiguration_0  ;; fw_controlData + 2
   \   00000006   0088               LDRH        R0,[R0, #+0]
   \   00000008   ....               LDR         R5,??DataTable13   ;; fw_deviceState
   \   0000000A   244E               LDR         R6,??fw_setConfiguration_0+0x4  ;; 0xfffb0004
   \   0000000C   244F               LDR         R7,??fw_setConfiguration_0+0x8  ;; 0xfffb0030
   \   0000000E   0028               CMP         R0,#+0
   \   00000010   17D1               BNE         ??fw_setConfiguration_1
    386          
    387            if (fw_controlData.DeviceRequest.wValue == 0)
    388            {
    389              /* status phase */
    390              fw_singleTransmit(0, 0);
   \   00000012   0021               MOV         R1,#+0
   \   00000014   201C               MOV         R0,R4
   \   00000016   ........           BL          fw_singleTransmit
    391          
    392              while( !( AT91F_UDP_EpStatus( USBDEV_BASE_UDP, FW_EP_CTRL ) & USBDEV_UDP_TXCOMP )
    393              && (_i++ < 10));
   \                     ??fw_setConfiguration_2:
   \   0000001A   3868               LDR         R0,[R7, #+0]
   \   0000001C   C007               LSL         R0,R0,#+31
   \   0000001E   03D4               BMI         ??fw_setConfiguration_3
   \   00000020   201C               MOV         R0,R4
   \   00000022   641C               ADD         R4,R4,#+1
   \   00000024   0A28               CMP         R0,#+10
   \   00000026   F8DB               BLT         ??fw_setConfiguration_2
    394          
    395          #ifndef AT91SAM9265
    396                USBDEV_BASE_UDP->UDP_GLBSTATE &= ~USBDEV_UDP_CONFG;
   \                     ??fw_setConfiguration_3:
   \   00000028   3068               LDR         R0,[R6, #+0]
   \   0000002A   0221               MOV         R1,#+2
   \   0000002C   8843               BIC         R0,R1
   \   0000002E   3060               STR         R0,[R6, #+0]
    397          #else
    398                USBDEV_BASE_UDP->UDPHS_CTRL &= ~AT91C_EN_USB;
    399          #endif
    400          
    401              /* mark the device as unconfigured */
    402              fw_deviceState = (UCHAR)~FW_DS_CONFIG;
   \   00000030   FE20               MOV         R0,#+254
   \   00000032   2870               STRB        R0,[R5, #+0]
    403          
    404              /* Disable all endpoints but EPP0. */
    405              fw_resetEP(FW_EP_BULK_IN);
   \   00000034   0120               MOV         R0,#+1
   \   00000036   ........           _BLF        fw_resetEP,??fw_resetEP??rT
    406              fw_resetEP(FW_EP_BULK_OUT);
   \   0000003A   0220               MOV         R0,#+2
   \   0000003C   ........           _BLF        fw_resetEP,??fw_resetEP??rT
   \   00000040   27E0               B           ??fw_setConfiguration_4
    407            }
    408            else
    409            {
    410              if (fw_controlData.DeviceRequest.wValue == 1)
   \                     ??fw_setConfiguration_1:
   \   00000042   0128               CMP         R0,#+1

⌨️ 快捷键说明

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