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