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

📄 ms_rbc.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    232              /*     0         0         1    Make medium ready  */
    233              /*     0         1         0    Unload medium      */
    234              /*     0         1         1    Load medium        */
    235              if( start_stop_unit->Flags.bits0.Start == 0 )
    236              {
    237                if( start_stop_unit->Flags.bits0.Load_Eject == 0 )
    238                {
    239                  /* Stop the medium */
    240                }
    241                else
    242                {
    243                  /* Make medium ready */
    244                }
    245              }
    246              else
    247              {
    248                if( start_stop_unit->Flags.bits0.Load_Eject == 0 )
    249                {
    250                  /* Unload medium */
    251                }
    252                else
    253                {
    254                  /* Load medium */
    255                }
    256              }
    257            }
    258            else
    259            {
    260              if( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_ACTIVE )
    261              {
    262                /* M No change in power condition. */
    263              }
    264              else
    265              {
    266                if( ( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_IDLE )
    267                 || ( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_STDBY )
    268                 || ( start_stop_unit->Flags.bits0.Power_Conditions == POWCOND_SLEEP ) )
    269                {
    270                  /* lower power */
    271                }
    272                else
    273                {
    274                  /* Reserved or Device Control */
    275                }
    276              }
    277            }
    278            status = USBMS_OK;
    279            return status;
   \                     rbc_start_stop_unit:
   \   00000000   0020               MOV         R0,#+0
   \   00000002   7047               BX          LR                 ;; return
    280          }
    281          
    282          
    283          /*****************************************************************
    284          *
    285          * ROUTINE : rbc_read_capacity
    286          *
    287          *-----------------------------------------------------------------
    288          *
    289          * Purpose : processes the rbc READ_CAPACITY command
    290          *
    291          * Input Parameters  : Structure defining the READ_CAPACITY command
    292          *
    293          * Output Parameters : status of the operation
    294          *
    295          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    296          USBMS_RETURN rbc_read_capacity(void)
    297          {
   \                     rbc_read_capacity:
   \   00000000   10B5               PUSH        {R4,LR}
    298            ULONG  _last_block_nmb;
    299            USHORT _block_size;
    300          
    301            /* fill the read capability structure */
    302            _last_block_nmb = usbms_context.usb_lun[usbms_context.current_lun].TotBlockNumber-1;
   \   00000002   ....               LDR         R0,??DataTable5    ;; usbms_context
   \   00000004   041C               MOV         R4,R0
   \   00000006   B934               ADD         R4,#+185
   \   00000008   2178               LDRB        R1,[R4, #+0]
   \   0000000A   3822               MOV         R2,#+56
   \   0000000C   5143               MUL         R1,R2
   \   0000000E   4118               ADD         R1,R0,R1
   \   00000010   4A68               LDR         R2,[R1, #+4]
   \   00000012   521E               SUB         R2,R2,#+1
    303          
    304            _block_size = usbms_context.usb_lun[usbms_context.current_lun].BlockSize;
   \   00000014   0968               LDR         R1,[R1, #+0]
   \   00000016   0904               LSL         R1,R1,#+16
   \   00000018   090C               LSR         R1,R1,#+16
    305          
    306            usbms_context.read_capacity_data.block_address_0 = (UCHAR)(_last_block_nmb);
   \   0000001A   6275               STRB        R2,[R4, #+21]
    307            usbms_context.read_capacity_data.block_address_1 = (UCHAR)(_last_block_nmb>>8);
   \   0000001C   130A               LSR         R3,R2,#+8
   \   0000001E   2375               STRB        R3,[R4, #+20]
    308            usbms_context.read_capacity_data.block_address_2 = (UCHAR)(_last_block_nmb>>16);
   \   00000020   130C               LSR         R3,R2,#+16
   \   00000022   E374               STRB        R3,[R4, #+19]
    309            usbms_context.read_capacity_data.block_address_3 = (UCHAR)(_last_block_nmb>>24);
   \   00000024   120E               LSR         R2,R2,#+24
   \   00000026   A274               STRB        R2,[R4, #+18]
    310            usbms_context.read_capacity_data.block_len_0     = (UCHAR)(_block_size);
   \   00000028   6176               STRB        R1,[R4, #+25]
    311            usbms_context.read_capacity_data.block_len_1     = (UCHAR)(_block_size>>8);
   \   0000002A   090A               LSR         R1,R1,#+8
   \   0000002C   2176               STRB        R1,[R4, #+24]
    312            usbms_context.read_capacity_data.block_len_2     = 0;
   \   0000002E   0021               MOV         R1,#+0
   \   00000030   E175               STRB        R1,[R4, #+23]
    313            usbms_context.read_capacity_data.block_len_3     = 0;
   \   00000032   A175               STRB        R1,[R4, #+22]
    314          
    315            TRACE_DEBUG_L( "RC:dba0 0x%X \n\r", usbms_context.read_capacity_data.block_address_0);
    316            TRACE_DEBUG_L( "RC:dba1 0x%X \n\r", usbms_context.read_capacity_data.block_address_1);
    317            TRACE_DEBUG_L( "RC:dba2 0x%X \n\r", usbms_context.read_capacity_data.block_address_2);
    318            TRACE_DEBUG_L( "RC:dba3 0x%X \n\r", usbms_context.read_capacity_data.block_address_3);
    319            TRACE_DEBUG_L( "RC:dbl0 0x%X \n\r", usbms_context.read_capacity_data.block_len_0);
    320            TRACE_DEBUG_L( "RC:dbl1 0x%X \n\r", usbms_context.read_capacity_data.block_len_1);
    321            TRACE_DEBUG_L( "RC:dbl2 0x%X \n\r", usbms_context.read_capacity_data.block_len_2);
    322            TRACE_DEBUG_L( "RC:dbl3 0x%X \n\r", usbms_context.read_capacity_data.block_len_3);
    323          
    324            usb_send((char*)&usbms_context.read_capacity_data, sizeof(USBMS_READ_CAPACITY_DATA) );
   \   00000034   0821               MOV         R1,#+8
   \   00000036   CB30               ADD         R0,#+203
   \   00000038   ........           _BLF        usb_send,??usb_send??rT
    325            usbms_context.state = USB_SEND_NO_FLASH;
   \   0000003C   0320               MOV         R0,#+3
   \   0000003E   A076               STRB        R0,[R4, #+26]
    326          
    327            return USBMS_OK;
   \   00000040   ....               B           ?Subroutine12
    328          }

   \                                 In segment CODE, align 4, keep-with-next
   \                     ?Subroutine12:
   \   00000000   0020               MOV         R0,#+0
   \   00000002   10BC               POP         {R4}
   \   00000004   02BC               POP         {R1}
   \   00000006   0847               BX          R1                 ;; return
    329          
    330          
    331          /*****************************************************************
    332          *
    333          * ROUTINE : rbc_read_10
    334          *
    335          *-----------------------------------------------------------------
    336          *
    337          * Purpose : processes the rbc READ_10 command
    338          *
    339          * Input Parameters  : Structure defining the READ_10 command
    340          *
    341          * Output Parameters : status of the operation
    342          *
    343          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    344          USBMS_RETURN rbc_read_10(USBMS_READ_10 *read_10)
    345          {
   \                     rbc_read_10:
   \   00000000   00B5               PUSH        {LR}
    346            USBMS_XFER *_request = NULL;
    347          
    348            /* initialize the temporary variables */
    349            _request = &usbms_context.usb_lun[usbms_context.current_lun].cur_request;
    350          
    351            /* Initialization of the request parameter */
    352            _request->current_block  =  VALUE_32( read_10->block_address_0,
    353                                                  read_10->block_address_1,
    354                                                  read_10->block_address_2,
    355                                                  read_10->block_address_3  );
   \   00000002   ....               LDR         R1,??DataTable5    ;; usbms_context
   \   00000004   B922               MOV         R2,#+185
   \   00000006   8A5C               LDRB        R2,[R1, R2]
   \   00000008   3823               MOV         R3,#+56
   \   0000000A   5A43               MUL         R2,R3
   \   0000000C   8918               ADD         R1,R1,R2
   \   0000000E   4279               LDRB        R2,[R0, #+5]
   \   00000010   0079               LDRB        R0,[R0, #+4]
   \   00000012   0002               LSL         R0,R0,#+8
   \   00000014   1043               ORR         R0,R2
   \   00000016   0882               STRH        R0,[R1, #+16]
    356            /* request processing */
    357            ms_sendTx();
   \   00000018   ........           _BLF        ms_sendTx,??ms_sendTx??rT
    358            return USBMS_OK;
   \   0000001C   ....               B           ?Subroutine13
    359          }

   \                                 In segment CODE, align 4, keep-with-next
   \                     ?Subroutine13:
   \   00000000   0020               MOV         R0,#+0
   \   00000002   02BC               POP         {R1}
   \   00000004   0847               BX          R1                 ;; return
   \   00000006   C046               NOP         
   \                     ??Subroutine13_0:
   \   00000008   ........           DC32        usbms_request_sense_data
    360          
    361          
    362          /*****************************************************************
    363          *
    364          * ROUTINE : rbc_commun_write
    365          *
    366          *-----------------------------------------------------------------
    367          *
    368          * Purpose : retreive data from the USB module and write to flash
    369          *
    370          * Input Parameters  :
    371          *           USBMS_XFER *request, the current SCSI request being processed
    372          *           USB_LUN *lun, the targetted LUN associated with the request
    373          *
    374          * Output Parameters :
    375          *
    376          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    377          USBMS_RETURN rbc_commun_write( USBMS_XFER *request, USB_LUN *lun )
    378          {
   \                     rbc_commun_write:
   \   00000000   F2B5               PUSH        {R1,R4-R7,LR}
   \   00000002   83B0               SUB         SP,#+12
   \   00000004   041C               MOV         R4,R0
    379            USHORT       _recLength;
    380            USBMS_RETURN _status = USBMS_ERROR;
    381            UCHAR*       _buff;
    382            USHORT       _length;
    383            ULONG       _expected,_nbBlock;
    384          
    385            /* How much data do we want from USB */

⌨️ 快捷键说明

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