📄 chap_9.lst
字号:
796 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
797 3 break;
798 3 case 0x0100 :
799 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:27:50 PAGE 14
800 3 break;
801 3 case 0x8200 :
802 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
803 3 break;
804 3 case 0x0200 :
805 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
806 3 break;
807 3 case 0x8300 :
808 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
809 3 break;
810 3 case 0x0300 :
811 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
812 3 break;
813 3 case 0x8400 :
814 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
815 3 break;
816 3 case 0x0400 :
817 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
818 3 break;
819 3 case 0x8500 :
820 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
821 3 break;
822 3 case 0x0500 :
823 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
824 3 break;
825 3 case 0x8600 :
826 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
827 3 break;
828 3 case 0x0600 :
829 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
830 3 break;
831 3 case 0x8700 :
832 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
833 3 break;
834 3 case 0x0700 :
835 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
836 3 break;
837 3 default :
838 3 break;
839 3 }
840 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
841 2 Kernel_Flag.BITS.Endpt_Stall = 0;
842 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF; //disable FIFO
843 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON; //disable FIFO
844 2 ep0in_ack();
845 2 USB_Device.BITS.Halt = 0;
846 2 }
847 1 else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
848 1 { //远程唤醒
849 2 USB_Device.BITS.Remote_Wakeup = 0;
850 2 ep0in_ack();
851 2 }
852 1 else
853 1 {
854 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
855 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
856 2 while(!USB_Int_Flag.BITS.EP0SETUP)
857 2 {
858 3 //读取ISP1581中断寄存器
859 3 USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
860 3 //回写ISP1581中断寄存器
861 3 D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:27:50 PAGE 15
862 3 if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
863 3 return;
864 3 }
865 2 USB_Int_Flag.BITS.EP0TX = 0;
866 2 }
867 1 }
868
869 //Get_Status获取设备状态
870 void get_status(void)
871 {
872 1 if(USB_Device_Request.bmRequestType == 0x80)
873 1 {
874 2 //端点0IN返回0x01,0x00两字节
875 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
876 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
877 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
878 2 D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
879 2 D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
880 2 //等待发送完毕
881 2 wait_ep0tx();
882 2 ep0out_ack();
883 2 }
884 1
885 1 if(USB_Device_Request.bmRequestType == 0x81)
886 1 {
887 2 //端点0IN返回0x00,0x00两字节
888 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
889 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
890 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
891 2 D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
892 2 D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
893 2 wait_ep0tx();
894 2 ep0out_ack();
895 2 }
896 1
897 1 if(USB_Device_Request.bmRequestType == 0x82)
898 1 {
899 2 Temp = 0;
900 2 Temp = USB_Device.BITS.Halt;
901 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
902 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
903 2 D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
904 2 D14_Cntrl_Reg.D14_DATA_PORT_LSB = (UC) Temp;
905 2 D14_Cntrl_Reg.D14_DATA_PORT_MSB = (UC) (Temp >> 8);
906 2 wait_ep0tx();
907 2 ep0out_ack();
908 2 }
909 1 }
910
911
912
913 //Set_Feature特性设置
914 //不支持测试模式
915 void set_feature(void)
916 {
917 1 unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
918 1 //端点
919 1 if(bRecipient == 0x02 && USB_Device_Request.wValue == 0x0000)
920 1 {
921 2 switch(USB_Device_Request.wIndex)
922 2 {
923 3 case 0x8000 :
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:27:50 PAGE 16
924 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
925 3 break;
926 3 case 0x0000 :
927 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
928 3 break;
929 3 case 0x8100 :
930 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
931 3 break;
932 3 case 0x0100 :
933 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
934 3 break;
935 3 case 0x8200 :
936 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
937 3 break;
938 3 case 0x0200 :
939 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
940 3 break;
941 3 case 0x8300 :
942 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
943 3 break;
944 3 case 0x0300 :
945 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
946 3 break;
947 3 case 0x8400 :
948 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
949 3 break;
950 3 case 0x0400 :
951 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
952 3 break;
953 3 case 0x8500 :
954 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
955 3 break;
956 3 case 0x0500 :
957 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
958 3 break;
959 3 case 0x8600 :
960 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
961 3 break;
962 3 case 0x0600 :
963 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
964 3 break;
965 3 case 0x8700 :
966 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
967 3 break;
968 3 case 0x0700 :
969 3 D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
970 3 break;
971 3 default :
972 3 break;
973 3 }
974 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
975 2 Kernel_Flag.BITS.Endpt_Stall = 1;
976 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF; //disable FIFO
977 2 //D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON; //disable FIFO
978 2 ep0in_ack();
979 2 USB_Device.BITS.Halt = 0;
980 2 }
981 1 else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
982 1 { //远程唤醒
983 2 USB_Device.BITS.Remote_Wakeup = 1;
984 2 ep0in_ack();
985 2 }
C51 COMPILER V7.06 CHAP_9 07/02/2003 10:27:50 PAGE 17
986 1 else
987 1 {
988 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
989 2 D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
990 2 while(!U
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -