📄 chap_9.lst
字号:
580 4 ep0out_ack();
581 4 }
582 3 else
583 3 {
584 4 USB_Device_Request.wLength -= count; //send Endpoint descriptor
585 4 Temp += count;
586 4 while(count != 0)
587 4 {
588 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
589 5 count--;
590 5 Descriptor_Ptr++;
591 5 }
592 4 Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
593 4 count = *Descriptor_Ptr; //read in descriptor length
594 4 if(count >= USB_Device_Request.wLength)
595 4 {
596 5 Temp += USB_Device_Request.wLength;
597 5 //send endpoint descriptor
598 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
599 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
600 5 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
601 5 {
602 6 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
603 6 Descriptor_Ptr++;
604 6 }
605 5 wait_ep0tx();
606 5 ep0out_ack();
607 5 }
608 4 else
609 4 {
610 5 USB_Device_Request.wLength -= count; //send Endpoint descriptor
611 5 Temp += count;
612 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
613 5 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
C51 COMPILER V7.01 CHAP_9 03/28/2003 14:38:29 PAGE 11
614 5 while(count != 0)
615 5 {
616 6 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
617 6 count--;
618 6 Descriptor_Ptr++;
619 6 }
620 5 wait_ep0tx();
621 5 ep0out_ack();
622 5 }
623 4 }
624 3 }
625 2 break;
626 2
627 2 case 6: //获取设备限制描述符
628 2 Descriptor_Ptr = &HS_Device_Qualifier[0]; //set pointer to High Speed device descriptor
629 2 count = *Descriptor_Ptr; //read in descriptor length
630 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
631 2 if(USB_Device_Request.wLength < count)
632 2 {
633 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
634 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
635 3 count = USB_Device_Request.wLength;
636 3 }
637 2 else
638 2 {
639 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
640 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
641 3 }
642 2 while(count != 0)
643 2 {
644 3 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
645 3 Descriptor_Ptr++;
646 3 count--;
647 3 };
648 2 wait_ep0tx();
649 2 ep0out_ack();
650 2 break;
651 2
652 2 case 7 ://获取速度配置描述符
653 2 Temp = 64;
654 2 Descriptor_Ptr = &Other_Speed_Config_Descriptor[0]; //set pointer to configuration descriptor
655 2 count = *Descriptor_Ptr; //get configuration Descriptor length
656 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
657 2 if(count >= USB_Device_Request.wLength) //Send only Configuration descriptor
658 2 {
659 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
660 3 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
661 3 for(count = 0 ; count < USB_Device_Request.wLength ; count++)
662 3 {
663 4 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
664 4 Descriptor_Ptr++;
665 4 }
666 3 wait_ep0tx();
667 3 ep0out_ack();
668 3 }
669 2 else //send Configuration,Interface and Endpoint descriptor
670 2 {
671 3 if(USB_Device_Request.wLength >= 32)
672 3 {
673 4 while(count != 0)
674 4 {
675 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
C51 COMPILER V7.01 CHAP_9 03/28/2003 14:38:29 PAGE 12
676 5 count--;
677 5 Descriptor_Ptr++;
678 5 }
679 4 Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
680 4 count = *Descriptor_Ptr; //get the descriptor count
681 4 while(count != 0)
682 4 {
683 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
684 5 count--;
685 5 Descriptor_Ptr++;
686 5 }
687 4 Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
688 4 count = *Descriptor_Ptr; //read in descriptor length
689 4 while(count != 0)
690 4 {
691 5 D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
692 5 count--;
693 5 Descriptor_Ptr++;
694 5 }
695 4 Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
696 4 count = *Descriptor_Ptr; //read in descriptor length
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_In_Descriptor[0]; //set pointer to interface descriptor
704 4 count = *Descriptor_Ptr; //read in descriptor length
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 = &Bulk_Out_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 }
720 3 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1; //validate FIFO
721 3 wait_ep0tx();
722 3 ep0out_ack();
723 3 }
724 2 break;
725 2
726 2 case 8:
727 2 break;
728 2
729 2 default :
730 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
731 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
732 2 while(!USB_Int_Flag.BITS.EP0SETUP)
733 2 {
734 3 //读取ISP1581中断寄存器
735 3 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
736 3 //回写ISP1581中断寄存器
737 3 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
C51 COMPILER V7.01 CHAP_9 03/28/2003 14:38:29 PAGE 13
738 3 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
739 3 return;
740 3 }
741 2 USB_Int_Flag.BITS.EP0TX = 0;
742 2 break;
743 2 }
744 1 }
745
746 //Set_Address设置地址
747 void set_address(void)
748 {
749 1 USB_Int_Flag.BITS.EP0RX = 0;
750 1 D14_Cntrl_Reg.D14_ADDRESS.BITS.DEVADDR = (USB_Device_Request.wValue >> 8);//设置地址
751 1 //状态响应
752 1 ep0in_ack();
753 1 }
754
755 //Set_Config设置配置
756 void set_config(void)
757 {
758 1 USB_Int_Flag.BITS.EP0RX = 0;
759 1
760 1 if(USB_Device_Request.wValue == 0)
761 1 {
762 2 Device_Config_Value = 0;
763 2 ep0in_ack();
764 2 }
765 1 else if (USB_Device_Request.wValue == 0x0100)
766 1 {
767 2 //配置设备
768 2 Device_Config_Value = (UC) (USB_Device_Request.wValue >> 8);
769 2 // USB_Device.BITS.State = USB_Configured;
770 2 ep0in_ack();
771 2 }
772 1 else
773 1 {
774 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
775 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -