📄 chap_9.lst
字号:
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN CHAP_9.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE CHAP_9.c DB OE SMALL ROM(LARGE)
stmt level source
1 //**********************************************************************************************//
2 /* */
3 /* USB to Serial V1.0版 */
4 /* */
5 /* FirmWare Files */
6 /* COPYRIGHT (c) 2004 BY GARY 应用物理学 物理实验中心 */
7 /* */
8 /* Files Name: CHAP_9.C */
9 /* Author: Gary Zou LuDing */
10 /* Created: March 2004 */
11 /* Modified: */
12 /* Revision: 1.0 */
13 /* Other Details: */
14 /* */
15 /* */
16 /* */
17 //**********************************************************************************************//
18
19 #include <stdio.h>
20 #include <string.h>
21
22 #include "usb100.h"
23 #include "reg52.h"
24 #include "hal.h"
25 #include "d12ci.h"
26 #include "isr.h"
27 #include "chap_9.h"
28 #include "vendor.h"
29 #include "main.h"
30
31 extern FLAG flag;
32 extern CTRL_BUF ctrl_buf;
33 extern unsigned char idata enp1_buf[16];
34 extern unsigned char idata enp2_buf[64];
35
36
37
38 /***************************************
39 设备描述符实例
40 ***************************************/
41 code USB_DEVICE_DESCRIPTOR DeviceDescr=
42 {
43 sizeof(USB_DEVICE_DESCRIPTOR),
44 USB_DEVICE_DESCRIPTOR_TYPE,
45 SWAP(0x0110),
46 USB_CLASS_CODE_TEST_CLASS_DEVICE,
47 0,0,
48 EP0_PACKET_SIZE,
49 SWAP(0x0990),
50 SWAP(0x0880),
51 SWAP(0x0100),
52 0,0,0,
53 1
54 };
55 /***************************************
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 2
56 配置描述符实例
57 ***************************************/
58 code USB_CONFIGURATION_DESCRIPTOR ConfigDescr=
59 {
60 sizeof(USB_CONFIGURATION_DESCRIPTOR),
61 USB_CONFIGURATION_DESCRIPTOR_TYPE,
62 SWAP(CONFIG_DESCRIPTOR_LENGTH),
63 1,
64 1,
65 0,
66 0xa0,
67 0x32
68 };
69 /***************************************
70 接口描述符实例
71 ***************************************/
72 code USB_INTERFACE_DESCRIPTOR InterfaceDescr=
73 {
74 sizeof(USB_INTERFACE_DESCRIPTOR),
75 USB_INTERFACE_DESCRIPTOR_TYPE,
76 0,
77 0,
78 NUM_ENDPOINTS,
79 USB_CLASS_CODE_TEST_CLASS_DEVICE,
80 USB_SUBCLASS_CODE_TEST_CLASS_D12,
81 USB_PROTOCOL_CODE_TEST_CLASS_D12,
82 0
83 };
84 /***************************************
85 端点描述符实例
86 端点1输入
87 ***************************************/
88 code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr=
89 {
90 sizeof(USB_ENDPOINT_DESCRIPTOR),
91 USB_ENDPOINT_DESCRIPTOR_TYPE,
92 0x81,
93 USB_ENDPOINT_TYPE_INTERRUPT,
94 SWAP(EP1_PACKET_SIZE),
95 1
96 };
97 /***************************************
98 端点描述符实例
99 端点1输出
100 ***************************************/
101 code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr=
102 {
103 sizeof(USB_ENDPOINT_DESCRIPTOR),
104 USB_ENDPOINT_DESCRIPTOR_TYPE,
105 0x1,
106 USB_ENDPOINT_TYPE_INTERRUPT,
107 SWAP(EP1_PACKET_SIZE),
108 1
109 };
110 /***************************************
111 端点描述符实例
112 端点2输入
113 ***************************************/
114 code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr=
115 {
116 sizeof(USB_ENDPOINT_DESCRIPTOR),
117 USB_ENDPOINT_DESCRIPTOR_TYPE,
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 3
118 0x82,
119 USB_ENDPOINT_TYPE_BULK,
120 SWAP(EP2_PACKET_SIZE),
121 10
122 };
123 /***************************************
124 端点描述符实例
125 端点2输出
126 ***************************************/
127 code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr=
128 {
129 sizeof(USB_ENDPOINT_DESCRIPTOR),
130 USB_ENDPOINT_DESCRIPTOR_TYPE,
131 0x2,
132 USB_ENDPOINT_TYPE_BULK,
133 SWAP(EP2_PACKET_SIZE),
134 10
135 };
136
137
138
139
140
141 /**************************************
142 USB 标准设备请求服务程序
143 **************************************/
144 void get_status()
145 {
146 1 unsigned char endp,txdat[2];
147 1 unsigned char bRecipient = ctrl_buf.dev_req.req_type & USB_RECIPIENT;
148 1 unsigned char c;
149 1 if(bRecipient==USB_RECIPIENT_DEVICE)
150 1 {
151 2 if(flag.bits.remote_wakup==1) //总线供电
152 2 txdat[0]=2;
153 2 else
154 2 txdat[0]=0;
155 2 txdat[1]=0;
156 2 single_transmit(txdat,2);
157 2 }
158 1 else if(bRecipient== USB_RECIPIENT_INTERFACE)
159 1 {
160 2 txdat[0]=0;
161 2 txdat[1]=0;
162 2 single_transmit(txdat,2);
163 2 }
164 1 else if(bRecipient==USB_RECIPIENT_ENDPOINT)
165 1 {
166 2 endp=(unsigned char )(ctrl_buf.dev_req.index & 0x0F);
167 2 if(ctrl_buf.dev_req.index & (unsigned char )USB_ENDPOINT_DIRECTION_MASK )
168 2 c = d12_select_endpoint(endp*2+1);
169 2 else
170 2 c = d12_select_endpoint(endp*2);
171 2 if((c & ENDPOINT_STALL_MASK)!=0)
172 2 txdat[0]=1;
173 2 else
174 2 txdat[0]=0;
175 2 txdat[1]=0;
176 2 single_transmit(txdat,2);
177 2 }
178 1 else stall_ep0();
179 1 }
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 4
180 /**************************************
181
182 **************************************/
183 void set_address()
184 {
185 1 //printf("set address\n");
186 1 d12_set_address_enable((unsigned char )((ctrl_buf.dev_req.value) & DEVICE_ADDRESS_MASK),1);
187 1 single_transmit(0,0);
188 1 }
189 /**************************************
190
191 **************************************/
192 void get_descriptor()
193 {
194 1
195 1 unsigned char bDescriptor=MSB(ctrl_buf.dev_req.value);
196 1 //printf ("call get descriptor\n");
197 1 if(bDescriptor==USB_DEVICE_DESCRIPTOR_TYPE)
198 1 {
199 2 code_transmit((unsigned char *)&DeviceDescr,sizeof(USB_DEVICE_DESCRIPTOR));
200 2 }
201 1 else if(bDescriptor==USB_CONFIGURATION_DESCRIPTOR_TYPE)
202 1 {
203 2 if(ctrl_buf.dev_req.len>CONFIG_DESCRIPTOR_LENGTH) //第二次发送配置描述符集合
204 2 ctrl_buf.dev_req.len=CONFIG_DESCRIPTOR_LENGTH;
205 2 code_transmit((unsigned char *)&ConfigDescr,ctrl_buf.dev_req.len);
206 2 }
207 1 else
208 1 stall_ep0();
209 1 }
210 /**************************************
211
212 **************************************/
213 void get_configuration()
214 {
215 1 //-unsigned char c;
216 1 //-flag.bits.config=1;
217 1 //-c=flag.bits.config;
218 1 unsigned char c=flag.bits.config;//+
219 1 single_transmit(&c,1);
220 1 }
221 /**************************************
222
223 **************************************/
224 void set_configuration()
225 {
226 1 if(ctrl_buf.dev_req.value==0)
227 1 {
228 2 single_transmit(0,0);
229 2 DISABLE_ALL_INTERRUPT;
230 2 flag.bits.config=0;
231 2 ENABLE_ALL_INTERRUPT;
232 2 init_unconfig();
233 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -