📄 fusb200.lst
字号:
185 6
186 6 //Interface description
187 6 XBYTE[FUSB_REG_EP0_DATA] = 0x09;//InterfaceDscr.bLength;
188 6 XBYTE[FUSB_REG_EP0_DATA] = 0x04;//InterfaceDscr.bDescriptorType;
189 6 XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.bInterfaceNumber
190 6 XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.bAlternateSetting
191 6 XBYTE[FUSB_REG_EP0_DATA] = 0x02;//InterfaceDscr.bNumEndPoints;
192 6 XBYTE[FUSB_REG_EP0_DATA] = 0x08;//InterfaceDscr.bInterfaceClass; /*Storage class*/
193 6 XBYTE[FUSB_REG_EP0_DATA] = 0x01;//InterfaceDscr.bInterfaceSubClass;/*Flash device*/
194 6 XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.bInterfaceProtocol;/*Control/Bulk/Interrupt protocol
- with command*/
195 6 XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.iInterface;
196 6
197 6 //EndPoint1 description(IN)
198 6 XBYTE[FUSB_REG_EP0_DATA] = 0x07;//InterfaceDscr.bLength;
199 6 XBYTE[FUSB_REG_EP0_DATA] = 0x05;//InterfaceDscr.bDescriptorType;
200 6 XBYTE[FUSB_REG_EP0_DATA] = 0x81;//InterfaceDscr.bEndPointAddress;
201 6 XBYTE[FUSB_REG_EP0_DATA] = 0x02;//InterfaceDscr.bmAttributes;
202 6 XBYTE[FUSB_REG_EP0_DATA] = 0x00;//GET_LOW(InterfaceDscr.wMaxPacketSize);
203 6 XBYTE[FUSB_REG_EP0_DATA] = 0x02;//GET_HIGH(InterfaceDscr.wMaxPacketSize);
204 6 XBYTE[FUSB_REG_EP0_DATA] = 0x01;//InterfaceDscr.bIntervel;
205 6 //EndPoint2 description(OUT)
206 6 XBYTE[FUSB_REG_EP0_DATA] = 0x07;//InterfaceDscr.bLength;
207 6 XBYTE[FUSB_REG_EP0_DATA] = 0x05;//InterfaceDscr.bDescriptorType;
208 6 XBYTE[FUSB_REG_EP0_DATA] = 0x02;//InterfaceDscr.bEndPointAddress;
209 6 XBYTE[FUSB_REG_EP0_DATA] = 0x02;//InterfaceDscr.bmAttributes;
210 6 XBYTE[FUSB_REG_EP0_DATA] = 0x00;//GET_LOW(InterfaceDscr.wMaxPacketSize);
211 6 XBYTE[FUSB_REG_EP0_DATA] = 0x02;//GET_HIGH(InterfaceDscr.wMaxPacketSize);
212 6 XBYTE[FUSB_REG_EP0_DATA] = 0x01;//InterfaceDscr.bIntervel;
213 6
214 6 ///Interface AlternateSetting
215 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x09;//InterfaceDscr.bLength;
216 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x04;//InterfaceDscr.bDescriptorType;
217 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x01;//InterfaceDscr.bInterfaceNumber
218 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.bAlternateSetting
219 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x02;//InterfaceDscr.bNumEndPoints;
220 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x08;//InterfaceDscr.bInterfaceClass; /*Storage class*/
221 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x01;//InterfaceDscr.bInterfaceSubClass;/*Flash device*/
222 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.bInterfaceProtocol;/*Control/Bulk/Interrupt protoc
-ol with command*/
223 6 //XBYTE[FUSB_REG_EP0_DATA] = 0x00;//InterfaceDscr.iInterface;
224 6
225 6 //DeviceTypeDefinition descriptions
226 6
227 6 //VendorDefinition description
228 6
229 6 //CX writen done
230 6 XBYTE[FUSB_REG_CX_CSR] |= 0x01;
231 6 }
232 5 }
233 4 }
234 3 else if(dev_req.wValue == 0x0300)//Type--string descriptor
235 3 {
236 4 ;
237 4 }
C51 COMPILER V7.50 FUSB200 11/21/2008 15:02:59 PAGE 5
238 3 }
239 2 //SetAddress request
240 2 else if(dev_req.bmRequestType == 0x00 && dev_req.bRequest == 0x05)
241 2 {
242 3 if(dev_req.wValue != 0x0000)
243 3 {
244 4 //Clear EndPoint0 FIFO
245 4 XBYTE[FUSB_REG_CX_CSR] |= 0x08;
246 4
247 4 //Write new address to the device address register
248 4 XBYTE[FUSB_REG_DEVICE_ADDR] = (meg[2] & 0x7f);
249 4
250 4 //CX writen done
251 4 XBYTE[FUSB_REG_CX_CSR] |= 0x01;
252 4 }
253 3 }
254 2 //SetConfiguration request
255 2 else if(dev_req.bmRequestType == 0x00 && dev_req.bRequest == 0x09)
256 2 {
257 3 if(dev_req.wValue == 0x01)
258 3 {
259 4 //CX writen done
260 4 XBYTE[FUSB_REG_CX_CSR] |= 0x01;
261 4 //Delay 30us
262 4 delay();
263 4 delay();
264 4 XBYTE[FUSB_REG_INT_MSKB5] = 0xfd; //Unmask FIFO1 interrupt for EP1 IN
265 4 XBYTE[FUSB_REG_INT_MSKB1] = 0x3f; //Unmask FIFO3 OUT&Short Packetinterrupt for EP2 OUT
266 4 XBYTE[FUSB_REG_INT_MSKB7] = 0x3d; //Unmask RX0, TX0 and RST INT
267 4 }
268 3 }
269 2 }
270 1 }
271
272
273 //EndPoint1 interrupt service(IN)
274 void ep1_int_service(void)
275 {
276 1 //Mask interrupt of FIFO0
277 1 XBYTE[FUSB_REG_INT_MSKB5] = 0x01;
278 1
279 1 P0_0 = 0;
280 1 P0_0 = 1;
281 1
282 1 //while(1)
283 1 //{
284 1 // if(IE0)
285 1 // {
286 1 // //FIFO1 Written done
287 1 // XBYTE[FUSB_REG_FIFO1_INS] |= 0x08;
288 1 // break;
289 1 // }
290 1 //}
291 1
292 1 // //TX0BYTE_IEP1
293 1 // XBYTE[FUSB_REG_IEP1_XPSZ_H] |= 0x80;
294 1
295 1 //XBYTE[FUSB_REG_INT_SOURCE7] = 0x40;
296 1 //FIFO1 Written done
297 1 //XBYTE[FUSB_REG_FIFO1_INS] |= 0x08;
298 1
299 1 //Unmask interrupt of FIFO0
C51 COMPILER V7.50 FUSB200 11/21/2008 15:02:59 PAGE 6
300 1 XBYTE[FUSB_REG_INT_MSKB5] &= 0xfe;
301 1
302 1 }
303
304 //EndPoint2 interrupt service(OUT)
305 void ep2_int_service(void)
306 {
307 1 u8 i;
308 1 u8 rdata[16];
309 1 u16 byte_cnt;
310 1
311 1 //Mask interrupt of FIFO2
312 1 XBYTE[FUSB_REG_INT_MSKB1] = 0xff;
313 1
314 1 //Short packet interrupt
315 1 if(XBYTE[FUSB_REG_INT_SOURCE2] & 0x20)
316 1 {
317 2 //Read byte counter
318 2 byte_cnt = BYTE_TO_WORD((XBYTE[FUSB_REG_FIFO0_INS] & 0x07), (XBYTE[FUSB_REG_FIFO0_BCNT]));//??
319 2 }
320 1 //Normal packet interrupt
321 1 else
322 1 {
323 2 //Max packet size
324 2 byte_cnt = FUSB_EP2_SIZE;
325 2 }
326 1
327 1 //Read data from FIFO
328 1 //rx_data();
329 1 for(i=0;i<byte_cnt;i++)
330 1 {
331 2 rdata[i] = XBYTE[FUSB_REG_FIFO2_DP];
332 2 }
333 1
334 1 //For testing OUT data
335 1 if(rdata[0] == 0x55)
336 1 {
337 2 byte_cnt = 0x00;
338 2 i = 0xaa;
339 2 }
340 1
341 1 //Clear the byte counter
342 1 XBYTE[FUSB_REG_FIFO0_INS] &= 0xf8;//??
343 1 XBYTE[FUSB_REG_FIFO0_BCNT] = 0x00;//??
344 1 //Unmask interrupt of FIFO2
345 1 XBYTE[FUSB_REG_INT_MSKB1] = 0xcf;
346 1 }
347
348 //void EX0_int(void) interrupt 0
349 //{
350 // //TX0BYTE_IEP1
351 // XBYTE[FUSB_REG_IEP1_XPSZ_H] |= 0x80;
352 //}
353 //void rx_data()
354 //{
355 // ;
356 //}
357 //
358 //void tx_data()
359 //{
360 // ;
361 //}
C51 COMPILER V7.50 FUSB200 11/21/2008 15:02:59 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 635 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 24
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 + -