📄 usbcore.lst
字号:
754 5
755 5 case SYNCH_FRAME: //同步帧
756 5 #ifdef DEBUG0
Prints("同步帧。\r\n");
#endif
759 5 break;
760 5
761 5 default: //未定义的标准请求
762 5 #ifdef DEBUG0
Prints("错误:未定义的标准输入请求。\r\n");
#endif
765 5 break;
766 5 }
767 4 break;
768 4
769 4 case 1: //类请求
770 4 #ifdef DEBUG0
Prints("USB类输入请求:\r\n");
#endif
773 4 break;
774 4
775 4 case 2: //厂商请求
776 4 #ifdef DEBUG0
Prints("USB厂商输入请求:\r\n");
#endif
779 4 break;
780 4
781 4 default: //未定义的请求。这里只显示一个报错信息。
782 4 #ifdef DEBUG0
Prints("错误:未定义的输入请求。\r\n");
#endif
785 4 break;
786 4 }
787 3 }
788 2 //否则说明是输出请求
789 2 else //if(bmRequestType&0x80==0x80)之else
790 2 {
791 3 //根据bmRequestType的D6~5位散转,D6~5位表示请求的类型
792 3 //0为标准请求,1为类请求,2为厂商请求。
793 3 switch((bmRequestType>>5)&0x03)
794 3 {
795 4 case 0: //标准请求
796 4 #ifdef DEBUG0
Prints("USB标准输出请求:");
#endif
799 4 //USB协议定义了几个标准输出请求,我们实现这些标准请求即可
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:10 PAGE 14
800 4 //请求的代码在bRequest中,对不同的请求代码进行散转
801 4 switch(bRequest)
802 4 {
803 5 case CLEAR_FEATURE: //清除特性
804 5 #ifdef DEBUG0
Prints("清除特性。\r\n");
#endif
807 5 break;
808 5
809 5 case SET_ADDRESS: //设置地址
810 5 #ifdef DEBUG0
Prints("设置地址。地址为:");
PrintHex(wValue&0xFF); //显示所设置的地址
Prints("\r\n");
#endif
815 5 D12SetAddress(wValue&0xFF); //wValue中的低字节是设置的地址值
816 5 //设置地址没有数据过程,直接进入到状态过程,返回一个0长度的数据包
817 5 SendLength=0;
818 5 NeedZeroPacket=1;
819 5 //将数据通过EP0返回
820 5 UsbEp0SendData();
821 5 break;
822 5
823 5 case SET_CONFIGURATION: //设置配置
824 5 #ifdef DEBUG0
Prints("设置配置。\r\n");
#endif
827 5 //使能非0端点。非0端点只有在设置为非0的配置后才能使能。
828 5 //wValue的低字节为配置的值,如果该值为非0,才能使能非0端点。
829 5 //保存当前配置值
830 5 ConfigValue=wValue&0xFF;
831 5 D12SetEndpointEnable(ConfigValue);
832 5 //返回一个0长度的状态数据包
833 5 SendLength=0;
834 5 NeedZeroPacket=1;
835 5 //将数据通过EP0返回
836 5 UsbEp0SendData();
837 5 break;
838 5
839 5 case SET_DESCRIPTOR: //设置描述符
840 5 #ifdef DEBUG0
Prints("设置描述符。\r\n");
#endif
843 5 break;
844 5
845 5 case SET_FEATURE: //设置特性
846 5 #ifdef DEBUG0
Prints("设置特性。\r\n");
#endif
849 5 break;
850 5
851 5 case SET_INTERFACE: //设置接口
852 5 #ifdef DEBUG0
Prints("设置接口。\r\n");
#endif
855 5 break;
856 5
857 5 default: //未定义的标准请求
858 5 #ifdef DEBUG0
Prints("错误:未定义的标准输出请求。\r\n");
#endif
861 5 break;
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:10 PAGE 15
862 5 }
863 4 break;
864 4
865 4 case 1: //类请求
866 4 #ifdef DEBUG0
Prints("USB类输出请求:");
#endif
869 4 switch(bRequest)
870 4 {
871 5 case SET_IDLE:
872 5 #ifdef DEBUG0
Prints("设置空闲。\r\n");
#endif
875 5 //只需要返回一个0长度的数据包即可
876 5 SendLength=0;
877 5 NeedZeroPacket=1;
878 5 //将数据通过EP0返回
879 5 UsbEp0SendData();
880 5 break;
881 5
882 5 default:
883 5 #ifdef DEBUG0
Prints("未知请求。\r\n");
#endif
886 5 break;
887 5 }
888 4 break;
889 4
890 4 case 2: //厂商请求
891 4 #ifdef DEBUG0
Prints("USB厂商输出请求:\r\n");
#endif
894 4 break;
895 4
896 4 default: //未定义的请求。这里只显示一个报错信息。
897 4 #ifdef DEBUG0
Prints("错误:未定义的输出请求。\r\n");
#endif
900 4 break;
901 4 }
902 3 }
903 2 }
904 1 //普通数据输出
905 1 else //if(D12ReadEndpointLastStatus(0)&0x20)之else
906 1 {
907 2 D12ReadEndpointBuffer(0,16,Buffer);
908 2 D12ClearBuffer();
909 2 }
910 1 }
911 ////////////////////////End of function//////////////////////////////
912
913 /********************************************************************
914 函数功能:端点0输入中断处理函数。
915 入口参数:无。
916 返 回:无。
917 备 注:无。
918 ********************************************************************/
919 void UsbEp0In(void)
920 {
921 1 #ifdef DEBUG0
Prints("USB端点0输入中断。\r\n");
#endif
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:10 PAGE 16
924 1 //读最后发送状态,这将清除端点0的中断标志位
925 1 D12ReadEndpointLastStatus(1);
926 1 //发送剩余的字节数
927 1 UsbEp0SendData();
928 1 }
929 ////////////////////////End of function//////////////////////////////
930
931 /********************************************************************
932 函数功能:端点1输出中断处理函数。
933 入口参数:无。
934 返 回:无。
935 备 注:无。
936 ********************************************************************/
937 void UsbEp1Out(void)
938 {
939 1 #ifdef DEBUG0
Prints("USB端点1输出中断。\r\n");
#endif
942 1 }
943 ////////////////////////End of function//////////////////////////////
944
945 /********************************************************************
946 函数功能:端点1输入中断处理函数。
947 入口参数:无。
948 返 回:无。
949 备 注:无。
950 ********************************************************************/
951 void UsbEp1In(void)
952 {
953 1 #ifdef DEBUG0
Prints("USB端点1输入中断。\r\n");
#endif
956 1 //读最后发送状态,这将清除端点1输入的中断标志位
957 1 D12ReadEndpointLastStatus(3);
958 1 //端点1输入处于空闲状态
959 1 Ep1InIsBusy=0;
960 1 }
961 ////////////////////////End of function//////////////////////////////
962
963 /********************************************************************
964 函数功能:端点2输出中断处理函数。
965 入口参数:无。
966 返 回:无。
967 备 注:无。
968 ********************************************************************/
969 void UsbEp2Out(void)
970 {
971 1 #ifdef DEBUG0
Prints("USB端点2输出中断。\r\n");
#endif
974 1 }
975 ////////////////////////End of function//////////////////////////////
976
977 /********************************************************************
978 函数功能:端点2输入中断处理函数。
979 入口参数:无。
980 返 回:无。
981 备 注:无。
982 ********************************************************************/
983 void UsbEp2In(void)
984 {
985 1 #ifdef DEBUG0
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:10 PAGE 17
Prints("USB端点2输入中断。\r\n");
#endif
988 1 }
989 ////////////////////////End of function//////////////////////////////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 782 ----
CONSTANT SIZE = 208 ----
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 + -