📄 chap_9.lst
字号:
234 1 else if(ctrl_buf.dev_req.value==1)
235 1 {
236 2 single_transmit(0,0);
237 2 init_unconfig();
238 2 init_config();
239 2 DISABLE_ALL_INTERRUPT;
240 2 flag.bits.config=1;
241 2 ENABLE_ALL_INTERRUPT;
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 5
242 2 }
243 1 else
244 1 stall_ep0();
245 1 }
246 /**************************************
247
248 **************************************/
249 void get_interface()
250 {
251 1
252 1 unsigned char txdat=0;
253 1 //printf("get interface \n");
254 1 single_transmit(&txdat,1);
255 1 }
256 /**************************************
257
258 **************************************/
259 void set_interface()
260 {
261 1 if((ctrl_buf.dev_req.value==0)&&(ctrl_buf.dev_req.index==0))
262 1 single_transmit(0,0);
263 1 else
264 1 stall_ep0();
265 1 }
266 /**************************************
267
268 **************************************/
269 void set_feature()
270 {
271 1 unsigned char endp;
272 1 unsigned char bRecipient=ctrl_buf.dev_req.req_type & USB_RECIPIENT;
273 1 if(bRecipient==USB_RECIPIENT_DEVICE && ctrl_buf.dev_req.value == USB_FEATURE_REMOTE_WAKEUP )
274 1 {
275 2 DISABLE_ALL_INTERRUPT;
276 2 flag.bits.remote_wakup=1;
277 2 ENABLE_ALL_INTERRUPT;
278 2 single_transmit(0,0);
279 2 }
280 1 else if(bRecipient==USB_RECIPIENT_ENDPOINT && ctrl_buf.dev_req.value == USB_FEATURE_ENDPOINT_STALL)
281 1 {
282 2 endp=(unsigned char)(ctrl_buf.dev_req.index & 0x0F);
283 2 if(ctrl_buf.dev_req.index & (unsigned char)USB_ENDPOINT_DIRECTION_MASK )
284 2 d12_set_endpoint_status(endp*2+1,1);
285 2 else
286 2 d12_set_endpoint_status(endp*2,1);
287 2 single_transmit(0,0);
288 2 }
289 1 else
290 1 stall_ep0();
291 1 }
292 /**************************************
293
294 **************************************/
295 void clear_feature()
296 {
297 1 unsigned char endp;
298 1 unsigned char bRecipient=ctrl_buf.dev_req.req_type & USB_RECIPIENT;
299 1 if(bRecipient==USB_RECIPIENT_DEVICE && ctrl_buf.dev_req.value == USB_FEATURE_REMOTE_WAKEUP )
300 1 {
301 2 DISABLE_ALL_INTERRUPT;
302 2 flag.bits.remote_wakup=0;
303 2 ENABLE_ALL_INTERRUPT;
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 6
304 2 single_transmit(0,0);
305 2 }
306 1 else if(bRecipient==USB_RECIPIENT_ENDPOINT && ctrl_buf.dev_req.value == USB_FEATURE_ENDPOINT_STALL)
307 1 {
308 2 endp=(unsigned char)(ctrl_buf.dev_req.index & 0x0F);
309 2 if(ctrl_buf.dev_req.index & (unsigned char)USB_ENDPOINT_DIRECTION_MASK )
310 2 d12_set_endpoint_status(endp*2+1,0);
311 2 else
312 2 d12_set_endpoint_status(endp*2,0);
313 2 single_transmit(0,0);
314 2 }
315 1 else
316 1 stall_ep0();
317 1 }
318 /**************************************
319
320 /**************************************/
321 //标准请求中用到的例程
322 /**************************************/
323
324
325 /**************************************
326
327 **************************************/
328 void stall_ep0()
329 {
330 1 d12_set_endpoint_status(0,0);
331 1 }
332 /**************************************
333
334 **************************************/
335 void reserved()
336 {
337 1 stall_ep0();
338 1 }
339 /**************************************
340
341 **************************************/
342 void init_unconfig()
343 {
344 1 d12_set_endpoint_enable(0);
345 1 }
346 /**************************************
347
348 **************************************/
349 void init_config()
350 {
351 1 d12_set_endpoint_enable(1);
352 1 }
353
354
355 /**************************************
356
357 **************************************/
358 void single_transmit(unsigned char *buf,unsigned char len)
359 {
360 1 if(len<=EP0_PACKET_SIZE)
361 1 {
362 2 d12_write_endpoint(1,buf,len);
363 2 }
364 1 }
365 /**************************************
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 7
366
367 **************************************/
368 void code_transmit(unsigned char code *pRomData,unsigned short len)
369 {
370 1 ctrl_buf.count=0;
371 1 if(ctrl_buf.len>len)
372 1 ctrl_buf.len=len;
373 1 ctrl_buf.buf=pRomData;
374 1 if(ctrl_buf.len>EP0_PACKET_SIZE)
375 1 {
376 2 d12_write_endpoint(1,ctrl_buf.buf,EP0_PACKET_SIZE);
377 2 ctrl_buf.count+=EP0_PACKET_SIZE;
378 2 DISABLE_ALL_INTERRUPT;
379 2 flag.bits.ctrl_state=USB_TRANSMIT;
380 2 ENABLE_ALL_INTERRUPT;
381 2 }
382 1 else
383 1 {
384 2 d12_write_endpoint(1,pRomData,ctrl_buf.len);
385 2 ctrl_buf.count+=ctrl_buf.len;
386 2 DISABLE_ALL_INTERRUPT;
387 2 flag.bits.ctrl_state=USB_IDLE;
388 2 ENABLE_ALL_INTERRUPT;
389 2 }
390 1 }
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
C51 COMPILER V7.07 CHAP_9 06/04/2004 18:36:43 PAGE 8
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 613 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
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 + -