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

📄 fw.ls1

📁 提供了usb接口fx2芯片的编程。从io输入到后来的差分信号输出。都给了详细的例子
💻 LS1
📖 第 1 页 / 共 5 页
字号:
014E E0              622             MOVX    A,@DPTR
014F 4409            623             ORL     A,#09H
0151 F0              624             MOVX    @DPTR,A
                     625     ; 
                     626     ;    USBIE |= bmSUDAV | bmSUTOK | bmSUSP | bmURES | bmHSGRANT;   // Enable selected interru
                             pts
                     627                             ; SOURCE LINE # 160
0152 900000   F      628             MOV     DPTR,#USBIE
0155 E0              629             MOVX    A,@DPTR
0156 443D            630             ORL     A,#03DH
0158 F0              631             MOVX    @DPTR,A
                     632     ;    EA = 1;                  // Enable 8051 interrupts
                     633                             ; SOURCE LINE # 161
0159 D2AF            634             SETB    EA
                     635     ; 
                     636     ; #ifndef NO_RENUM
                     637     ;    // Renumerate if necessary.  Do this by checking the renum bit.  If it
                     638     ;    // is already set, there is no need to renumerate.  The renum bit will
                     639     ;    // already be set if this firmware was loaded from an eeprom.
                     640     ;    if(!(USBCS & bmRENUM))
                     641                             ; SOURCE LINE # 167
015B 900000   F      642             MOV     DPTR,#USBCS
015E E0              643             MOVX    A,@DPTR
015F 20E105          644             JB      ACC.1,?C0008
                     645     ;    {
                     646                             ; SOURCE LINE # 168
                     647     ;        EZUSB_Discon(TRUE);   // renumerate
                     648                             ; SOURCE LINE # 169
0162 D200     F      649             SETB    ?EZUSB_Discon?BIT
0164 120000   F      650             LCALL   EZUSB_Discon
                     651     ;    }
A51 MACRO ASSEMBLER  FW                                                                   12/29/2005 11:19:53 PAGE    11

                     652                             ; SOURCE LINE # 170
0167                 653     ?C0008:
                     654     ; #endif
                     655     ; 
                     656     ;    // unconditionally re-connect.  If we loaded from eeprom we are
                     657     ;    // disconnected and need to connect.  If we just renumerated this
                     658     ;    // is not necessary but doesn't hurt anything
                     659     ;    USBCS &=~bmDISCON;
                     660                             ; SOURCE LINE # 176
0167 900000   F      661             MOV     DPTR,#USBCS
016A E0              662             MOVX    A,@DPTR
016B 54F7            663             ANL     A,#0F7H
016D F0              664             MOVX    @DPTR,A
                     665     ; 
                     666     ;    CKCON = (CKCON&(~bmSTRETCH)) | FW_STRETCH_VALUE; // Set stretch to 0 (after renumerati
                             on)
                     667                             ; SOURCE LINE # 178
016E 538EF8          668             ANL     CKCON,#0F8H
                     669     ; 
                     670     ;    // clear the Sleep flag.
                     671     ;    Sleep = FALSE;
                     672                             ; SOURCE LINE # 181
0171 C200     F      673             CLR     Sleep
0173                 674     ?C0009:
                     675     ; 
                     676     ; 
                     677     ; 
                     678     ;    // Task Dispatcher
                     679     ;    while(TRUE)               // Main Loop
                     680                             ; SOURCE LINE # 186
                     681     ;    {
                     682                             ; SOURCE LINE # 187
                     683     ;       if(GotSUD)            // Wait for SUDAV
                     684                             ; SOURCE LINE # 188
0173 300005   F      685             JNB     GotSUD,?C0011
                     686     ;       {
                     687                             ; SOURCE LINE # 189
                     688     ;          SetupCommand();          // Implement setup command
                     689                             ; SOURCE LINE # 190
0176 120000   F      690             LCALL   SetupCommand
                     691     ;            GotSUD = FALSE;            // Clear SUDAV flag
                     692                             ; SOURCE LINE # 191
0179 C200     F      693             CLR     GotSUD
                     694     ;       }
                     695                             ; SOURCE LINE # 192
017B                 696     ?C0011:
                     697     ; 
                     698     ;       // Poll User Device
                     699     ;       // NOTE: Idle mode stops the processor clock.  There are only two
                     700     ;       // ways out of idle mode, the WAKEUP pin, and detection of the USB
                     701     ;       // resume state on the USB bus.  The timers will stop and the
                     702     ;       // processor will not wake up on any other interrupts.
                     703     ;       if (Sleep)
                     704                             ; SOURCE LINE # 199
017B 300029   F      705             JNB     Sleep,?C0012
                     706     ;           {
                     707                             ; SOURCE LINE # 200
                     708     ;           if(TD_Suspend())
                     709                             ; SOURCE LINE # 201
017E 120000   F      710             LCALL   TD_Suspend
0181 5024            711             JNC     ?C0012
                     712     ;               { 
                     713                             ; SOURCE LINE # 202
                     714     ;               Sleep = FALSE;            // Clear the "go to sleep" flag.  Do it here to p
                             revent any race condition between wakeup and the next sleep.
                     715                             ; SOURCE LINE # 203
A51 MACRO ASSEMBLER  FW                                                                   12/29/2005 11:19:53 PAGE    12

0183 C200     F      716             CLR     Sleep
0185                 717     ?C0016:
                     718     ;               do
                     719     ;                   {
                     720                             ; SOURCE LINE # 205
                     721     ;                     EZUSB_Susp();         // Place processor in idle mode.
                     722                             ; SOURCE LINE # 206
0185 120000   F      723             LCALL   EZUSB_Susp
                     724     ;                   }
                     725                             ; SOURCE LINE # 207
                     726     ;                 while(!Rwuen && EZUSB_EXTWAKEUP());
                     727                             ; SOURCE LINE # 208
0188 200016   F      728             JB      Rwuen,?C0015
018B 900000   F      729             MOV     DPTR,#WAKEUPCS
018E E0              730             MOVX    A,@DPTR
018F 30E704          731             JNB     ACC.7,?C0018
0192 E0              732             MOVX    A,@DPTR
0193 20E1EF          733             JB      ACC.1,?C0016
0196                 734     ?C0018:
0196 900000   F      735             MOV     DPTR,#WAKEUPCS
0199 E0              736             MOVX    A,@DPTR
019A 30E604          737             JNB     ACC.6,?C0015
019D E0              738             MOVX    A,@DPTR
019E 20E0E4          739             JB      ACC.0,?C0016
01A1                 740     ?C0015:
                     741     ;                 // Must continue to go back into suspend if the host has disabled remote 
                             wakeup
                     742     ;                 // *and* the wakeup was caused by the external wakeup pin.
                     743     ;                 
                     744     ;              // 8051 activity will resume here due to USB bus or Wakeup# pin activity.
                     745     ;              EZUSB_Resume();   // If source is the Wakeup# pin, signal the host to Resume
                             .      
                     746                             ; SOURCE LINE # 213
01A1 120000   F      747             LCALL   EZUSB_Resume
                     748     ;              TD_Resume();
                     749                             ; SOURCE LINE # 214
01A4 120000   F      750             LCALL   TD_Resume
                     751     ;               }   
                     752                             ; SOURCE LINE # 215
                     753     ;           }
                     754                             ; SOURCE LINE # 216
01A7                 755     ?C0012:
                     756     ;       TD_Poll();
                     757                             ; SOURCE LINE # 217
01A7 120000   F      758             LCALL   TD_Poll
                     759     ;    }
                     760                             ; SOURCE LINE # 218
01AA 80C7            761             SJMP    ?C0009
                     762     ; END OF main
                     763     
                     764     ; }
                     765     ; 
                     766     ; // Device request parser
                     767     ; void SetupCommand(void)
                     768     
----                 769             RSEG  ?PR?SetupCommand?FW
0000                 770     SetupCommand:
                     771             USING   0
                     772                             ; SOURCE LINE # 222
                     773     ; {
                     774                             ; SOURCE LINE # 223
                     775     ;    void   *dscr_ptr;
                     776     ; 
                     777     ;    switch(SETUPDAT[1])
                     778                             ; SOURCE LINE # 226
0000 900000   F      779             MOV     DPTR,#SETUPDAT+01H
A51 MACRO ASSEMBLER  FW                                                                   12/29/2005 11:19:53 PAGE    13

0003 E0              780             MOVX    A,@DPTR
0004 7003            781             JNZ     $ + 5H
0006 020000   F      782             LJMP    ?C0037
0009 14              783             DEC     A
000A 7003            784             JNZ     $ + 5H
000C 020000   F      785             LJMP    ?C0046
000F 24FE            786             ADD     A,#0FEH
0011 7003            787             JNZ     $ + 5H
0013 020000   F      788             LJMP    ?C0057
0016 24FB            789             ADD     A,#0FBH
0018 7003            790             JNZ     $ + 5H
001A 020000   F      791             LJMP    ?C0036
001D 14              792             DEC     A
001E 7003            793             JNZ     $ + 5H
0020 020000   F      794             LJMP    ?C0035
0023 14              795             DEC     A
0024 6073            796             JZ      ?C0033
0026 14              797             DEC     A
0027 6076            798             JZ      ?C0034
0029 2405            799             ADD     A,#05H
002B 6003            800             JZ      $ + 5H
002D 020000   F      801             LJMP    ?C0068
                     802     ;    {
                     803                             ; SOURCE LINE # 227
                     804     ;       case SC_GET_DESCRIPTOR:                  // *** Get Descriptor
                     805                             ; SOURCE LINE # 228
0030                 806     ?C0022:
                     807     ;          if(DR_GetDescriptor())
                     808                             ; SOURCE LINE # 229
0030 120000   F      809             LCALL   DR_GetDescriptor
0033 4003            810             JC      $ + 5H
0035 020000   F      811             LJMP    ?C0021
                     812     ;             switch(SETUPDAT[3])         
                     813                             ; SOURCE LINE # 230
0038 900000   F      814             MOV     DPTR,#SETUPDAT+03H
003B E0              815             MOVX    A,@DPTR
003C 24FE            816             ADD     A,#0FEH
003E 6022            817             JZ      ?C0027
0040 14              818             DEC     A
0041 6033            819             JZ      ?C0029
0043 24FD            820             ADD     A,#0FDH
0045 6011            821             JZ      ?C0026
0047 14              822             DEC     A
0048 6022            823             JZ      ?C0028
004A 2406            824             ADD     A,#06H
004C 7048            825             JNZ     ?C0032
                     826     ;             {

⌨️ 快捷键说明

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