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

📄 usb_drv.lst

📁 这是一个用C语言在VC6.0环境下编写的用于USB驱动的代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 753   2                       TXEN1_PID;
 754   2                       
 755   2                       
 756   2                       
 757   2              }
 758   1              else 
 759   1              {
 760   2                   write_usb(RXC1,RX_EN);
 761   2              }
 762   1              
 763   1      }
 764          
 765          void tx_2()
 766          {}
 767          
 768          void tx_3()
 769          {}
 770          
 771          void usb_alt()
 772          {
 773   1          evnt = read_usb(ALTEV);             /*check the events        */   
 774   1              if(evnt & RESET_A)                  /*reset event             */
 775   1              {
 776   2                  write_usb(NFSR,RST_ST);         /*enter reset state       */   
 777   2                  write_usb(FAR,AD_EN+0);         /*set default address     */
 778   2                  write_usb(EPC0,0x00);          /*enable EP0 only         */
 779   2                  FLUSHTX0;                       /*flush TX0 and disable   */   
 780   2                  write_usb(RXC0,RX_EN);          /*enable the receiver     */
 781   2                      write_usb(ALTMSK,SD3+RESET_A);
 782   2                  write_usb(NFSR,OPR_ST);         /*go operational          */ 
 783   2              }
 784   1      
 785   1              else if(evnt & (SD3 | SD5) )                 /*suspend event           */ 
 786   1              {
 787   2                  write_usb(ALTMSK,RESUME_A + RESET_A);  /*adjust interrupts  */   
 788   2                  write_usb(NFSR,SUS_ST);         /*enter suspend state     */  
 789   2              }
 790   1      
 791   1              else if(evnt & RESUME_A)            /*resume  event           */ 
 792   1              {
 793   2                  write_usb(ALTMSK,SD3+RESET_A);       /*adjust interrupts  */  
 794   2                  write_usb(NFSR,OPR_ST);         /*go operational          */ 
 795   2            //  write_usb(RXC0,RX_EN); 
 796   2              }
 797   1              else                                /*spurious alt. event!    */
 798   1              {
C51 COMPILER V7.06   USB_DRV                                                               08/05/2007 09:42:58 PAGE 14  

 799   2              }
 800   1      
 801   1      }
 802          
 803          void nak0()
 804          {
 805   1           /*important note:  even after servicing a NAK, another NAK      */
 806   1           /*interrupt may occur if another 'OUT' or 'IN' packet comes in  */
 807   1           /*during our NAK service.                                       */
 808   1           /*if we're currently doing something that requires multiple 'IN'*/
 809   1           /*transactions, 'OUT' requests will get NAKs because the FIFO is*/ 
 810   1           /*busy with the TX data.  Since the 'OUT' here means a premature*/  
 811   1           /*end to the previous transfer, just flush the FIFO, disable the*/  
 812   1           /*transmitter, and re-enable the receiver.                      */  
 813   1          if (data_to_transfer>0||zero_packet_flag==TRUE)                   /*get_descr status stage? */   
 814   1          {
 815   2              data_to_transfer=0;                    /*exit get_descr mode     */
 816   2                      zero_packet_flag=FALSE;
 817   2          }
 818   1              FLUSHTX0;                         /*flush TX0 and disable   */ 
 819   1          FLUSHRX0;
 820   1              DelaymS(1);
 821   1          write_usb(RXC0,RX_EN);            /*re-enable the receiver  */   
 822   1      
 823   1          /*we do this stuff for all nak0 events **************************/ 
 824   1      
 825   1      }
 826          
 827          void nakO1()
 828          {
 829   1      //printf("\nOUT");write_usb(RXC1,RX_EN);
 830   1      }
 831          void nakI1()
 832          {
 833   1         
 834   1      }
 835          
 836          void nak2()
 837          {
 838   1      
 839   1      }
 840          
 841          void nak3()
 842          {
 843   1      
 844   1      }
 845          
C51 COMPILER V7.06   USB_DRV                                                               08/05/2007 09:42:58 PAGE 15  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION usb_init (BEGIN)
                                           ; SOURCE LINE # 138
                                           ; SOURCE LINE # 139
                                           ; SOURCE LINE # 140
0000 E4                CLR     A
0001 F500        R     MOV     usb_cfg,A
                                           ; SOURCE LINE # 141
0003 F500        R     MOV     data_to_transfer,A
                                           ; SOURCE LINE # 142
0005 F500        R     MOV     pbuffer,A
0007 F500        R     MOV     pbuffer+01H,A
                                           ; SOURCE LINE # 143
0009 F500        R     MOV     zero_packet_flag,A
                                           ; SOURCE LINE # 144
000B C2B5              CLR     P3_5
                                           ; SOURCE LINE # 145
000D 7F64              MOV     R7,#064H
000F FE                MOV     R6,A
0010 120000      E     LCALL   _DelaymS
                                           ; SOURCE LINE # 146
0013 D2B5              SETB    P3_5
                                           ; SOURCE LINE # 147
0015 7F64              MOV     R7,#064H
0017 7E00              MOV     R6,#00H
0019 120000      E     LCALL   _DelaymS
                                           ; SOURCE LINE # 148
001C 908000            MOV     DPTR,#MCNTRL
001F 7401              MOV     A,#01H
0021 F0                MOVX    @DPTR,A
0022         ?C0001:
                                           ; SOURCE LINE # 149
0022 908000            MOV     DPTR,#MCNTRL
0025 E0                MOVX    A,@DPTR
0026 20E0F9            JB      ACC.0,?C0001
0029         ?C0002:
                                           ; SOURCE LINE # 150
0029 908000            MOV     DPTR,#MCNTRL
002C 74C4              MOV     A,#0C4H
002E F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 151
002F E4                CLR     A
0030 908007            MOV     DPTR,#MAMSK
0033 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 153
0034 90800F            MOV     DPTR,#NAKMSK
0037 7432              MOV     A,#032H
0039 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 154
003A 90800B            MOV     DPTR,#TXMSK
003D 740F              MOV     A,#0FH
003F F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 155
0040 90800D            MOV     DPTR,#RXMSK
0043 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 162
0044 908007            MOV     DPTR,#MAMSK
0047 74D6              MOV     A,#0D6H
0049 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 163
C51 COMPILER V7.06   USB_DRV                                                               08/05/2007 09:42:58 PAGE 16  

004A E4                CLR     A
004B 908016            MOV     DPTR,#DMAMASK
004E F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 165
004F 908004            MOV     DPTR,#FAR
0052 7480              MOV     A,#080H
0054 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 166
0055 E4                CLR     A
0056 908020            MOV     DPTR,#EPC0
0059 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 168
005A 908023            MOV     DPTR,#TXC0
005D 7408              MOV     A,#08H
005F F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 169
0060 908027            MOV     DPTR,#RXC0
0063 7401              MOV     A,#01H
0065 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 170
0066 908005            MOV     DPTR,#NFSR
0069 04                INC     A
006A F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 171
006B 908000            MOV     DPTR,#MCNTRL
006E 74CC              MOV     A,#0CCH
0070 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 172
0071 22                RET     
             ; FUNCTION usb_init (END)

             ; FUNCTION usb_isr (BEGIN)
0000 C0E0              PUSH    ACC
0002 C0F0              PUSH    B
0004 C083              PUSH    DPH
0006 C082              PUSH    DPL
0008 C0D0              PUSH    PSW
000A 75D000            MOV     PSW,#00H
000D C000              PUSH    AR0
000F C001              PUSH    AR1
0011 C002              PUSH    AR2
0013 C003              PUSH    AR3
0015 C004              PUSH    AR4
0017 C005              PUSH    AR5
0019 C006              PUSH    AR6
001B C007              PUSH    AR7
                                           ; SOURCE LINE # 174
                                           ; SOURCE LINE # 177
001D 908006            MOV     DPTR,#MAEV
0020 E0                MOVX    A,@DPTR
0021 F500        R     MOV     evnt,A
                                           ; SOURCE LINE # 178
0023 E500        R     MOV     A,evnt
0025 30E634            JNB     ACC.6,?C0004
                                           ; SOURCE LINE # 179
                                           ; SOURCE LINE # 180
0028 90800C            MOV     DPTR,#RXEV
002B E0                MOVX    A,@DPTR
002C F500        R     MOV     evnt,A
                                           ; SOURCE LINE # 181
002E E500        R     MOV     A,evnt
0030 30E006            JNB     ACC.0,?C0005
C51 COMPILER V7.06   USB_DRV                                                               08/05/2007 09:42:58 PAGE 17  

0033 120000      R     LCALL   rx_0
0036 020000      R     LJMP    ?C0038
0039         ?C0005:
                                           ; SOURCE LINE # 182
0039 E500        R     MOV     A,evnt
003B 30E106            JNB     ACC.1,?C0007
003E 120000      R     LCALL   rx_1
0041 020000      R     LJMP    ?C0038
0044         ?C0007:
                                           ; SOURCE LINE # 183
0044 E500        R     MOV     A,evnt
0046 30E206            JNB     ACC.2,?C0009
0049 120000      R     LCALL   rx_2
004C 020000      R     LJMP    ?C0038
004F         ?C0009:
                                           ; SOURCE LINE # 184
004F E500        R     MOV     A,evnt
0051 20E303            JB      ACC.3,$ + 6H
0054 020000      R     LJMP    ?C0038
0057 120000      R     LCALL   rx_3
005A 8078              SJMP    ?C0038
                                           ; SOURCE LINE # 186
                                           ; SOURCE LINE # 187
                                           ; SOURCE LINE # 188
005C         ?C0004:
                                           ; SOURCE LINE # 189
005C E500        R     MOV     A,evnt
005E 30E22E            JNB     ACC.2,?C0014
                                           ; SOURCE LINE # 190
                                           ; SOURCE LINE # 191
0061 90800A            MOV     DPTR,#TXEV
0064 E0                MOVX    A,@DPTR
0065 F500        R     MOV     evnt,A
                                           ; SOURCE LINE # 192
0067 E500        R     MOV     A,evnt
0069 30E005            JNB     ACC.0,?C0015
006C 120000      R     LCALL   tx_0

⌨️ 快捷键说明

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