📄 usb_drv.lst
字号:
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 + -