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