📄 usbcore.lst
字号:
833 6 Prints("其他描述符,描述符代码:");
834 6 PrintHex((wValue>>8)&0xFF);
835 6 Prints("\r\n");
836 6 #endif
837 6 break;
838 6 }
839 5 break;
840 5
841 5 case GET_INTERFACE: //获取接口
842 5 #ifdef DEBUG0
843 5 Prints("获取接口。\r\n");
844 5 #endif
845 5 break;
846 5
847 5 case GET_STATUS: //获取状态
848 5 #ifdef DEBUG0
849 5 Prints("获取状态。\r\n");
850 5 #endif
851 5 break;
852 5
853 5 case SYNCH_FRAME: //同步帧
854 5 #ifdef DEBUG0
855 5 Prints("同步帧。\r\n");
856 5 #endif
857 5 break;
858 5
859 5 default: //未定义的标准请求
860 5 #ifdef DEBUG0
861 5 Prints("错误:未定义的标准输入请求。\r\n");
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 15
862 5 #endif
863 5 break;
864 5 }
865 4 break;
866 4
867 4 case 1: //类请求
868 4 #ifdef DEBUG0
869 4 Prints("USB类输入请求:\r\n");
870 4 #endif
871 4 break;
872 4
873 4 case 2: //厂商请求
874 4 #ifdef DEBUG0
875 4 Prints("USB厂商输入请求:\r\n");
876 4 #endif
877 4 break;
878 4
879 4 default: //未定义的请求。这里只显示一个报错信息。
880 4 #ifdef DEBUG0
881 4 Prints("错误:未定义的输入请求。\r\n");
882 4 #endif
883 4 break;
884 4 }
885 3 }
886 2 //否则说明是输出请求
887 2 else //if(bmRequestType&0x80==0x80)之else
888 2 {
889 3 //根据bmRequestType的D6~5位散转,D6~5位表示请求的类型
890 3 //0为标准请求,1为类请求,2为厂商请求。
891 3 switch((bmRequestType>>5)&0x03)
892 3 {
893 4 case 0: //标准请求
894 4 #ifdef DEBUG0
895 4 Prints("USB标准输出请求:");
896 4 #endif
897 4 //USB协议定义了几个标准输出请求,我们实现这些标准请求即可
898 4 //请求的代码在bRequest中,对不同的请求代码进行散转
899 4 switch(bRequest)
900 4 {
901 5 case CLEAR_FEATURE: //清除特性
902 5 #ifdef DEBUG0
903 5 Prints("清除特性。\r\n");
904 5 #endif
905 5 break;
906 5
907 5 case SET_ADDRESS: //设置地址
908 5 #ifdef DEBUG0
909 5 Prints("设置地址。地址为:");
910 5 PrintHex(wValue&0xFF); //显示所设置的地址
911 5 Prints("\r\n");
912 5 #endif
913 5 D12SetAddress(wValue&0xFF); //wValue中的低字节是设置的地址值
914 5 //设置地址没有数据过程,直接进入到状态过程,返回一个0长度的数据包
915 5 SendLength=0;
916 5 NeedZeroPacket=1;
917 5 //将数据通过EP0返回
918 5 UsbEp0SendData();
919 5 break;
920 5
921 5 case SET_CONFIGURATION: //设置配置
922 5 #ifdef DEBUG0
923 5 Prints("设置配置。\r\n");
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 16
924 5 #endif
925 5 //使能非0端点。非0端点只有在设置为非0的配置后才能使能。
926 5 //wValue的低字节为配置的值,如果该值为非0,才能使能非0端点。
927 5 //保存当前配置值
928 5 ConfigValue=wValue&0xFF;
929 5 D12SetEndpointEnable(ConfigValue);
930 5 //返回一个0长度的状态数据包
931 5 SendLength=0;
932 5 NeedZeroPacket=1;
933 5 //将数据通过EP0返回
934 5 UsbEp0SendData();
935 5 break;
936 5
937 5 case SET_DESCRIPTOR: //设置描述符
938 5 #ifdef DEBUG0
939 5 Prints("设置描述符。\r\n");
940 5 #endif
941 5 break;
942 5
943 5 case SET_FEATURE: //设置特性
944 5 #ifdef DEBUG0
945 5 Prints("设置特性。\r\n");
946 5 #endif
947 5 break;
948 5
949 5 case SET_INTERFACE: //设置接口
950 5 #ifdef DEBUG0
951 5 Prints("设置接口。\r\n");
952 5 #endif
953 5 break;
954 5
955 5 default: //未定义的标准请求
956 5 #ifdef DEBUG0
957 5 Prints("错误:未定义的标准输出请求。\r\n");
958 5 #endif
959 5 break;
960 5 }
961 4 break;
962 4
963 4 case 1: //类请求
964 4 #ifdef DEBUG0
965 4 Prints("USB类输出请求:");
966 4 #endif
967 4 switch(bRequest)
968 4 {
969 5 case SET_IDLE:
970 5 #ifdef DEBUG0
971 5 Prints("设置空闲。\r\n");
972 5 #endif
973 5 //只需要返回一个0长度的数据包即可
974 5 SendLength=0;
975 5 NeedZeroPacket=1;
976 5 //将数据通过EP0返回
977 5 UsbEp0SendData();
978 5 break;
979 5
980 5 default:
981 5 #ifdef DEBUG0
982 5 Prints("未知请求。\r\n");
983 5 #endif
984 5 break;
985 5 }
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 17
986 4 break;
987 4
988 4 case 2: //厂商请求
989 4 #ifdef DEBUG0
990 4 Prints("USB厂商输出请求:\r\n");
991 4 #endif
992 4 break;
993 4
994 4 default: //未定义的请求。这里只显示一个报错信息。
995 4 #ifdef DEBUG0
996 4 Prints("错误:未定义的输出请求。\r\n");
997 4 #endif
998 4 break;
999 4 }
1000 3 }
1001 2 }
1002 1 //普通数据输出
1003 1 else //if(D12ReadEndpointLastStatus(0)&0x20)之else
1004 1 {
1005 2 D12ReadEndpointBuffer(0,16,Buffer);
1006 2 D12ClearBuffer();
1007 2 }
1008 1 }
1009 ////////////////////////End of function//////////////////////////////
1010
1011 /********************************************************************
1012 函数功能:端点0输入中断处理函数。
1013 入口参数:无。
1014 返 回:无。
1015 备 注:无。
1016 ********************************************************************/
1017 void UsbEp0In(void)
1018 {
1019 1 #ifdef DEBUG0
1020 1 Prints("USB端点0输入中断。\r\n");
1021 1 #endif
1022 1 //读最后发送状态,这将清除端点0的中断标志位
1023 1 D12ReadEndpointLastStatus(1);
1024 1 //发送剩余的字节数
1025 1 UsbEp0SendData();
1026 1 }
1027 ////////////////////////End of function//////////////////////////////
1028
1029 /********************************************************************
1030 函数功能:端点1输出中断处理函数。
1031 入口参数:无。
1032 返 回:无。
1033 备 注:无。
1034 ********************************************************************/
1035 void UsbEp1Out(void)
1036 {
1037 1 uint8 Buf[1]; //用来保存1字节的输出报告,控制LED。
1038 1 #ifdef DEBUG0
1039 1 Prints("USB端点1输出中断。\r\n");
1040 1 #endif
1041 1 //读端点最后状态,这将清除端点1输出的中断标志位
1042 1 D12ReadEndpointLastStatus(2);
1043 1 //从端点1输出缓冲读回1字节数据
1044 1 D12ReadEndpointBuffer(2,1,Buf);
1045 1 //清除端点缓冲区
1046 1 D12ClearBuffer();
1047 1 //输出报告1字节为LED状态,某位为1时,表示LED亮。
C51 COMPILER V7.06 USBCORE 11/16/2008 16:00:31 PAGE 18
1048 1 LEDs=~Buf[0];
1049 1 }
1050 ////////////////////////End of function//////////////////////////////
1051
1052 /********************************************************************
1053 函数功能:端点1输入中断处理函数。
1054 入口参数:无。
1055 返 回:无。
1056 备 注:无。
1057 ********************************************************************/
1058 void UsbEp1In(void)
1059 {
1060 1 #ifdef DEBUG0
1061 1 Prints("USB端点1输入中断。\r\n");
1062 1 #endif
1063 1 //读最后发送状态,这将清除端点1输入的中断标志位
1064 1 D12ReadEndpointLastStatus(3);
1065 1 //端点1输入处于空闲状态
1066 1 Ep1InIsBusy=0;
1067 1 }
1068 ////////////////////////End of function//////////////////////////////
1069
1070 /********************************************************************
1071 函数功能:端点2输出中断处理函数。
1072 入口参数:无。
1073 返 回:无。
1074 备 注:无。
1075 ********************************************************************/
1076 void UsbEp2Out(void)
1077 {
1078 1 #ifdef DEBUG0
1079 1 Prints("USB端点2输出中断。\r\n");
1080 1 #endif
1081 1 }
1082 ////////////////////////End of function//////////////////////////////
1083
1084 /********************************************************************
1085 函数功能:端点2输入中断处理函数。
1086 入口参数:无。
1087 返 回:无。
1088 备 注:无。
1089 ********************************************************************/
1090 void UsbEp2In(void)
1091 {
1092 1 #ifdef DEBUG0
1093 1 Prints("USB端点2输入中断。\r\n");
1094 1 #endif
1095 1 }
1096 ////////////////////////End of function//////////////////////////////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1260 ----
CONSTANT SIZE = 1020 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 1
IDATA SIZE = 16 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -