📄 protodma.lst
字号:
222 =1
223 =1
224 =1 #endif /* __USB100_H__ */
31 #include "chap_9.h"
1 =1 /*
2 =1 //*************************************************************************
3 =1 //
4 =1 // P H I L I P S P R O P R I E T A R Y
5 =1 //
6 =1 // COPYRIGHT (c) 1997 BY PHILIPS SINGAPORE.
7 =1 // -- ALL RIGHTS RESERVED --
8 =1 //
9 =1 // File Name: CHAP_9.H
10 =1 // Author: Wenkai Du
11 =1 // Created: 19 Dec 97
12 =1 // Modified:
13 =1 // Revision: 2.0
14 =1 //
15 =1 //*************************************************************************
16 =1 //
17 =1 //*************************************************************************
18 =1 */
19 =1
20 =1
21 =1 #ifndef __CHAP_9_H__
22 =1 #define __CHAP_9_H__
23 =1
24 =1 /*
25 =1 //*************************************************************************
26 =1 // USB Protocol Layer
27 =1 //*************************************************************************
28 =1 */
29 =1
30 =1 /*
31 =1 //*************************************************************************
C51 COMPILER V8.02 PROTODMA 07/27/2007 11:10:49 PAGE 15
32 =1 // USB standard device requests
33 =1 //*************************************************************************
34 =1 */
35 =1 void get_status(void);
36 =1 void clear_feature(void);
37 =1 void set_feature(void);
38 =1 void set_address(void);
39 =1 void get_descriptor(void);
40 =1 void get_configuration(void);
41 =1 void set_configuration(void);
42 =1 void get_interface(void);
43 =1 void set_interface(void);
44 =1
45 =1 void reserved(void);
46 =1
47 =1 #endif
32
33 extern CONTROL_XFER ControlData;
34 extern IO_REQUEST idata ioRequest;
35 extern EPPFLAGS bEPPflags;
36
37 void get_firmware_version()
38 {
39 1 unsigned char i;
40 1
41 1 #ifndef __C51__
i = 0x01; // firmware version number, return 0x01 for PC kit version 1
#else
44 1 i = 0x21; // firmware version number, return 0x11 for PC kit using 8052, 0x21 for USB-EPP
45 1 #endif
46 1 single_transmit((unsigned char *)&i, 1);
47 1 }
48
49 void setup_dma_request()
50 {
51 1 memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
52 1 ControlData.dataBuffer,
53 1 ControlData.DeviceRequest.wLength);
54 1
55 1 ioRequest.uSize = SWAP(ioRequest.uSize);
56 1 ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
57 1
58 1 if(ioRequest.uSize > DMA_BUFFER_SIZE) { // Unaccepted request
59 2 stall_ep0();
60 2 }
61 1 else {
62 2
63 2 if(bEPPflags.bits.dma_state == DMA_IDLE) {
64 3 DISABLE;
65 3 bEPPflags.bits.setup_dma = 1;
66 3 ENABLE;
67 3 }
68 2 else {
69 3 DISABLE;
70 3 bEPPflags.bits.dma_state = DMA_PENDING;
71 3 ENABLE;
72 3 }
73 2
74 2 } // else if accepted request
75 1 }
76
77 void read_write_register(void)
C51 COMPILER V8.02 PROTODMA 07/27/2007 11:10:49 PAGE 16
78 {
79 1 unsigned char i;
80 1
81 1 if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
82 2
83 2 if(bEPPflags.bits.verbose)
84 2 printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
85 2 ControlData.DeviceRequest.wValue,
86 2 ControlData.DeviceRequest.wLength,
87 2 ControlData.DeviceRequest.wIndex);
88 2
89 2 if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
90 2 ControlData.DeviceRequest.wValue == 0 &&
91 2 ControlData.DeviceRequest.wLength == 1)
92 2 get_firmware_version();
93 2 else
94 2 stall_ep0();
95 2
96 2 } // if read register
97 1 else{
98 2 if(bEPPflags.bits.verbose) {
99 3
100 3 printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
101 3 ControlData.DeviceRequest.wValue,
102 3 ControlData.DeviceRequest.wLength,
103 3 ControlData.DeviceRequest.wIndex);
104 3
105 3 printf("Data: ");
106 3 for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
107 3 #ifndef __C51__
printf("0x%x, ", *((ControlData.dataBuffer)+i));
#else
110 3 printf("0x%bx, ", *((ControlData.dataBuffer)+i));
111 3 #endif
112 3 printf("\n");
113 3 }
114 2
115 2 if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
116 2 ControlData.DeviceRequest.wValue == 0 &&
117 2 ControlData.DeviceRequest.wLength == 6)
118 2 setup_dma_request();
119 2 else
120 2 stall_ep0();
121 2 } // if write register
122 1 }
C51 COMPILER V8.02 PROTODMA 07/27/2007 11:10:49 PAGE 17
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION get_firmware_version (BEGIN)
; SOURCE LINE # 37
; SOURCE LINE # 38
; SOURCE LINE # 44
0000 900000 R MOV DPTR,#i
0003 7421 MOV A,#021H
0005 F0 MOVX @DPTR,A
; SOURCE LINE # 46
0006 7B01 MOV R3,#01H
0008 7A00 R MOV R2,#HIGH i
000A 7900 R MOV R1,#LOW i
000C 7D01 MOV R5,#01H
000E 020000 E LJMP _single_transmit
; FUNCTION get_firmware_version (END)
; FUNCTION setup_dma_request (BEGIN)
; SOURCE LINE # 49
; SOURCE LINE # 50
; SOURCE LINE # 51
0000 900000 E MOV DPTR,#ControlData+06H
0003 E0 MOVX A,@DPTR
0004 FE MOV R6,A
0005 A3 INC DPTR
0006 E0 MOVX A,@DPTR
0007 FF MOV R7,A
0008 900000 E MOV DPTR,#ControlData+02H
000B E0 MOVX A,@DPTR
000C FC MOV R4,A
000D A3 INC DPTR
000E E0 MOVX A,@DPTR
000F 2400 E ADD A,#LOW ioRequest
0011 F9 MOV R1,A
0012 7400 E MOV A,#HIGH ioRequest
0014 3C ADDC A,R4
0015 A801 MOV R0,AR1
0017 FC MOV R4,A
0018 7D00 MOV R5,#00H
001A 7B01 MOV R3,#01H
001C 7A00 E MOV R2,#HIGH ControlData+0FH
001E 7900 E MOV R1,#LOW ControlData+0FH
0020 120000 E LCALL ?C?COPY
; SOURCE LINE # 55
0023 7800 E MOV R0,#LOW ioRequest+03H
0025 E6 MOV A,@R0
0026 FC MOV R4,A
0027 08 INC R0
0028 E6 MOV A,@R0
0029 FD MOV R5,A
002A EC MOV A,R4
002B FB MOV R3,A
002C AF05 MOV R7,AR5
002E EF MOV A,R7
002F 18 DEC R0
0030 F6 MOV @R0,A
0031 EB MOV A,R3
0032 08 INC R0
0033 F6 MOV @R0,A
; SOURCE LINE # 56
0034 7800 E MOV R0,#LOW ioRequest
C51 COMPILER V8.02 PROTODMA 07/27/2007 11:10:49 PAGE 18
0036 E6 MOV A,@R0
0037 FC MOV R4,A
0038 08 INC R0
0039 E6 MOV A,@R0
003A FD MOV R5,A
003B EC MOV A,R4
003C FB MOV R3,A
003D AF05 MOV R7,AR5
003F EF MOV A,R7
0040 18 DEC R0
0041 F6 MOV @R0,A
0042 EB MOV A,R3
0043 08 INC R0
0044 F6 MOV @R0,A
; SOURCE LINE # 58
0045 D3 SETB C
0046 7800 E MOV R0,#LOW ioRequest+04H
0048 E6 MOV A,@R0
0049 9400 SUBB A,#00H
004B 18 DEC R0
004C E6 MOV A,@R0
004D 9440 SUBB A,#040H
004F 4003 JC ?C0002
; SOURCE LINE # 59
0051 020000 E LJMP stall_ep0
; SOURCE LINE # 60
0054 ?C0002:
; SOURCE LINE # 61
; SOURCE LINE # 63
0054 900000 E MOV DPTR,#bEPPflags+01H
0057 E0 MOVX A,@DPTR
0058 C4 SWAP A
0059 5403 ANL A,#03H
005B 7007 JNZ ?C0004
; SOURCE LINE # 64
005D C2AF CLR EA
; SOURCE LINE # 65
005F E0 MOVX A,@DPTR
0060 4408 ORL A,#08H
; SOURCE LINE # 66
; SOURCE LINE # 67
0062 800A SJMP ?C0025
0064 ?C0004:
; SOURCE LINE # 68
; SOURCE LINE # 69
0064 C2AF CLR EA
; SOURCE LINE # 70
0066 900000 E MOV DPTR,#bEPPflags+01H
0069 E0 MOVX A,@DPTR
006A 54CF ANL A,#0CFH
006C 4420 ORL A,#020H
006E ?C0025:
006E F0 MOVX @DPTR,A
; SOURCE LINE # 71
006F D2AF SETB EA
; SOURCE LINE # 72
; SOURCE LINE # 74
; SOURCE LINE # 75
0071 ?C0006:
0071 22 RET
; FUNCTION setup_dma_request (END)
C51 COMPILER V8.02 PROTODMA 07/27/2007 11:10:49 PAGE 19
; FUNCTION read_write_register (BEGIN)
; SOURCE LINE # 77
; SOURCE LINE # 78
; SOURCE LINE # 81
0000 900000 E MOV DPTR,#ControlData
0003 E0 MOVX A,@DPTR
0004 30E768 JNB ACC.7,?C0007
; SOURCE LINE # 83
0007 900000 E MOV DPTR,#bEPPflags+01H
000A E0 MOVX A,@DPTR
000B FF MOV R7,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -