📄 chap_9.lst
字号:
429 4 if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
430 4 Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
431 4 if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
432 4 Descriptor_Ptr = &HS_Bulk_In_Descriptor[0]; //set pointer to interface descriptor
433 4 count = *Descriptor_Ptr; //read in descriptor length
434 4 //写入端点2IN描述符
435 4 while(count != 0)
436 4 {
437 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
438 5 count--;
439 5 Descriptor_Ptr++;
440 5 }
441 4 //选择高速还是全速端点2OUT描述符
442 4 if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
443 4 Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
444 4 if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
445 4 Descriptor_Ptr = &HS_Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
446 4 count = *Descriptor_Ptr; //read in descriptor length
447 4 //写入端点2OUT描述符
448 4 while(count != 0)
449 4 {
450 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
451 5 count--;
452 5 Descriptor_Ptr++;
453 5 }
454 4 }
455 3 //使端点有效
456 3 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1; //validate FIFO
457 3 wait_ep0tx();
458 3 ep0out_ack();
459 3 }
460 2 break;
461 2
462 2 case 3: //获取字符串描述符
463 2 Descriptor_Ptr = &Standard_String_ID[0]; //set pointer to interface descriptor
464 2 count = *Descriptor_Ptr; //get length
465 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
466 2 if(USB_Device_Request.wLength < count)
467 2 count = USB_Device_Request.wLength; //get the remaining length
468 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
469 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
470 2 //send string ID
471 2 while(count != 0)
472 2 {
473 3 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
474 3 Descriptor_Ptr++;
475 3 count--;
476 3 }
477 2 wait_ep0tx();
478 2 ep0out_ack();
479 2 break;
480 2
481 2
482 2 case 4:
483 2 reserved();
484 2 break;
485 2
486 2 case 5: //获取端点描述符
487 2 Temp = 0;
488 2 if((USB_Device_Request.wValue & 0x00ff) > 0x0001)
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 9
489 2 {
490 3 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
491 3 while(!USB_Int_Flag.BITS.EP0SETUP)
492 3 {
493 4 //读取ISP1581中断寄存器
494 4 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
495 4 //回写ISP1581中断寄存器
496 4 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
497 4 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
498 4 return;
499 4 }
500 3 USB_Int_Flag.BITS.EP0TX = 0;
501 3 }
502 2 else
503 2 {
504 3 Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor
505 3 count = *Descriptor_Ptr; //read in descriptor length
506 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
507 3 if(count >= USB_Device_Request.wLength)
508 3 {
509 4 Temp = USB_Device_Request.wLength;
510 4 //send endpoint descriptor
511 4 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
512 4 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
513 4 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
514 4 {
515 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
516 5 Descriptor_Ptr++;
517 5 }
518 4 wait_ep0tx();
519 4 ep0out_ack();
520 4 }
521 3 else
522 3 {
523 4 USB_Device_Request.wLength -= count; //send Endpoint descriptor
524 4 Temp += count;
525 4 while(count != 0)
526 4 {
527 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
528 5 count--;
529 5 Descriptor_Ptr++;
530 5 }
531 4 Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
532 4 count = *Descriptor_Ptr; //read in descriptor length
533 4 if(count >= USB_Device_Request.wLength)
534 4 {
535 5 Temp += USB_Device_Request.wLength;
536 5 //send endpoint descriptor
537 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
538 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
539 5 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
540 5 {
541 6 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
542 6 Descriptor_Ptr++;
543 6 }
544 5 wait_ep0tx();
545 5 ep0out_ack();
546 5 }
547 4 else
548 4 {
549 5 USB_Device_Request.wLength -= count; //send Endpoint descriptor
550 5 Temp += count;
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 10
551 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
552 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
553 5 while(count != 0)
554 5 {
555 6 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
556 6 count--;
557 6 Descriptor_Ptr++;
558 6 }
559 5 wait_ep0tx();
560 5 ep0out_ack();
561 5 }
562 4 }
563 3 }
564 2 break;
565 2
566 2 case 6: //获取设备限制描述符
567 2 Descriptor_Ptr = &HS_Device_Qualifier[0]; //set pointer to High Speed device descriptor
568 2 count = *Descriptor_Ptr; //read in descriptor length
569 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
570 2 if(USB_Device_Request.wLength < count)
571 2 {
572 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
573 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
574 3 count = USB_Device_Request.wLength;
575 3 }
576 2 else
577 2 {
578 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
579 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
580 3 }
581 2 while(count != 0)
582 2 {
583 3 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
584 3 Descriptor_Ptr++;
585 3 count--;
586 3 };
587 2 wait_ep0tx();
588 2 ep0out_ack();
589 2 break;
590 2
591 2 case 7 ://获取速度配置描述符
592 2 Temp = 64;
593 2 Descriptor_Ptr = &Other_Speed_Config_Descriptor[0]; //set pointer to configuration descriptor
594 2 count = *Descriptor_Ptr; //get configuration Descriptor length
595 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
596 2 if(count >= USB_Device_Request.wLength) //Send only Configuration descriptor
597 2 {
598 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
599 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
600 3 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
601 3 {
602 4 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
603 4 Descriptor_Ptr++;
604 4 }
605 3 wait_ep0tx();
606 3 ep0out_ack();
607 3 }
608 2 else //send Configuration,Interface and Endpoint descriptor
609 2 {
610 3 if(USB_Device_Request.wLength >= 32)
611 3 {
612 4 while(count != 0)
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 11
613 4 {
614 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
615 5 count--;
616 5 Descriptor_Ptr++;
617 5 }
618 4 Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
619 4 count = *Descriptor_Ptr; //get the descriptor count
620 4 while(count != 0)
621 4 {
622 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
623 5 count--;
624 5 Descriptor_Ptr++;
625 5 }
626 4 Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
627 4 count = *Descriptor_Ptr; //read in descriptor length
628 4 while(count != 0)
629 4 {
630 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
631 5 count--;
632 5 Descriptor_Ptr++;
633 5 }
634 4 Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
635 4 count = *Descriptor_Ptr; //read in descriptor length
636 4 while(count != 0)
637 4 {
638 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
639 5 count--;
640 5 Descriptor_Ptr++;
641 5 }
642 4 Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
643 4 count = *Descriptor_Ptr; //read in descriptor length
644 4 while(count != 0)
645 4 {
646 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
647 5 count--;
648 5 Descriptor_Ptr++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -