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

📄 fw_epmg.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION    29/Nov/2007  16:53:58 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode        =  interwork                                            #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_epm #
#                       g.c                                                  #
#    Command line    =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_epm #
#                       g.c -D AT91SAM7X256 -D PULL_UP_USB -D USE_LED -lC    #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\Binary\List\" -o                      #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\Binary\Obj\" -z9 --debug --cpu_mode   #
#                       thumb --endian little --cpu ARM7TDMI --stack_align   #
#                       4 --interwork -e --fpu None --dlib_config            #
#                       "C:\Program Files\IAR Systems\Embedded Workbench     #
#                       4.0 Evaluation\ARM\LIB\dl4tptinl8f.h" -I             #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\srcIAR\" -I                           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\src\" -I                           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\" -I                            #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\FILESYSTEM\inc\" -I             #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\MASSSTORAGE\inc\" -I            #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\AT91SAM7X256\" -I               #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\inc\" -I                           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\mmc_sd\" -I                     #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\COMMON_FS_MS\" -I "C:\Program   #
#                       Files\IAR Systems\Embedded Workbench 4.0             #
#                       Evaluation\ARM\INC\"                                 #
#    List file       =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass     #
#                       Storage\compil\Binary\List\fw_epmg.lst               #
#    Object file     =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass     #
#                       Storage\compil\Binary\Obj\fw_epmg.r79                #
#                                                                            #
#                                                                            #
##############################################################################

G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_epmg.c
      1          //  ----------------------------------------------------------------------------
      2          //          ATMEL Microcontroller Software Support  -  ROUSSET  -
      3          //  ----------------------------------------------------------------------------
      4          //  DISCLAIMER:  CONDITIONS AS PER SIGNED LIMITED LICENSE AGREEMENT (AT91
      5          //  SOFTWARE AND USER DOCUMENTATION)
      6          //  ALL SOFTWARE IS PROVIDED AS IS, WITH ALL FAULTS, AND WITH NO WARRANTY
      7          //  WHATSOEVER.  ATMEL EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED,
      8          //  OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY WARRANTIES OF MERCHANTABILITY,
      9          //  FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.
     10          //  ----------------------------------------------------------------------------
     11          // File Name           : fw_epmg.c
     12          // Object              : EP management routines
     13          // Creation            : JCB    27/oct/2002
     14          // Modif               : JCB    18/feb/2005
     15          //                       JCB    18/mar/2005 change the EP0 manage to suit
     16          //                                          with the first Get dev descript
     17          // ----------------------------------------------------------------------------
     18          #include "po_types.h"
     19          #include "trace.h"
     20          #include "fw_usb.h"
     21          #include "po_kernel.h"
     22          #include "ms_device.h"
     23          #include "ms_rbc.h"
     24          
     25          /*************************************************************************
     26           USB protocol function pointer arrays
     27          *************************************************************************/
     28          /* Table 9-4. Standard Request Codes */
     29          typedef void (*S_request) (void);

   \                                 In segment DATA_C, align 4, align-sorted
     30          const S_request StandardDeviceRequest[] =
   \                     StandardDeviceRequest:
   \   00000000   ............       DC32 fw_getStatus, fw_clearFeature, fw_reserved, fw_setFeature
   \              ............
   \              ........    
   \   00000010   ............       DC32 fw_reserved, fw_setAddress, fw_getDescriptor, fw_reserved
   \              ............
   \              ........    
   \   00000020   ............       DC32 fw_getConfiguration, fw_setConfiguration, fw_getInterface
   \              ............
   \   0000002C   ............       DC32 fw_setInterface, fw_reserved
   \              ....        
     31          {
     32            fw_getStatus,        /*  0 */
     33            fw_clearFeature,     /*  1 */
     34            fw_reserved,         /*  2 */
     35            fw_setFeature,       /*  3 */
     36            fw_reserved,         /*  4 */
     37            fw_setAddress,       /*  5 */
     38            fw_getDescriptor,    /*  6 */
     39            fw_reserved,         /*  7 set_descriptor is not supported */
     40            fw_getConfiguration, /*  8 */
     41            fw_setConfiguration, /*  9 */
     42            fw_getInterface,     /* 10 */
     43            fw_setInterface,     /* 11 */
     44            fw_reserved          /* 12 synch_frame is not supported */
     45          };
     46          

   \                                 In segment DATA_Z, align 4, align-sorted
     47          static UCHAR databuffer[2*FW_MAIN_EP_MAXPACKET_SIZE];
   \                     databuffer:
   \   00000000                      DS8 128

   \                                 In segment DATA_Z, align 4, align-sorted
     48          UCHAR TxBuffer[FW_MAIN_EP_MAXPACKET_SIZE];
   \                     TxBuffer:
   \   00000000                      DS8 64
     49          
     50          
     51          
     52          /*****************************************************************
     53          *
     54          * ROUTINE         fw_ep0RxDone
     55          *
     56          *-----------------------------------------------------------------
     57          *
     58          * Purpose :
     59          *     called when something is received on EP0
     60          *
     61          * Input parameters  : NONE
     62          *
     63          * Output parameters : NONE
     64          *
     65          * Global data : fw_controlData : request to be processed
     66          *
     67          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
     68          void fw_ep0RxDone(void)
     69          {
   \                     fw_ep0RxDone:
   \   00000000   10B5               PUSH        {R4,LR}
     70            UCHAR _i = 0;
     71          
     72            if(fw_IsSetupPacket(FW_EP_CTRL) != 0)
   \   00000002   ....               LDR         R4,??DataTable4    ;; fw_controlData
   \   00000004   0020               MOV         R0,#+0
   \   00000006   ........           _BLF        fw_IsSetupPacket,??fw_IsSetupPacket??rT
   \   0000000A   0028               CMP         R0,#+0
   \   0000000C   22D0               BEQ         ??fw_ep0RxDone_0
     73            {
     74              fw_controlData.wLength = 0;
   \   0000000E   0020               MOV         R0,#+0
   \   00000010   A060               STR         R0,[R4, #+8]
     75              fw_controlData.wCount = 0;
     76          
     77              _i = fw_readEndpoint(FW_EP_CTRL,(UCHAR *)(&(fw_controlData.DeviceRequest)));
   \   00000012   211C               MOV         R1,R4
   \   00000014   ........           _BLF        fw_readEndpoint,??fw_readEndpoint??rT
   \   00000018   0006               LSL         R0,R0,#+24
   \   0000001A   000E               LSR         R0,R0,#+24
     78              /* if the data are not valid */
     79              if(_i != sizeof(FW_DEVICE_REQUEST))
   \   0000001C   0828               CMP         R0,#+8
   \   0000001E   02D0               BEQ         ??fw_ep0RxDone_1
     80              {
     81                fw_stallEp0();
   \   00000020   ........           _BLF        fw_stallEp0,??fw_stallEp0??rT
     82                return;
   \   00000024   34E0               B           ??fw_ep0RxDone_2
     83              }
     84          
     85              /* Acknowledge setup here to unlock in/out endp */
     86              if(fw_controlData.DeviceRequest.bmRequestType & 0x80)
   \                     ??fw_ep0RxDone_1:
   \   00000026   2078               LDRB        R0,[R4, #+0]
   \   00000028   0006               LSL         R0,R0,#+24
   \   0000002A   01D5               BPL         ??fw_ep0RxDone_3
     87              {
     88                fw_changedir(FW_DEVICE_TO_HOST);
   \   0000002C   0120               MOV         R0,#+1
   \   0000002E   00E0               B           ??fw_ep0RxDone_4
     89              }
     90              else
     91              {
     92                fw_changedir(FW_HOST_TO_DEVICE);
   \                     ??fw_ep0RxDone_3:
   \   00000030   0020               MOV         R0,#+0
   \                     ??fw_ep0RxDone_4:
   \   00000032   ........           _BLF        fw_changedir,??fw_changedir??rT
     93              }
     94          
     95              fw_acknowledgeSetup(FW_EP_CTRL);
   \   00000036   0020               MOV         R0,#+0
   \   00000038   ........           _BLF        fw_acknowledgeSetup,??fw_acknowledgeSetup??rT
     96          
     97              fw_controlData.wLength = fw_controlData.DeviceRequest.wLength;
   \   0000003C   E088               LDRH        R0,[R4, #+6]
   \   0000003E   2081               STRH        R0,[R4, #+8]
     98              fw_controlData.wCount = 0;
   \   00000040   0020               MOV         R0,#+0
   \   00000042   6081               STRH        R0,[R4, #+10]
     99              fw_controlData.state = FW_STATE_START;
   \   00000044   0120               MOV         R0,#+1
   \   00000046   2073               STRB        R0,[R4, #+12]
    100              fw_deviceState |= FW_DS_SETUP;
   \   00000048   ....               LDR         R0,??DataTable8    ;; fw_deviceState
   \   0000004A   0178               LDRB        R1,[R0, #+0]
   \   0000004C   0422               MOV         R2,#+4
   \   0000004E   0A43               ORR         R2,R1
   \   00000050   0270               STRB        R2,[R0, #+0]
   \   00000052   1DE0               B           ??fw_ep0RxDone_2
    101          
    102            }
    103            else
    104            {
    105              if(fw_controlData.state == FW_STATE_START)
   \                     ??fw_ep0RxDone_0:
   \   00000054   207B               LDRB        R0,[R4, #+12]
   \   00000056   0128               CMP         R0,#+1
   \   00000058   18D1               BNE         ??fw_ep0RxDone_5
    106              {
    107                _i = fw_readEndpoint(FW_EP_CTRL, fw_controlData.pData + fw_controlData.wCount);
   \   0000005A   6089               LDRH        R0,[R4, #+10]
   \   0000005C   2169               LDR         R1,[R4, #+16]
   \   0000005E   0918               ADD         R1,R1,R0
   \   00000060   0020               MOV         R0,#+0
   \   00000062   ........           _BLF        fw_readEndpoint,??fw_readEndpoint??rT
   \   00000066   0006               LSL         R0,R0,#+24
   \   00000068   000E               LSR         R0,R0,#+24
    108          
    109                fw_controlData.wCount += _i;
   \   0000006A   6189               LDRH        R1,[R4, #+10]
   \   0000006C   0918               ADD         R1,R1,R0
   \   0000006E   6181               STRH        R1,[R4, #+10]
    110                if((_i != 0)
    111                && ((_i != FW_EP0_MAXPACKET_SIZE) || (fw_controlData.wCount >= fw_controlData.wLength)))
   \   00000070   021C               MOV         R2,R0
   \   00000072   0DD0               BEQ         ??fw_ep0RxDone_2
   \   00000074   0828               CMP         R0,#+8

⌨️ 快捷键说明

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