⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbcore.lst

📁 此代码为USB键盘开发的相关源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -