?? chap_9.lst
字號(hào):
776 2 while(!USB_Int_Flag.BITS.EP0SETUP)
777 2 {
778 3 //讀取ISP1581中斷寄存器
779 3 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
780 3 //回寫(xiě)ISP1581中斷寄存器
781 3 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
782 3 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
783 3 return;
784 3 }
785 2 USB_Int_Flag.BITS.EP0TX = 0;
786 2 }
787 1 }
788
789
790 //Get_Config獲取配置
791 void get_config(void)
792 {
793 1 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
794 1 D14_Cntrl_Reg.D14_DATA_PORT_LSB = Device_Config_Value;
795 1 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;
796 1 wait_ep0tx();
797 1 ep0out_ack();
798 1 }
799
C51 COMPILER V7.01 CHAP_9 03/28/2003 14:38:29 PAGE 14
800 //Clear_Feature特性清除
801 void clear_feature(void)
802 {
803 1 unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
804 1 //端點(diǎn)
805 1 if(bRecipient == 0x02 &&USB_Device_Request.wValue == 0x0000)
806 1 {
807 2 switch(USB_Device_Request.wIndex)
808 2 {
809 3 case 0x8000 :
810 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
811 3 break;
812 3 case 0x0000 :
813 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
814 3 break;
815 3 case 0x8100 :
816 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
817 3 break;
818 3 case 0x0100 :
819 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
820 3 break;
821 3 case 0x8200 :
822 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
823 3 break;
824 3 case 0x0200 :
825 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
826 3 break;
827 3 case 0x8300 :
828 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
829 3 break;
830 3 case 0x0300 :
831 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
832 3 break;
833 3 case 0x8400 :
834 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
835 3 break;
836 3 case 0x0400 :
837 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
838 3 break;
839 3 case 0x8500 :
840 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
841 3 break;
842 3 case 0x0500 :
843 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
844 3 break;
845 3 case 0x8600 :
846 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
847 3 break;
848 3 case 0x0600 :
849 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
850 3 break;
851 3 case 0x8700 :
852 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
853 3 break;
854 3 case 0x0700 :
855 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
856 3 break;
857 3 default :
858 3 break;
859 3 }
860 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
861 2 Kernel_Flag.BITS.Endpt_Stall = 0;
C51 COMPILER V7.01 CHAP_9 03/28/2003 14:38:29 PAGE 15
862 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF; //disable FIFO
863 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON; //disable FIFO
864 2 ep0in_ack();
865 2 USB_Device.BITS.Halt = 0;
866 2 }
867 1 else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
868 1 { //遠(yuǎn)程喚醒
869 2 USB_Device.BITS.Remote_Wakeup = 0;
870 2 ep0in_ack();
871 2 }
872 1 else
873 1 {
874 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
875 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
876 2 while(!USB_Int_Flag.BITS.EP0SETUP)
877 2 {
878 3 //讀取ISP1581中斷寄存器
879 3 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
880 3 //回寫(xiě)ISP1581中斷寄存器
881 3 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
882 3 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
883 3 return;
884 3 }
885 2 USB_Int_Flag.BITS.EP0TX = 0;
886 2 }
887 1 }
888
889 //Get_Status獲取設(shè)備狀態(tài)
890 void get_status(void)
891 {
892 1 if(USB_Device_Request.bmRequestType == 0x80)
893 1 {
894 2 //端點(diǎn)0IN返回0x01,0x00兩字節(jié)
895 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
896 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
897 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
898 2 D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
899 2 D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
900 2 //等待發(fā)送完畢
901 2 wait_ep0tx();
902 2 ep0out_ack();
903 2 }
904 1
905 1 if(USB_Device_Request.bmRequestType == 0x81)
906 1 {
907 2 //端點(diǎn)0IN返回0x00,0x00兩字節(jié)
908 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
909 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
910 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
911 2 D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
912 2 D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
913 2 wait_ep0tx();
914 2 ep0out_ack();
915 2 }
916 1
917 1 if(USB_Device_Request.bmRequestType == 0x82)
918 1 {
919 2 Temp = 0;
920 2 Temp = USB_Device.BITS.Halt;
921 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
922 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
923 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
C51 COMPILER V7.01 CHAP_9 03/28/2003 14:38:29 PAGE 16
924 2 D14_Cntrl_Reg.D14_DATA_PORT_LSB = (UC) Temp;
925 2 D14_Cntrl_Reg.D14_DATA_PORT_MSB = (UC) (Temp >> 8);
926 2 wait_ep0tx();
927 2 ep0out_ack();
928 2 }
929 1 }
930
931
932
933 //Set_Feature特性設(shè)置
934 //不支持測(cè)試模式
935 void set_feature(void)
936 {
937 1 unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
938 1 //端點(diǎn)
939 1 if(bRecipient == 0x02 && USB_Device_Request.wValue == 0x0000)
940 1 {
941 2 switch(USB_Device_Request.wIndex)
942 2 {
943 3 case 0x8000 :
944 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
945 3 break;
946 3 case 0x0000 :
947 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
948 3 break;
949 3 case 0x8100 :
950 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
951 3 break;
952 3 case 0x0100 :
953 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
954 3 break;
955 3 case 0x8200 :
956 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
957 3 break;
958 3 case 0x0200 :
959 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
960 3 break;
961 3 case 0x8300 :
962 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
963 3 break;
964 3 case 0x0300 :
965 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
966 3 break;
967 3 case 0x8400 :
968 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
969 3 br
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -