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

📄 ms_rbc.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000002   051C               MOV         R5,R0
    110            /* Fill the structure */
    111            if (mode_sense->allocation_length < sizeof(MODE_SENSE_PARAMETER))
   \   00000004   0079               LDRB        R0,[R0, #+4]
   \   00000006   ....               LDR         R1,??DataTable5    ;; usbms_context
   \   00000008   0C1C               MOV         R4,R1
   \   0000000A   B934               ADD         R4,#+185
   \   0000000C   1128               CMP         R0,#+17
   \   0000000E   01D2               BCS         ??rbc_mode_sense_0
    112            {
    113              usbms_context.mode_parameter_sense.mode_parameter_head.mode_data_length = (UCHAR)(mode_sense->allocation_length-sizeof(usbms_context.mode_parameter_sense.mode_parameter_head.mode_data_length));
   \   00000010   401E               SUB         R0,R0,#+1
   \   00000012   00E0               B           ??rbc_mode_sense_1
    114            }
    115            else
    116            {
    117              usbms_context.mode_parameter_sense.mode_parameter_head.mode_data_length = (UCHAR)(sizeof(MODE_SENSE_PARAMETER)-sizeof(usbms_context.mode_parameter_sense.mode_parameter_head.mode_data_length));
   \                     ??rbc_mode_sense_0:
   \   00000014   1020               MOV         R0,#+16
   \                     ??rbc_mode_sense_1:
   \   00000016   6070               STRB        R0,[R4, #+1]
    118            }
    119          
    120            usbms_context.mode_parameter_sense.mode_parameter_head.medium_type = 0;
   \   00000018   0020               MOV         R0,#+0
   \   0000001A   A070               STRB        R0,[R4, #+2]
    121            usbms_context.mode_parameter_sense.mode_parameter_head.device_specific_parameter=0;
   \   0000001C   E070               STRB        R0,[R4, #+3]
    122            usbms_context.mode_parameter_sense.mode_parameter_head.block_descriptor_length=0;
   \   0000001E   2071               STRB        R0,[R4, #+4]
    123          
    124            if( (mode_sense->page_code == 0x06)   /* Reserved */
    125              ||(mode_sense->page_code == 0x3F) ) /* Return all pages */
   \   00000020   AA78               LDRB        R2,[R5, #+2]
   \   00000022   081C               MOV         R0,R1
   \   00000024   BA30               ADD         R0,#+186
   \   00000026   3F23               MOV         R3,#+63
   \   00000028   3F26               MOV         R6,#+63
   \   0000002A   1640               AND         R6,R2
   \   0000002C   062E               CMP         R6,#+6
   \   0000002E   02D0               BEQ         ??rbc_mode_sense_2
   \   00000030   1340               AND         R3,R2
   \   00000032   3F2B               CMP         R3,#+63
   \   00000034   40D1               BNE         ??rbc_mode_sense_3
    126            {
    127              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.pageCode       = 0x06;
    128              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.reserved1      = 0x01;
   \                     ??rbc_mode_sense_2:
   \   00000036   6279               LDRB        R2,[R4, #+5]
   \   00000038   C023               MOV         R3,#+192
   \   0000003A   1340               AND         R3,R2
   \   0000003C   4622               MOV         R2,#+70
   \   0000003E   1A43               ORR         R2,R3
   \   00000040   6271               STRB        R2,[R4, #+5]
    129              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.pageLength     = 0x0b;
   \   00000042   0B22               MOV         R2,#+11
   \   00000044   A271               STRB        R2,[R4, #+6]
    130              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.writeCacheDisable = 0x01; /* entire command is treated */
   \   00000046   E279               LDRB        R2,[R4, #+7]
   \   00000048   0123               MOV         R3,#+1
   \   0000004A   1343               ORR         R3,R2
   \   0000004C   E371               STRB        R3,[R4, #+7]
    131          
    132              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.logicalBlockSize[0] = (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].BlockSize);
   \   0000004E   2278               LDRB        R2,[R4, #+0]
   \   00000050   3823               MOV         R3,#+56
   \   00000052   5A43               MUL         R2,R3
   \   00000054   8918               ADD         R1,R1,R2
   \   00000056   0A68               LDR         R2,[R1, #+0]
   \   00000058   2272               STRB        R2,[R4, #+8]
    133              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.logicalBlockSize[1] = (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].BlockSize>>8);
   \   0000005A   0A68               LDR         R2,[R1, #+0]
   \   0000005C   120A               LSR         R2,R2,#+8
   \   0000005E   6272               STRB        R2,[R4, #+9]
    134          
    135              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[0] =
    136                                                                  (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber>1)?
    137                                                                  (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber-1):0;
   \   00000060   4A68               LDR         R2,[R1, #+4]
   \   00000062   022A               CMP         R2,#+2
   \   00000064   01D3               BCC         ??rbc_mode_sense_4
   \   00000066   521E               SUB         R2,R2,#+1
   \   00000068   00E0               B           ??rbc_mode_sense_5
   \                     ??rbc_mode_sense_4:
   \   0000006A   0022               MOV         R2,#+0
   \                     ??rbc_mode_sense_5:
   \   0000006C   A272               STRB        R2,[R4, #+10]
    138              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[1] = (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber>>8);
   \   0000006E   4A68               LDR         R2,[R1, #+4]
   \   00000070   120A               LSR         R2,R2,#+8
   \   00000072   E272               STRB        R2,[R4, #+11]
    139              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[2] = (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber>>16);
   \   00000074   4A68               LDR         R2,[R1, #+4]
   \   00000076   120C               LSR         R2,R2,#+16
   \   00000078   2273               STRB        R2,[R4, #+12]
    140              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[3] = (UCHAR)(usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber>>24);
   \   0000007A   4968               LDR         R1,[R1, #+4]
   \   0000007C   090E               LSR         R1,R1,#+24
   \   0000007E   6173               STRB        R1,[R4, #+13]
    141              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[4] = 0x00;
   \   00000080   0021               MOV         R1,#+0
   \   00000082   A173               STRB        R1,[R4, #+14]
    142          
    143              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.powerPerformance  = 0x00; /* 0x00 energie, 0xFF perf */
   \   00000084   E173               STRB        R1,[R4, #+15]
    144              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.lockd   = 0x00;
    145              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.formatd = 0x00;
    146              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.writed  = 0x00;
    147              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.readd   = 0x00;
   \   00000086   217C               LDRB        R1,[R4, #+16]
   \   00000088   F022               MOV         R2,#+240
   \   0000008A   0A40               AND         R2,R1
   \   0000008C   2274               STRB        R2,[R4, #+16]
    148              usbms_context.mode_parameter_sense.mode_rbc_device_param_page.reserved4 = 0x00;
   \   0000008E   0021               MOV         R1,#+0
   \   00000090   6174               STRB        R1,[R4, #+17]
    149          
    150              /* Send the Mode Sense data, always the same zeroed struct */
    151              usb_send((char *)&usbms_context.mode_parameter_sense, min(sizeof(MODE_SENSE_PARAMETER),mode_sense->allocation_length));
   \   00000092   2979               LDRB        R1,[R5, #+4]
   \   00000094   1229               CMP         R1,#+18
   \   00000096   00D3               BCC         ??rbc_mode_sense_6
   \   00000098   1121               MOV         R1,#+17
   \                     ??rbc_mode_sense_6:
   \   0000009A   ........           _BLF        usb_send,??usb_send??rT
    152          
    153              /* update the CSW structure */
    154              if (mode_sense->allocation_length<sizeof(MODE_SENSE_PARAMETER))
   \   0000009E   2979               LDRB        R1,[R5, #+4]
   \   000000A0   1129               CMP         R1,#+17
   \   000000A2   01D2               BCS         ??rbc_mode_sense_7
    155              {
    156                ms_computeCSW(GOOD_STATUS,0);
   \   000000A4   0021               MOV         R1,#+0
   \   000000A6   00E0               B           ??rbc_mode_sense_8
    157              }
    158              else
    159              {
    160                ms_computeCSW(GOOD_STATUS,mode_sense->allocation_length-sizeof(MODE_SENSE_PARAMETER));
   \                     ??rbc_mode_sense_7:
   \   000000A8   1139               SUB         R1,#+17
   \                     ??rbc_mode_sense_8:
   \   000000AA   0020               MOV         R0,#+0
   \   000000AC   ........           _BLF        ms_computeCSW,??ms_computeCSW??rT
    161              }
    162              /* update the state */
    163              usbms_context.state = USB_SEND_NO_FLASH;
   \   000000B0   0320               MOV         R0,#+3
   \   000000B2   A076               STRB        R0,[R4, #+26]
    164            }
    165            else
    166            {
    167              usb_send((char *)&usbms_context.mode_parameter_sense.mode_parameter_head, sizeof(USBMS_MODE_PARAMETER_HEAD));
    168              /* We return an empty structure */
    169              /* Update the CSW */
    170              ms_computeCSW(GOOD_STATUS, mode_sense->allocation_length);
    171              /* update the state */
    172              usbms_context.state = USB_SEND_NO_FLASH;
    173            }
    174          
    175            TRACE_DEBUG_L( "blo 0 0x%X \n\r",    usbms_context.mode_parameter_sense.mode_rbc_device_param_page.logicalBlockSize[0]);
    176            TRACE_DEBUG_L( "blo 1 0x%X \n\r",    usbms_context.mode_parameter_sense.mode_rbc_device_param_page.logicalBlockSize[1]);
    177            TRACE_DEBUG_L( "nu lb 0  0x%X \n\r", usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[0]);
    178            TRACE_DEBUG_L( "nu lb 1  0x%X \n\r", usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[1]);
    179            TRACE_DEBUG_L( "nu lb 2  0x%X \n\r", usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[2]);
    180            TRACE_DEBUG_L( "nu lb 3  0x%X \n\r", usbms_context.mode_parameter_sense.mode_rbc_device_param_page.numberOfLogicalBlocks[3]);
    181          
    182            return USBMS_OK;
   \   000000B4   0020               MOV         R0,#+0
   \   000000B6   ....               B           ?Subroutine11
   \                     ??rbc_mode_sense_3:
   \   000000B8   0421               MOV         R1,#+4
   \   000000BA   ........           _BLF        usb_send,??usb_send??rT
   \   000000BE   2979               LDRB        R1,[R5, #+4]
   \   000000C0   F3E7               B           ??rbc_mode_sense_8
    183          }
    184          
    185          
    186          /*****************************************************************
    187          *
    188          * ROUTINE : rbc_prevent_allow_removal
    189          *
    190          *-----------------------------------------------------------------
    191          *
    192          * Purpose : processes the rbc PREVENT_ALLOW_REMOVAL command
    193          *
    194          * Input Parameters  : Structure defining the PREVENT_ALLOW_REMOVAL command
    195          *                     NO EFFECT
    196          *
    197          * Output Parameters : status of the operation
    198          *
    199          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    200          USBMS_RETURN rbc_prevent_allow_removal(void)
    201          {
    202            /* storing the removal capability  */
    203            /* usbms_context.usb_lun[usbms_context.current_lun].media_state = media_removal->prevent; */
    204            return USBMS_OK;
   \                     rbc_prevent_allow_removal:
   \   00000000   0020               MOV         R0,#+0
   \   00000002   7047               BX          LR                 ;; return
    205          }
    206          
    207          
    208          /*****************************************************************
    209          *
    210          * ROUTINE : rbc_start_stop_unit
    211          *
    212          *-----------------------------------------------------------------
    213          *
    214          * Purpose : processes the rbc START_STOP_UNIT command
    215          *
    216          * Input Parameters  : Structure defining the START_STOP_UNIT command
    217          *
    218          * Output Parameters : status of the operation
    219          *
    220          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    221          USBMS_RETURN rbc_start_stop_unit( USBMS_START_STOP_UNIT* start_stop_unit )
    222          {
    223            USBMS_RETURN status = USBMS_ERROR;
    224          
    225            if( start_stop_unit->Flags.bits0.Power_Conditions == 0 )
    226            {
    227              /* Table 9 - START STOP control bit definitions, rbc-r10a.pdf */
    228              /*   Power    Load/Eject START  Description            */
    229              /* Conditions                                          */
    230              /*   1 - 7       X         X    LOEJ and START ignored */
    231              /*     0         0         0    Stop the medium    */

⌨️ 快捷键说明

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