?? chap_9.lst
字號:
574 2 {
575 3 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
576 3 while(!USB_Int_Flag.BITS.EP0SETUP)
577 3 {
578 4 //讀取ISP1581中斷寄存器
579 4 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
580 4 //回寫ISP1581中斷寄存器
581 4 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
582 4 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
583 4 return;
584 4 }
585 3 USB_Int_Flag.BITS.EP0TX = 0;
586 3 }
587 2 else
588 2 {
589 3 Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor
590 3 count = *Descriptor_Ptr; //read in descriptor length
591 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
592 3 if(count >= USB_Device_Request.wLength)
593 3 {
594 4 Temp = USB_Device_Request.wLength;
595 4 //send endpoint descriptor
596 4 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
597 4 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
598 4 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
599 4 {
600 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
601 5 Descriptor_Ptr++;
602 5 }
603 4 wait_ep0tx();
604 4 ep0out_ack();
605 4 }
606 3 else
607 3 {
608 4 USB_Device_Request.wLength -= count; //send Endpoint descriptor
609 4 Temp += count;
610 4 while(count != 0)
611 4 {
612 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
613 5 count--;
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:05:13 PAGE 11
614 5 Descriptor_Ptr++;
615 5 }
616 4 Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
617 4 count = *Descriptor_Ptr; //read in descriptor length
618 4 if(count >= USB_Device_Request.wLength)
619 4 {
620 5 Temp += USB_Device_Request.wLength;
621 5 //send endpoint descriptor
622 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
623 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
624 5 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
625 5 {
626 6 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
627 6 Descriptor_Ptr++;
628 6 }
629 5 wait_ep0tx();
630 5 ep0out_ack();
631 5 }
632 4 else
633 4 {
634 5 USB_Device_Request.wLength -= count; //send Endpoint descriptor
635 5 Temp += count;
636 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
637 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
638 5 while(count != 0)
639 5 {
640 6 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
641 6 count--;
642 6 Descriptor_Ptr++;
643 6 }
644 5 wait_ep0tx();
645 5 ep0out_ack();
646 5 }
647 4 }
648 3 }
649 2 break;
650 2
651 2 case 6: //獲取設備限制描述符
652 2 Descriptor_Ptr = &HS_Device_Qualifier[0]; //set pointer to High Speed device descriptor
653 2 count = *Descriptor_Ptr; //read in descriptor length
654 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
655 2 if(USB_Device_Request.wLength < count)
656 2 {
657 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
658 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
659 3 count = USB_Device_Request.wLength;
660 3 }
661 2 else
662 2 {
663 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
664 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
665 3 }
666 2 while(count != 0)
667 2 {
668 3 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
669 3 Descriptor_Ptr++;
670 3 count--;
671 3 };
672 2 wait_ep0tx();
673 2 ep0out_ack();
674 2 break;
675 2
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:05:13 PAGE 12
676 2 case 7 ://獲取速度配置描述符
677 2 Temp = 64;
678 2 Descriptor_Ptr = &Other_Speed_Config_Descriptor[0]; //set pointer to configuration descriptor
679 2 count = *Descriptor_Ptr; //get configuration Descriptor length
680 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
681 2 if(count >= USB_Device_Request.wLength) //Send only Configuration descriptor
682 2 {
683 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
684 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
685 3 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
686 3 {
687 4 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
688 4 Descriptor_Ptr++;
689 4 }
690 3 wait_ep0tx();
691 3 ep0out_ack();
692 3 }
693 2 else //send Configuration,Interface and Endpoint descriptor
694 2 {
695 3 if(USB_Device_Request.wLength >= 32)
696 3 {
697 4 while(count != 0)
698 4 {
699 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
700 5 count--;
701 5 Descriptor_Ptr++;
702 5 }
703 4 Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
704 4 count = *Descriptor_Ptr; //get the descriptor count
705 4 while(count != 0)
706 4 {
707 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
708 5 count--;
709 5 Descriptor_Ptr++;
710 5 }
711 4 Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
712 4 count = *Descriptor_Ptr; //read in descriptor length
713 4 while(count != 0)
714 4 {
715 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
716 5 count--;
717 5 Descriptor_Ptr++;
718 5 }
719 4 Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
720 4 count = *Descriptor_Ptr; //read in descriptor length
721 4 while(count != 0)
722 4 {
723 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
724 5 count--;
725 5 Descriptor_Ptr++;
726 5 }
727 4 Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
728 4 count = *Descriptor_Ptr; //read in descriptor length
729 4 while(count != 0)
730 4 {
731 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
732 5 count--;
733 5 Descriptor_Ptr++;
734 5 }
735 4 Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
736 4 count = *Descriptor_Ptr; //read in descriptor length
737 4 while(count != 0)
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:05:13 PAGE 13
738 4 {
739 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
740 5 count--;
741 5 Descriptor_Ptr++;
742 5 }
743 4 }
744 3 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1; //validate FIFO
745 3 wait_ep0tx();
746 3 ep0out_ack();
747 3 }
748 2 break;
749 2
750 2 case 8:
751 2 break;
752 2
753 2 default :
754 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
755 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
756 2 while(!USB_Int_Flag.BITS.EP0SETUP)
757 2 {
758 3 //讀取ISP1581中斷寄存器
759 3 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
760 3 //回寫ISP1581中斷寄存器
761 3 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
762 3 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
763 3 return;
764 3 }
765 2 USB_Int_Flag.BITS.EP0TX = 0;
766 2 break;
767 2 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -