📄 usbcore.lst
字号:
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 + -