📄 usbcore.lst
字号:
806 5 Prints("获取接口。\r\n");
807 5 #endif
808 5 break;
809 5
810 5 case GET_STATUS: //获取状态
811 5 #ifdef DEBUG0
812 5 Prints("获取状态。\r\n");
813 5 #endif
814 5 break;
815 5
816 5 case SYNCH_FRAME: //同步帧
817 5 #ifdef DEBUG0
818 5 Prints("同步帧。\r\n");
819 5 #endif
820 5 break;
821 5
822 5 default: //未定义的标准请求
823 5 #ifdef DEBUG0
824 5 Prints("错误:未定义的标准输入请求。\r\n");
825 5 #endif
826 5 break;
827 5 }
828 4 break;
829 4
830 4 case 1: //类请求
831 4 #ifdef DEBUG0
832 4 Prints("USB类输入请求:\r\n");
833 4 #endif
834 4 break;
835 4
836 4 case 2: //厂商请求
837 4 #ifdef DEBUG0
838 4 Prints("USB厂商输入请求:\r\n");
839 4 #endif
840 4 break;
841 4
842 4 default: //未定义的请求。这里只显示一个报错信息。
843 4 #ifdef DEBUG0
844 4 Prints("错误:未定义的输入请求。\r\n");
845 4 #endif
846 4 break;
847 4 }
848 3 }
849 2 //否则说明是输出请求
850 2 else //if(bmRequestType&0x80==0x80)之else
851 2 {
852 3 //根据bmRequestType的D6~5位散转,D6~5位表示请求的类型
853 3 //0为标准请求,1为类请求,2为厂商请求。
854 3 switch((bmRequestType>>5)&0x03)
855 3 {
856 4 case 0: //标准请求
857 4 #ifdef DEBUG0
858 4 Prints("USB标准输出请求:");
859 4 #endif
860 4 //USB协议定义了几个标准输出请求,我们实现这些标准请求即可
861 4 //请求的代码在bRequest中,对不同的请求代码进行散转
C51 COMPILER V8.02 USBCORE 06/17/2010 09:51:39 PAGE 15
862 4 switch(bRequest)
863 4 {
864 5 case CLEAR_FEATURE: //清除特性
865 5 #ifdef DEBUG0
866 5 Prints("清除特性。\r\n");
867 5 #endif
868 5 break;
869 5
870 5 case SET_ADDRESS: //设置地址
871 5 #ifdef DEBUG0
872 5 Prints("设置地址。地址为:");
873 5 PrintHex(wValue&0xFF); //显示所设置的地址
874 5 Prints("\r\n");
875 5 #endif
876 5 D12SetAddress(wValue&0xFF); //wValue中的低字节是设置的地址值
877 5 //设置地址没有数据过程,直接进入到状态过程,返回一个0长度的数据包
878 5 SendLength=0;
879 5 NeedZeroPacket=1;
880 5 //将数据通过EP0返回
881 5 UsbEp0SendData();
882 5 break;
883 5
884 5 case SET_CONFIGURATION: //设置配置
885 5 #ifdef DEBUG0
886 5 Prints("设置配置。\r\n");
887 5 #endif
888 5 //使能非0端点。非0端点只有在设置为非0的配置后才能使能。
889 5 //wValue的低字节为配置的值,如果该值为非0,才能使能非0端点。
890 5 //保存当前配置值
891 5 ConfigValue=wValue&0xFF;
892 5 D12SetEndpointEnable(ConfigValue);
893 5 //返回一个0长度的状态数据包
894 5 SendLength=0;
895 5 NeedZeroPacket=1;
896 5 //将数据通过EP0返回
897 5 UsbEp0SendData();
898 5 break;
899 5
900 5 case SET_DESCRIPTOR: //设置描述符
901 5 #ifdef DEBUG0
902 5 Prints("设置描述符。\r\n");
903 5 #endif
904 5 break;
905 5
906 5 case SET_FEATURE: //设置特性
907 5 #ifdef DEBUG0
908 5 Prints("设置特性。\r\n");
909 5 #endif
910 5 break;
911 5
912 5 case SET_INTERFACE: //设置接口
913 5 #ifdef DEBUG0
914 5 Prints("设置接口。\r\n");
915 5 #endif
916 5 break;
917 5
918 5 default: //未定义的标准请求
919 5 #ifdef DEBUG0
920 5 Prints("错误:未定义的标准输出请求。\r\n");
921 5 #endif
922 5 break;
923 5 }
C51 COMPILER V8.02 USBCORE 06/17/2010 09:51:39 PAGE 16
924 4 break;
925 4
926 4 case 1: //类请求
927 4 #ifdef DEBUG0
928 4 Prints("USB类输出请求:");
929 4 #endif
930 4 switch(bRequest)
931 4 {
932 5 case SET_IDLE:
933 5 #ifdef DEBUG0
934 5 Prints("设置空闲。\r\n");
935 5 #endif
936 5 //只需要返回一个0长度的数据包即可
937 5 SendLength=0;
938 5 NeedZeroPacket=1;
939 5 //将数据通过EP0返回
940 5 UsbEp0SendData();
941 5 break;
942 5
943 5 default:
944 5 #ifdef DEBUG0
945 5 Prints("未知请求。\r\n");
946 5 #endif
947 5 break;
948 5 }
949 4 break;
950 4
951 4 case 2: //厂商请求
952 4 #ifdef DEBUG0
953 4 Prints("USB厂商输出请求:\r\n");
954 4 #endif
955 4 break;
956 4
957 4 default: //未定义的请求。这里只显示一个报错信息。
958 4 #ifdef DEBUG0
959 4 Prints("错误:未定义的输出请求。\r\n");
960 4 #endif
961 4 break;
962 4 }
963 3 }
964 2 }
965 1 //普通数据输出
966 1 else //if(D12ReadEndpointLastStatus(0)&0x20)之else
967 1 {
968 2 D12ReadEndpointBuffer(0,16,Buffer);
969 2 D12ClearBuffer();
970 2 }
971 1 }
972 ////////////////////////End of function//////////////////////////////
973
974 /********************************************************************
975 函数功能:端点0输入中断处理函数。
976 入口参数:无。
977 返 回:无。
978 备 注:无。
979 ********************************************************************/
980 void UsbEp0In(void)
981 {
982 1 #ifdef DEBUG0
983 1 Prints("USB端点0输入中断。\r\n");
984 1 #endif
985 1 //读最后发送状态,这将清除端点0的中断标志位
C51 COMPILER V8.02 USBCORE 06/17/2010 09:51:39 PAGE 17
986 1 D12ReadEndpointLastStatus(1);
987 1 //发送剩余的字节数
988 1 UsbEp0SendData();
989 1 }
990 ////////////////////////End of function//////////////////////////////
991
992 /********************************************************************
993 函数功能:端点1输出中断处理函数。
994 入口参数:无。
995 返 回:无。
996 备 注:无。
997 ********************************************************************/
998 void UsbEp1Out(void)
999 {
1000 1 uint8 Buf[1]; //用来保存1字节的输出报告,控制LED。
1001 1 #ifdef DEBUG0
1002 1 Prints("USB端点1输出中断。\r\n");
1003 1 #endif
1004 1 //读端点最后状态,这将清除端点1输出的中断标志位
1005 1 D12ReadEndpointLastStatus(2);
1006 1 //从端点1输出缓冲读回1字节数据
1007 1 D12ReadEndpointBuffer(2,1,Buf);
1008 1 //清除端点缓冲区
1009 1 D12ClearBuffer();
1010 1 //输出报告1字节为LED状态,某位为1时,表示LED亮。
1011 1 LEDs=~Buf[0];
1012 1 }
1013 ////////////////////////End of function//////////////////////////////
1014
1015 /********************************************************************
1016 函数功能:端点1输入中断处理函数。
1017 入口参数:无。
1018 返 回:无。
1019 备 注:无。
1020 ********************************************************************/
1021 void UsbEp1In(void)
1022 {
1023 1 #ifdef DEBUG0
1024 1 Prints("USB端点1输入中断。\r\n");
1025 1 #endif
1026 1 //读最后发送状态,这将清除端点1输入的中断标志位
1027 1 D12ReadEndpointLastStatus(3);
1028 1 //端点1输入处于空闲状态
1029 1 Ep1InIsBusy=0;
1030 1 }
1031 ////////////////////////End of function//////////////////////////////
1032
1033 /********************************************************************
1034 函数功能:端点2输出中断处理函数。
1035 入口参数:无。
1036 返 回:无。
1037 备 注:无。
1038 ********************************************************************/
1039 void UsbEp2Out(void)
1040 {
1041 1 #ifdef DEBUG0
1042 1 Prints("USB端点2输出中断。\r\n");
1043 1 #endif
1044 1 }
1045 ////////////////////////End of function//////////////////////////////
1046
1047 /********************************************************************
C51 COMPILER V8.02 USBCORE 06/17/2010 09:51:39 PAGE 18
1048 函数功能:端点2输入中断处理函数。
1049 入口参数:无。
1050 返 回:无。
1051 备 注:无。
1052 ********************************************************************/
1053 void UsbEp2In(void)
1054 {
1055 1 #ifdef DEBUG0
1056 1 Prints("USB端点2输入中断。\r\n");
1057 1 #endif
1058 1 }
1059 ////////////////////////End of function//////////////////////////////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1284 ----
CONSTANT SIZE = 988 ----
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 + -