📄 upsd_usb.ls1
字号:
0020 FF 627 MOV R7,A
0021 4E 628 ORL A,R6
0022 700F 629 JNZ ?C0005
630 ; {
631 ; SOURCE LINE # 236
632 ; #pragma asm // send zero length packet
633 ; orl UCON0,#uTX0E ;enable transmit
0024 43EA20 634 orl UCON0,#0x20 ;enable transmit
635 ; #pragma endasm
636 ; pTransmitBufferEP0 = NULL; // If data has already been sent...
637 ; SOURCE LINE # 240
0027 900000 F 638 MOV DPTR,#pTransmitBufferEP0
002A E4 639 CLR A
002B F0 640 MOVX @DPTR,A
002C A3 641 INC DPTR
002D F0 642 MOVX @DPTR,A
002E A3 643 INC DPTR
002F F0 644 MOVX @DPTR,A
645 ; }
646 ; SOURCE LINE # 241
0030 020000 F 647 LJMP ?C0006
0033 648 ?C0005:
649 ; else
650 ; {
651 ; SOURCE LINE # 243
A51 MACRO ASSEMBLER UPSD_USB 10/15/2004 20:55:31 PAGE 11
652 ; nBytes = bytesToTransmitEP0; // Transmit next chunk of data
653 ; SOURCE LINE # 244
0033 8E00 F 654 MOV nBytes?341,R6
0035 8F00 F 655 MOV nBytes?341+01H,R7
656 ; if (nBytes > 8)
657 ; SOURCE LINE # 245
0037 D3 658 SETB C
0038 E500 F 659 MOV A,nBytes?341+01H
003A 9408 660 SUBB A,#08H
003C E500 F 661 MOV A,nBytes?341
003E 6480 662 XRL A,#080H
0040 9480 663 SUBB A,#080H
0042 4006 664 JC ?C0007
665 ; {
666 ; SOURCE LINE # 246
667 ; nBytes = 8;
668 ; SOURCE LINE # 247
0044 750000 F 669 MOV nBytes?341,#00H
0047 750008 F 670 MOV nBytes?341+01H,#08H
671 ; }
672 ; SOURCE LINE # 248
004A 673 ?C0007:
674 ; UCON0 |= nBytes; // set FIFO size
675 ; SOURCE LINE # 249
004A E500 F 676 MOV A,nBytes?341+01H
004C 42EA 677 ORL UCON0,A
678 ;
679 ; for (i = 0; i < nBytes; i++) // Load data into FIFO
680 ; SOURCE LINE # 251
004E E4 681 CLR A
004F F500 F 682 MOV i?340,A
0051 F500 F 683 MOV i?340+01H,A
0053 684 ?C0008:
0053 C3 685 CLR C
0054 E500 F 686 MOV A,i?340+01H
0056 9500 F 687 SUBB A,nBytes?341+01H
0058 E500 F 688 MOV A,nBytes?341
005A 6480 689 XRL A,#080H
005C F8 690 MOV R0,A
005D E500 F 691 MOV A,i?340
005F 6480 692 XRL A,#080H
0061 98 693 SUBB A,R0
0062 501F 694 JNC ?C0009
695 ; {
696 ; SOURCE LINE # 252
697 ; UDT0 = *pTransmitBufferEP0++;
698 ; SOURCE LINE # 253
0064 900000 F 699 MOV DPTR,#pTransmitBufferEP0
0067 E0 700 MOVX A,@DPTR
0068 FB 701 MOV R3,A
0069 A3 702 INC DPTR
006A E4 703 CLR A
006B 75F001 704 MOV B,#01H
006E 120000 F 705 LCALL ?C?ILDIX
0071 A9F0 706 MOV R1,B
0073 FA 707 MOV R2,A
0074 120000 F 708 LCALL ?C?CLDPTR
0077 F5E7 709 MOV UDT0,A
710 ; }
711 ; SOURCE LINE # 254
0079 0500 F 712 INC i?340+01H
007B E500 F 713 MOV A,i?340+01H
007D 70D4 714 JNZ ?C0008
007F 0500 F 715 INC i?340
0081 716 ?C0107:
0081 80D0 717 SJMP ?C0008
A51 MACRO ASSEMBLER UPSD_USB 10/15/2004 20:55:31 PAGE 12
0083 718 ?C0009:
719 ;
720 ; if ((bytesToTransmitEP0 -= nBytes) == 0)
721 ; SOURCE LINE # 256
0083 C3 722 CLR C
0084 900000 F 723 MOV DPTR,#bytesToTransmitEP0+01H
0087 E0 724 MOVX A,@DPTR
0088 9500 F 725 SUBB A,nBytes?341+01H
008A FF 726 MOV R7,A
008B 900000 F 727 MOV DPTR,#bytesToTransmitEP0
008E E0 728 MOVX A,@DPTR
008F 9500 F 729 SUBB A,nBytes?341
0091 FE 730 MOV R6,A
0092 F0 731 MOVX @DPTR,A
0093 A3 732 INC DPTR
0094 EF 733 MOV A,R7
0095 F0 734 MOVX @DPTR,A
0096 4E 735 ORL A,R6
0097 701C 736 JNZ ?C0011
737 ; {
738 ; SOURCE LINE # 257
739 ; // For short transfers, we need to send a zero length terminator
740 ; if (!shortTransfer || (nBytes < 8))
741 ; SOURCE LINE # 259
0099 900000 F 742 MOV DPTR,#shortTransfer
009C E0 743 MOVX A,@DPTR
009D 600D 744 JZ ?C0013
009F C3 745 CLR C
00A0 E500 F 746 MOV A,nBytes?341+01H
00A2 9408 747 SUBB A,#08H
00A4 E500 F 748 MOV A,nBytes?341
00A6 6480 749 XRL A,#080H
00A8 9480 750 SUBB A,#080H
00AA 5009 751 JNC ?C0011
00AC 752 ?C0013:
753 ; {
754 ; SOURCE LINE # 260
755 ; pTransmitBufferEP0 = NULL; // it will be sent the next cycle
756 ; SOURCE LINE # 261
00AC 900000 F 757 MOV DPTR,#pTransmitBufferEP0
00AF E4 758 CLR A
00B0 F0 759 MOVX @DPTR,A
00B1 A3 760 INC DPTR
00B2 F0 761 MOVX @DPTR,A
00B3 A3 762 INC DPTR
00B4 F0 763 MOVX @DPTR,A
764 ; }
765 ; SOURCE LINE # 262
766 ; }
767 ; SOURCE LINE # 263
00B5 768 ?C0011:
769 ; #pragma asm
770 ; orl UCON0,#uTX0E ; enable transmit
00B5 43EA20 771 orl UCON0,#0x20 ; enable transmit
772 ; #pragma endasm
773 ; }
774 ; SOURCE LINE # 267
00B8 775 ?C0006:
776 ; return TRUE;
777 ; SOURCE LINE # 268
00B8 7F01 778 MOV R7,#01H
00BA 22 779 RET
780 ; }
781 ; SOURCE LINE # 269
00BB 782 ?C0004:
783 ;
A51 MACRO ASSEMBLER UPSD_USB 10/15/2004 20:55:31 PAGE 13
784 ; #pragma asm // No data going out, so disable endpoint
785 ; anl UCON0,#uRX0E ;mask
00BB 53EA10 786 anl UCON0,#0x10 ;mask
787 ; orl UCON0,#uTSEQ0 ;set TSEQ bit
00BE 43EA80 788 orl UCON0,#0x80 ;set TSEQ bit
789 ; #pragma endasm
790 ;
791 ; return FALSE;
792 ; SOURCE LINE # 276
00C1 7F00 793 MOV R7,#00H
794 ; }
795 ; SOURCE LINE # 277
00C3 796 ?C0014:
00C3 22 797 RET
798 ; END OF TransmitBufferEP0
799
800 ;
801 ;
802 ;
803 ;
804 ;
805 ;
806 ;
807 ;
808 ; void TransmitDataEP0(uchar* pData, int nBytes)
809
---- 810 RSEG ?PR?_TransmitDataEP0?UPSD_USB
0000 811 _TransmitDataEP0:
812 USING 0
813 ; SOURCE LINE # 286
0000 900000 F 814 MOV DPTR,#pData?442
0003 EB 815 MOV A,R3
0004 F0 816 MOVX @DPTR,A
0005 A3 817 INC DPTR
0006 EA 818 MOV A,R2
0007 F0 819 MOVX @DPTR,A
0008 A3 820 INC DPTR
0009 E9 821 MOV A,R1
000A F0 822 MOVX @DPTR,A
823 ;---- Variable 'nBytes?443' assigned to Register 'R4/R5' ----
824 ; /******************************************************************************
825 ; Function : void TransmitDataEP0()
826 ; Parameters : (uchar* pData, int nBytes)
827 ; Description: Load and arm EP0 to transmit data.
828 ; This routine prepates 0..8 bytes of data at endpoint0 to be trasmitted.
829 ; Caller must then clear FIFO status flag (uTXD0F) to arm the endpoint.
830 ; ******************************************************************************/
831 ; {
832 ; SOURCE LINE # 294
833 ; data unsigned char xBytes;
834 ;
835 ; if (nBytes > EP0_SIZE) xBytes = EP0_SIZE; else xBytes = nBytes;
836 ; SOURCE LINE # 297
000B D3 837 SETB C
000C ED 838 MOV A,R5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -