📄 protodma.lst
字号:
C51 COMPILER V6.12 PROTODMA 07/30/2003 21:27:44 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE PROTODMA
OBJECT MODULE PLACED IN .\PROTODMA.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE .\PROTODMA.C LARGE DEBUG OBJECTEXTEND
stmt level source
1 //PROTODMA.C
2 #include <string.h>
3 #include "common.h"
4 #include "mainloop.h"
5 #include "usb100.h"
6 #include "chap_9.h"
7 #include "protodma.h"
8
9 extern CONTROL_XFER ControlData;
10 extern IO_REQUEST idata ioRequest;
11 extern EPPFLAGS bEPPflags;
12 BOOL bNoRAM;
13
14 code void(*VendorDeviceRequest[])(void)=
15 {
16 reserved,
17 reserved,
18 reserved,
19 reserved,
20 reserved,
21 reserved,
22 reserved,
23 reserved,
24 reserved,
25 reserved,
26 reserved,
27 reserved,
28 read_write_register,
29 reserved,
30 reserved,
31 reserved
32 };
33
34 void get_firmware_version()
35 {
36 1 unsigned char i;
37 1
38 1 i = 0x30; // firmware version number
39 1 single_transmit((unsigned char *)&i, 1);
40 1 }
41
42 void get_buffer_size()
43 {
44 1 unsigned char i[4];
45 1
46 1 if(bNoRAM == TRUE) {
47 2 i[0] = EP2_PACKET_SIZE;
48 2 i[1] = 0;
49 2 i[2] = 0;
50 2 i[3] = 0;
51 2 } else {
52 2 i[0] = 0;
53 2 i[1] = 1;
54 2 i[2] = 0;
55 2 i[3] = 0;
C51 COMPILER V6.12 PROTODMA 07/30/2003 21:27:44 PAGE 2
56 2 }
57 1 single_transmit((unsigned char *)&i, 4);
58 1 }
59
60 void setup_dma_request()
61 {
62 1 memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
63 1 ControlData.dataBuffer,
64 1 ControlData.DeviceRequest.wLength);
65 1
66 1 ioRequest.uSize = SWAP(ioRequest.uSize);
67 1 ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
68 1
69 1 if(ioRequest.uSize > DMA_BUFFER_SIZE) { // Unaccepted request
70 2 stall_ep0();
71 2 }
72 1 else if(bNoRAM == TRUE && ioRequest.uSize > EP2_PACKET_SIZE) {
73 2 stall_ep0();
74 2 }
75 1 else {
76 2 if(bEPPflags.bits.dma_state == DMA_IDLE) {
77 3 DISABLE;
78 3 bEPPflags.bits.setup_dma ++;
79 3 ENABLE;
80 3 }
81 2 else {
82 3 DISABLE;
83 3 bEPPflags.bits.dma_state = DMA_PENDING;
84 3 ENABLE;
85 3 }
86 2
87 2 } // else if accepted request
88 1 }
89
90 void read_write_register(void)
91 {
92 1 unsigned char i;
93 1
94 1 if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
95 2
96 2 if(bEPPflags.bits.verbose)
97 2 printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
98 2 ControlData.DeviceRequest.wValue,
99 2 ControlData.DeviceRequest.wLength,
100 2 ControlData.DeviceRequest.wIndex);
101 2
102 2 if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
103 2 ControlData.DeviceRequest.wValue == 0 &&
104 2 ControlData.DeviceRequest.wLength == 1)
105 2 get_firmware_version();
106 2 else
107 2 if(ControlData.DeviceRequest.wIndex == GET_BUFFER_SIZE &&
108 2 ControlData.DeviceRequest.wValue == 0 &&
109 2 ControlData.DeviceRequest.wLength == 4)
110 2 get_buffer_size();
111 2 else
112 2 stall_ep0();
113 2
114 2 } // if read register
115 1 else{
116 2 if(bEPPflags.bits.verbose) {
117 3
C51 COMPILER V6.12 PROTODMA 07/30/2003 21:27:44 PAGE 3
118 3 printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
119 3 ControlData.DeviceRequest.wValue,
120 3 ControlData.DeviceRequest.wLength,
121 3 ControlData.DeviceRequest.wIndex);
122 3
123 3 printf("Data: ");
124 3 for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
125 3 printf("0x%bx, ", *((ControlData.dataBuffer)+i));
126 3 printf("\n");
127 3 }
128 2
129 2 if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
130 2 ControlData.DeviceRequest.wValue == 0 &&
131 2 ControlData.DeviceRequest.wLength == 6)
132 2 setup_dma_request();
133 2 else
134 2 stall_ep0();
135 2 } // if write register
136 1 }
137
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 559 ----
CONSTANT SIZE = 188 ----
XDATA SIZE = 1 6
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -