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

📄 fw.lst

📁 HIGH_SPEED_USB_To_ATA(IDE)Firmware相关代码(EZ USB FX2芯片)
💻 LST
📖 第 1 页 / 共 4 页
字号:
 268   3                  }
 269   2               break;
 270   2            case SC_CLEAR_FEATURE:                  // *** Clear Feature
 271   2                  switch(SETUPDAT[0])
 272   2                  {
 273   3                     case FT_DEVICE:            // Device
 274   3                        if(SETUPDAT[2] == 1)
 275   3                           Rwuen = FALSE;       // Disable Remote Wakeup
 276   3                        else
 277   3                           EZUSB_STALL_EP0();   // Stall End Point 0
 278   3                        break;
 279   3                     case FT_ENDPOINT:          // End Point
 280   3                        if(SETUPDAT[2] == 0)
 281   3                        {
 282   4                           if (SETUPDAT[4] == 0x2)
 283   4                           {
 284   5                              ResetAndArmEp2();
 285   5                              TOGCTL = 0x2;
 286   5                              TOGCTL = 0x22;       // reset data toggle
 287   5                              EP2CS = 0;           // Clear stall bit
 288   5                           }
 289   4                           else if (SETUPDAT[4] == 0x88)
 290   4                              {
 291   5                              TOGCTL = 0x18;
 292   5                              TOGCTL = 0x38;       // reset data toggle
 293   5                              EP8CS = 0;           // Clear stall bit
 294   5                              }
 295   4                           else
 296   4                              EZUSB_STALL_EP0();   // Stall End Point 0
 297   4                           }
 298   3                        else
 299   3                           EZUSB_STALL_EP0();      // Stall End Point 0
 300   3                        break;
 301   3                  }  
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 6   

 302   2               break;
 303   2            case SC_SET_FEATURE:                  // *** Set Feature
 304   2                  switch(SETUPDAT[0])
 305   2                  {
 306   3                     case FT_DEVICE:            // Device
 307   3                        if(SETUPDAT[2] == 1)
 308   3                           Rwuen = TRUE;        // Enable Remote Wakeup
 309   3                        else if(SETUPDAT[2] == 2)
 310   3                           // Set Feature Test Mode.  The core handles this request.  However, it is
 311   3                           // necessary for the firmware to complete the handshake phase of the
 312   3                           // control transfer before the chip will enter test mode.  It is also
 313   3                           // necessary for FX2 to be physically disconnected (D+ and D-)
 314   3                           // from the host before it will enter test mode.
 315   3                           break;
 316   3                        else
 317   3                           EZUSB_STALL_EP0();   // Stall End Point 0
 318   3                        break;
 319   3                     case FT_ENDPOINT:          // End Point
 320   3                        if(SETUPDAT[2] == 0)
 321   3                           {
 322   4                           if (SETUPDAT[4] == 0x2)
 323   4                              EP2CS = bmEPSTALL;         // Set stall bit
 324   4                           else if (SETUPDAT[4] == 0x88)
 325   4                              EP8CS = bmEPSTALL;         // Set stall bit
 326   4                           else
 327   4                              EZUSB_STALL_EP0();   // Stall End Point 0
 328   4                           }
 329   3                        else
 330   3                           EZUSB_STALL_EP0();   // Stall End Point 0
 331   3                        break;
 332   3                  }  
 333   2               break;
 334   2      
 335   2            // This is a first attempt at completing a mass storage reset.  It is not yet tested.
 336   2            case SC_MASS_STORAGE_RESET:
 337   2               // Verify that the command is actually a MS reset command sent to the proper interface
 338   2               if (SETUPDAT[0] == 0x21 && SETUPDAT[4] == 0)  // Our interface number is hard coded (0) in DSCR.A
             -51
 339   2               {
 340   3                  // All we really need to do in response to a MSC Reset is restart using
 341   3                  // a soft reset (jump to 0x00).  This will re-initialize the drive and
 342   3                  // endpoints.
 343   3                  EZUSB_IRQ_CLEAR();
 344   3                  INT2CLR = bmSUDAV;         // Clear SUDAV IRQ
 345   3      
 346   3                  // force a soft reset after the iret.
 347   3                  EA = 0;
 348   3                  softReset();
 349   3               }
 350   2               else
 351   2                  EZUSB_STALL_EP0();   // Stall End Point 0
 352   2               break;
 353   2      
 354   2            default:                            // *** Invalid Command
 355   2                  EZUSB_STALL_EP0();            // Stall End Point 0
 356   2         }
 357   1      
 358   1         // Acknowledge handshake phase of device request
 359   1         // Required for rev C does not effect rev B
 360   1          EP0CS |= bmHSNAK;
 361   1      }
 362          
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 7   

 363          // Wake-up interrupt handler
 364          void resume_isr(void) interrupt WKUP_VECT
 365          {
 366   1         EZUSB_CLEAR_RSMIRQ();
 367   1      }
 368          
 369          STRINGDSCR xdata *   EZUSB_GetStringDscr(BYTE StrIdx)
 370          {
 371   1         extern BYTE code StringDscr0;
 372   1         extern BYTE code StringDscr1;
 373   1         extern BYTE code StringDscr2;
 374   1         extern BYTE code StringDscr3;
 375   1      
 376   1         switch (StrIdx)
 377   1         {
 378   2            case 0:
 379   2               return((STRINGDSCR xdata *)&StringDscr0);
 380   2            case 1:
 381   2               return((STRINGDSCR xdata *)&StringDscr1);
 382   2            case 2:
 383   2               return((STRINGDSCR xdata *)&StringDscr2);
 384   2            case 3:
 385   2               return((STRINGDSCR xdata *)&StringDscr3);
 386   2            default:
 387   2               return(0);
 388   2         }
 389   1      }
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 8   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION main (BEGIN)
                                           ; SOURCE LINE # 66
                                           ; SOURCE LINE # 67
                                           ; SOURCE LINE # 71
0000 E4                CLR     A
0001 F500        E     MOV     MaxPIO,A
                                           ; SOURCE LINE # 72
0003 C200        R     CLR     Sleep
                                           ; SOURCE LINE # 73
0005 C200        R     CLR     Rwuen
                                           ; SOURCE LINE # 74
0007 C200        R     CLR     Selfpwr
                                           ; SOURCE LINE # 79
0009 120000      E     LCALL   abortGPIF
                                           ; SOURCE LINE # 81
000C 120000      E     LCALL   TD_Init
                                           ; SOURCE LINE # 87
000F 7E00        E     MOV     R6,#HIGH halfKBuffer
0011 7F00        E     MOV     R7,#LOW halfKBuffer
0013 7C00        E     MOV     R4,#HIGH DeviceDscr
0015 7D00        E     MOV     R5,#LOW DeviceDscr
0017 7A00        E     MOV     R2,#HIGH DscrEndOffset
0019 7B00        E     MOV     R3,#LOW DscrEndOffset
001B 120000      E     LCALL   _mymemmovexx
                                           ; SOURCE LINE # 95
001E AF00        R     MOV     R7,intrfcSubClass
0020 7400        E     MOV     A,#LOW halfKBuffer
0022 2400        E     ADD     A,#LOW IntrfcSubClassFullSpeedOffset
0024 F582              MOV     DPL,A
0026 7400        E     MOV     A,#HIGH halfKBuffer
0028 3400        E     ADDC    A,#HIGH IntrfcSubClassFullSpeedOffset
002A F583              MOV     DPH,A
002C EF                MOV     A,R7
002D F0                MOVX    @DPTR,A
002E 7400        E     MOV     A,#LOW halfKBuffer
0030 2400        E     ADD     A,#LOW IntrfcSubClassHighSpeedOffset
0032 F582              MOV     DPL,A
0034 7400        E     MOV     A,#HIGH halfKBuffer
0036 3400        E     ADDC    A,#HIGH IntrfcSubClassHighSpeedOffset
0038 F583              MOV     DPH,A
003A EF                MOV     A,R7
003B F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 98
;---- Variable 'i' assigned to Register 'R7' ----
003C E4                CLR     A
003D FF                MOV     R7,A
003E         ?C0001:
                                           ; SOURCE LINE # 99
003E 7400        E     MOV     A,#LOW localSerialNumber
0040 2F                ADD     A,R7
0041 F8                MOV     R0,A
0042 E6                MOV     A,@R0
0043 FE                MOV     R6,A
0044 EF                MOV     A,R7
0045 2400        E     ADD     A,#LOW SerialNumberOffset
0047 FD                MOV     R5,A
0048 E4                CLR     A
0049 3400        E     ADDC    A,#HIGH SerialNumberOffset
004B FC                MOV     R4,A
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 9   

004C 7400        E     MOV     A,#LOW halfKBuffer
004E 2D                ADD     A,R5
004F F582              MOV     DPL,A
0051 7400        E     MOV     A,#HIGH halfKBuffer
0053 3C                ADDC    A,R4
0054 F583              MOV     DPH,A
0056 EE                MOV     A,R6
0057 F0                MOVX    @DPTR,A
0058 0F                INC     R7
0059 BF18E2            CJNE    R7,#018H,?C0001
005C         ?C0002:
                                           ; SOURCE LINE # 101
005C D2E8              SETB    EUSB
                                           ; SOURCE LINE # 102
005E 43D820            ORL     EICON,#020H
                                           ; SOURCE LINE # 104
0061 90E668            MOV     DPTR,#0E668H
0064 E0                MOVX    A,@DPTR
0065 4408              ORL     A,#08H
0067 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 106
0068 90E65C            MOV     DPTR,#0E65CH
006B E0                MOVX    A,@DPTR
006C 4439              ORL     A,#039H
006E F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 107
006F D2AF              SETB    EA
                                           ; SOURCE LINE # 114
0071 90E680            MOV     DPTR,#0E680H
0074 E0                MOVX    A,@DPTR
0075 20E105            JB      ACC.1,?C0004
                                           ; SOURCE LINE # 115
                                           ; SOURCE LINE # 116
0078 D200        E     SETB    ?EZUSB_Discon?BIT
007A 120000      E     LCALL   EZUSB_Discon
                                           ; SOURCE LINE # 117
007D         ?C0004:
                                           ; SOURCE LINE # 124
007D E580              MOV     A,IOA
007F 30E609            JNB     ACC.6,?C0005
                                           ; SOURCE LINE # 125
                                           ; SOURCE LINE # 126
0082 90E680            MOV     DPTR,#0E680H
0085 E0                MOVX    A,@DPTR
0086 54F7              ANL     A,#0F7H
0088 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 127
0089 8003              SJMP    ?C0006
008B         ?C0005:
                                           ; SOURCE LINE # 129
                                           ; SOURCE LINE # 130
008B 120000      R     LCALL   DisconAndWaitForVbus
                                           ; SOURCE LINE # 131
008E         ?C0006:
                                           ; SOURCE LINE # 139
008E 538EF8            ANL     CKCON,#0F8H
                                           ; SOURCE LINE # 145
0091 90E6A0            MOV     DPTR,#0E6A0H
0094 E0                MOVX    A,@DPTR
0095 4480              ORL     A,#080H
0097 F0                MOVX    @DPTR,A
0098         ?C0007:
C51 COMPILER V7.50   FW                                                                    11/07/2006 14:52:08 PAGE 10  

                                           ; SOURCE LINE # 148
                                           ; SOURCE LINE # 149
                                           ; SOURCE LINE # 154
0098 E580              MOV     A,IOA
009A 20E603            JB      ACC.6,?C0009
                                           ; SOURCE LINE # 155
009D 120000      R     LCALL   DisconAndWaitForVbus
00A0         ?C0009:
                                           ; SOURCE LINE # 158
00A0 120000      E     LCALL   TD_Poll
                                           ; SOURCE LINE # 159
00A3 80F3              SJMP    ?C0007
             ; FUNCTION main (END)

             ; FUNCTION DisconAndWaitForVbus (BEGIN)
                                           ; SOURCE LINE # 166
                                           ; SOURCE LINE # 167
                                           ; SOURCE LINE # 168
0000 90E680            MOV     DPTR,#0E680H
0003 E0                MOVX    A,@DPTR
0004 4408              ORL     A,#08H
0006 F0                MOVX    @DPTR,A
0007         ?C0011:
                                           ; SOURCE LINE # 169
0007 E580              MOV     A,IOA
0009 30E6FB            JNB     ACC.6,?C0011
000C         ?C0012:
                                           ; SOURCE LINE # 170
000C 90E680            MOV     DPTR,#0E680H

⌨️ 快捷键说明

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