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

📄 fw_chap9.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    535          * Purpose :
    536          *
    537          *
    538          * Input parameters : NONE
    539          *
    540          * Output parameters : NONE
    541          *
    542          * Global data :
    543          *
    544          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    545          void fw_reserved(void)
    546          {
   \                     fw_reserved:
   \   00000000   00B5               PUSH        {LR}
    547            TRACE_DEBUG_H( "fw_reserved\n\r");
    548            fw_stallEp0();
   \   00000002   ....               B           ?Subroutine16
    549          }

   \                                 In segment CODE, align 4, keep-with-next
   \                     ?Subroutine16:
   \   00000000   0121               MOV         R1,#+1
   \   00000002   0020               MOV         R0,#+0
   \   00000004   ........           _BLF        fw_setEndpointStatus,??fw_setEndpointStatus??rT
   \   00000008   01BC               POP         {R0}
   \   0000000A   0047               BX          R0                 ;; return
    550          
    551          
    552          /*****************************************************************
    553          *
    554          * ROUTINE   fw_busReset
    555          *
    556          *-----------------------------------------------------------------
    557          *
    558          * Purpose :
    559          *   called when a bus reset occured,re-init of global variables
    560          *
    561          * In parameters : NONE
    562          *
    563          * Out parameters : NONE
    564          *
    565          * Global data :
    566          *   fw_controlData  : structure that contains info for control transfer
    567          *   fw_device_state : bit map for different device states
    568          *   fw_fifoId       : Id of the IN FIFO
    569          *
    570          *****************************************************************/
    571          #ifdef ADS_COMPIL
    572          void fw_busReset(void)
    573          #else

   \                                 In segment CODE_I, align 4, keep-with-next
    574          __ramfunc void fw_busReset(void)
    575          #endif
    576          {
   \                     fw_busReset:
   \   00000000   00B5               PUSH        {LR}
    577            // empty the endpoint buffers
    578            fw_resetEP(FW_EP_BULK_IN);
   \   00000002   0120               MOV         R0,#+1
   \   00000004   ........           _BLF        fw_resetEP,??fw_resetEP??rT?CODE_I
    579            fw_resetEP(FW_EP_BULK_OUT);
   \   00000008   0220               MOV         R0,#+2
   \   0000000A   ........           _BLF        fw_resetEP,??fw_resetEP??rT?CODE_I
    580          
    581            // made as if a bus reset occured and reset all
    582            fw_controlData.DeviceRequest.bmRequestType = 0x00;
   \   0000000E   0748               LDR         R0,??fw_busReset_0  ;; fw_controlData
   \   00000010   0021               MOV         R1,#+0
   \   00000012   0160               STR         R1,[R0, #+0]
    583            fw_controlData.DeviceRequest.bRequest      = 0x00;
    584            fw_controlData.DeviceRequest.wValue   = 0x0000;
    585            fw_controlData.DeviceRequest.wIndex   = 0x0000;
   \   00000014   4160               STR         R1,[R0, #+4]
    586            fw_controlData.DeviceRequest.wLength  = 0x0000;
    587            fw_controlData.state = FW_STATE_END;
   \   00000016   0173               STRB        R1,[R0, #+12]
    588            fw_controlData.pData = NULL;
   \   00000018   0161               STR         R1,[R0, #+16]
    589            fw_deviceState = 0;
   \   0000001A   0548               LDR         R0,??fw_busReset_0+0x4  ;; fw_deviceState
   \   0000001C   0170               STRB        R1,[R0, #+0]
    590            fw_databk = 0;
   \   0000001E   0548               LDR         R0,??fw_busReset_0+0x8  ;; fw_databk
   \   00000020   0160               STR         R1,[R0, #+0]
    591          
    592            po_rngFlush(&fw_fifoId);
   \   00000022   0548               LDR         R0,??fw_busReset_0+0xC  ;; fw_fifoId
   \   00000024   ........           _BLF        po_rngFlush,??po_rngFlush??rT?CODE_I
    593          }
   \   00000028   01BC               POP         {R0}
   \   0000002A   0047               BX          R0                 ;; return
   \                     ??fw_busReset_0:
   \   0000002C   ........           DC32        fw_controlData
   \   00000030   ........           DC32        fw_deviceState
   \   00000034   ........           DC32        fw_databk
   \   00000038   ........           DC32        fw_fifoId
    594          
    595          /*****************************************************************
    596          *
    597          * ROUTINE   fw_suspendChange
    598          *
    599          *-----------------------------------------------------------------
    600          *
    601          * Purpose :
    602          *   called when a suspend change occured
    603          *
    604          * In parameters : NONE
    605          *
    606          * Out parameters : NONE
    607          *
    608          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    609          void fw_suspendChange(void)
    610          {
    611            TRACE_DEBUG_H( "suspend\n\r");
    612            if(!(fw_deviceState & FW_DS_COMHANG))
   \                     fw_suspendChange:
   \   00000000   8020               MOV         R0,#+128
   \   00000002   ....               LDR         R1,??DataTable13   ;; fw_deviceState
   \   00000004   0A78               LDRB        R2,[R1, #+0]
   \   00000006   0242               TST         R2,R0
   \   00000008   07D1               BNE         ??fw_suspendChange_0
    613            {
    614              fw_deviceState |= FW_DS_COMHANG;
   \   0000000A   0A78               LDRB        R2,[R1, #+0]
   \   0000000C   1043               ORR         R0,R2
   \   0000000E   0870               STRB        R0,[R1, #+0]
    615              USB_EVENT |= USB_EVENT_MASK_SUSPEND;
   \   00000010   ....               LDR         R0,??DataTable14   ;; USB_EVENT
   \   00000012   0178               LDRB        R1,[R0, #+0]
   \   00000014   0122               MOV         R2,#+1
   \   00000016   0A43               ORR         R2,R1
   \   00000018   0270               STRB        R2,[R0, #+0]
    616            //  fw_IsrCount = 0;
    617            }
    618          }
   \                     ??fw_suspendChange_0:
   \   0000001A   7047               BX          LR                 ;; return
    619          
    620          /*****************************************************************
    621          *
    622          * ROUTINE     fw_stallEp0
    623          *
    624          *-----------------------------------------------------------------
    625          *
    626          * Purpose :
    627          *   set the EP0 STALL
    628          *
    629          * In parameters : NONE
    630          *
    631          * Out parameters : NONE
    632          *
    633          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    634          void fw_stallEp0(void)
    635          {
   \                     fw_stallEp0:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   C046               NOP         
    636            fw_setEndpointStatus(FW_EP_CTRL, 1);
   \   00000004                      REQUIRE ?Subroutine16
   \   00000004                      ;; // Fall through to label ?Subroutine16
    637          }
    638          
    639          
    640          /*****************************************************************
    641          *
    642          * ROUTINE     fw_singleTransmit
    643          *
    644          *-----------------------------------------------------------------
    645          *
    646          * Purpose :
    647          *   transmit a single packet of data from EP0
    648          *
    649          * In parameters : buf : data buffer to transmit
    650          *                 len : length of the data
    651          *
    652          * Out parameters : NONE
    653          *
    654          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    655          void fw_singleTransmit(UCHAR * buf, UCHAR len)
    656          {
   \                     fw_singleTransmit:
   \   00000000   00B5               PUSH        {LR}
    657            if( len <= FW_EP0_MAXPACKET_SIZE)
   \   00000002   0929               CMP         R1,#+9
   \   00000004   04D2               BCS         ??fw_singleTransmit_0
    658            {
    659              fw_writeEndpoint(FW_EP_CTRL, buf, len);
   \   00000006   0A1C               MOV         R2,R1
   \   00000008   011C               MOV         R1,R0
   \   0000000A   0020               MOV         R0,#+0
   \   0000000C   ........           _BLF        fw_writeEndpoint,??fw_writeEndpoint??rT
    660            }
    661            else
    662            {
    663              TRACE_ERROR( "singleTr error\n\r");
    664            }
    665          }
   \                     ??fw_singleTransmit_0:
   \   00000010   01BC               POP         {R0}
   \   00000012   0047               BX          R0                 ;; return
    666          
    667          /*****************************************************************
    668          *
    669          * ROUTINE fw_codeTransmit
    670          *
    671          *-----------------------------------------------------------------
    672          *
    673          * Purpose :
    674          *   transmit a buffer of data from EP0
    675          *
    676          * In parameters : pData : data buffer to transmit
    677          *                 len   : length of the data
    678          *
    679          * Out parameters : NONE
    680          *
    681          * Global data : fw_controlData : request to be processed
    682          *
    683          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    684          void fw_codeTransmit(UCHAR * pData, USHORT len)
    685          {
   \                     fw_codeTransmit:
   \   00000000   10B5               PUSH        {R4,LR}
    686            fw_controlData.wCount = 0;
   \   00000002   ....               LDR         R4,??DataTable15   ;; fw_controlData
   \   00000004   0022               MOV         R2,#+0
   \   00000006   6281               STRH        R2,[R4, #+10]
    687            if(fw_controlData.wLength > len)
   \   00000008   2289               LDRH        R2,[R4, #+8]
   \   0000000A   9142               CMP         R1,R2
   \   0000000C   00D2               BCS         ??fw_codeTransmit

⌨️ 快捷键说明

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