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

📄 usbcore.lst

📁 USB多媒体键盘鼠标原程序代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 992   4           #ifdef DEBUG0
 993   4            Prints("USB类输入请求:\r\n");
 994   4           #endif
 995   4          break;
 996   4          
 997   4          case 2:  //厂商请求
 998   4           #ifdef DEBUG0
 999   4            Prints("USB厂商输入请求:\r\n");
1000   4           #endif
1001   4          break;
1002   4          
1003   4          default: //未定义的请求。这里只显示一个报错信息。
1004   4           #ifdef DEBUG0
1005   4            Prints("错误:未定义的输入请求。\r\n");
1006   4           #endif
1007   4          break;
1008   4         }
1009   3        }
1010   2        //否则说明是输出请求
1011   2        else //if(bmRequestType&0x80==0x80)之else
1012   2        {
1013   3         //根据bmRequestType的D6~5位散转,D6~5位表示请求的类型
1014   3         //0为标准请求,1为类请求,2为厂商请求。
1015   3         switch((bmRequestType>>5)&0x03)
1016   3         {
1017   4          case 0:  //标准请求
1018   4           #ifdef DEBUG0
1019   4            Prints("USB标准输出请求:");
1020   4           #endif
1021   4           //USB协议定义了几个标准输出请求,我们实现这些标准请求即可
1022   4           //请求的代码在bRequest中,对不同的请求代码进行散转
1023   4           switch(bRequest)
1024   4           {
1025   5            case CLEAR_FEATURE: //清除特性
1026   5             #ifdef DEBUG0
1027   5              Prints("清除特性。\r\n");
1028   5             #endif
1029   5            break;
1030   5            
1031   5            case SET_ADDRESS:  //设置地址
1032   5             #ifdef DEBUG0
1033   5              Prints("设置地址。地址为:");
1034   5              PrintHex(wValue&0xFF); //显示所设置的地址
1035   5              Prints("\r\n");
1036   5             #endif
1037   5             D12SetAddress(wValue&0xFF); //wValue中的低字节是设置的地址值
1038   5             //设置地址没有数据过程,直接进入到状态过程,返回一个0长度的数据包
1039   5             SendLength=0;
1040   5             NeedZeroPacket=1;
1041   5             //将数据通过EP0返回
1042   5             UsbEp0SendData();
1043   5            break;
1044   5            
1045   5            case SET_CONFIGURATION: //设置配置
1046   5             #ifdef DEBUG0
1047   5              Prints("设置配置。\r\n");
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:49 PAGE 18  

1048   5             #endif
1049   5             //使能非0端点。非0端点只有在设置为非0的配置后才能使能。
1050   5             //wValue的低字节为配置的值,如果该值为非0,才能使能非0端点。
1051   5             //保存当前配置值
1052   5             ConfigValue=wValue&0xFF;
1053   5             D12SetEndpointEnable(ConfigValue);
1054   5             //返回一个0长度的状态数据包
1055   5             SendLength=0;
1056   5             NeedZeroPacket=1;
1057   5             //将数据通过EP0返回
1058   5             UsbEp0SendData();
1059   5            break;
1060   5            
1061   5            case SET_DESCRIPTOR: //设置描述符
1062   5             #ifdef DEBUG0
1063   5              Prints("设置描述符。\r\n");
1064   5             #endif
1065   5            break;
1066   5            
1067   5            case SET_FEATURE: //设置特性
1068   5             #ifdef DEBUG0
1069   5              Prints("设置特性。\r\n");
1070   5             #endif
1071   5            break;
1072   5      
1073   5            case SET_INTERFACE: //设置接口
1074   5             #ifdef DEBUG0
1075   5              Prints("设置接口。\r\n");
1076   5             #endif
1077   5            break;      
1078   5            
1079   5            default:  //未定义的标准请求
1080   5             #ifdef DEBUG0
1081   5              Prints("错误:未定义的标准输出请求。\r\n");
1082   5             #endif       
1083   5            break;
1084   5           }
1085   4          break;
1086   4          
1087   4          case 1:  //类请求
1088   4           #ifdef DEBUG0
1089   4            Prints("USB类输出请求:");
1090   4           #endif
1091   4           switch(bRequest)
1092   4           {
1093   5            case SET_IDLE:
1094   5             #ifdef DEBUG0
1095   5              Prints("设置空闲。\r\n");
1096   5             #endif
1097   5             //只需要返回一个0长度的数据包即可
1098   5             SendLength=0;
1099   5             NeedZeroPacket=1;
1100   5             //将数据通过EP0返回
1101   5             UsbEp0SendData();
1102   5            break;
1103   5            
1104   5            default:
1105   5             #ifdef DEBUG0
1106   5              Prints("未知请求。\r\n");
1107   5             #endif
1108   5            break;
1109   5           }
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:49 PAGE 19  

1110   4          break;
1111   4          
1112   4          case 2:  //厂商请求
1113   4           #ifdef DEBUG0
1114   4            Prints("USB厂商输出请求:\r\n");
1115   4           #endif
1116   4          break;
1117   4          
1118   4          default: //未定义的请求。这里只显示一个报错信息。
1119   4           #ifdef DEBUG0
1120   4            Prints("错误:未定义的输出请求。\r\n");
1121   4           #endif
1122   4          break;
1123   4         }
1124   3        }
1125   2       }
1126   1       //普通数据输出
1127   1       else //if(D12ReadEndpointLastStatus(0)&0x20)之else
1128   1       {
1129   2        D12ReadEndpointBuffer(0,16,Buffer);
1130   2        D12ClearBuffer();
1131   2       }
1132   1      }
1133          ////////////////////////End of function//////////////////////////////
1134          
1135          /********************************************************************
1136          函数功能:端点0输入中断处理函数。
1137          入口参数:无。
1138          返    回:无。
1139          备    注:无。
1140          ********************************************************************/
1141          void UsbEp0In(void)
1142          {
1143   1      #ifdef DEBUG0
1144   1       Prints("USB端点0输入中断。\r\n");
1145   1      #endif
1146   1       //读最后发送状态,这将清除端点0的中断标志位
1147   1       D12ReadEndpointLastStatus(1);
1148   1       //发送剩余的字节数
1149   1       UsbEp0SendData();
1150   1      }
1151          ////////////////////////End of function//////////////////////////////
1152          
1153          /********************************************************************
1154          函数功能:端点1输出中断处理函数。
1155          入口参数:无。
1156          返    回:无。
1157          备    注:无。
1158          ********************************************************************/
1159          void UsbEp1Out(void)
1160          {
1161   1       uint8 Buf[2]; //用来保存2字节的输出报告,控制LED。
1162   1      #ifdef DEBUG0
1163   1       Prints("USB端点1输出中断。\r\n");
1164   1      #endif
1165   1       //读端点最后状态,这将清除端点1输出的中断标志位
1166   1       D12ReadEndpointLastStatus(2);
1167   1       //从端点1输出缓冲读回2字节数据
1168   1       D12ReadEndpointBuffer(2,2,Buf);
1169   1       //清除端点缓冲区
1170   1       D12ClearBuffer();
1171   1       //注意输出报告也增加了一字节的报告ID。
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:49 PAGE 20  

1172   1       //第1字节为报告ID,第2字节为LED状态,某位为1时,表示LED亮。
1173   1       //我们定义的键盘的报告ID为1,所以这里判断一下报告ID是否为1。
1174   1       if(Buf[0]==0x01)  //报告ID为1,即键盘的输出报告
1175   1       {
1176   2        LEDs=~Buf[1];
1177   2       }
1178   1      }
1179          ////////////////////////End of function//////////////////////////////
1180          
1181          /********************************************************************
1182          函数功能:端点1输入中断处理函数。
1183          入口参数:无。
1184          返    回:无。
1185          备    注:无。
1186          ********************************************************************/
1187          void UsbEp1In(void)
1188          {
1189   1      #ifdef DEBUG0
1190   1       Prints("USB端点1输入中断。\r\n");
1191   1      #endif
1192   1       //读最后发送状态,这将清除端点1输入的中断标志位
1193   1       D12ReadEndpointLastStatus(3);
1194   1       //端点1输入处于空闲状态
1195   1       Ep1InIsBusy=0;
1196   1      }
1197          ////////////////////////End of function//////////////////////////////
1198          
1199          /********************************************************************
1200          函数功能:端点2输出中断处理函数。
1201          入口参数:无。
1202          返    回:无。
1203          备    注:无。
1204          ********************************************************************/
1205          void UsbEp2Out(void)
1206          {
1207   1      #ifdef DEBUG0
1208   1       Prints("USB端点2输出中断。\r\n");
1209   1      #endif
1210   1      }
1211          ////////////////////////End of function//////////////////////////////
1212          
1213          /********************************************************************
1214          函数功能:端点2输入中断处理函数。
1215          入口参数:无。
1216          返    回:无。
1217          备    注:无。
1218          ********************************************************************/
1219          void UsbEp2In(void)
1220          {
1221   1      #ifdef DEBUG0
1222   1       Prints("USB端点2输入中断。\r\n");
1223   1      #endif
1224   1      }
1225          ////////////////////////End of function//////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1265    ----
   CONSTANT SIZE    =   1076    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16       2
C51 COMPILER V7.06   USBCORE                                                               11/16/2008 15:59:49 PAGE 21  

   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 + -