📄 usb2uart.lst
字号:
1017 5
1018 5 case 2: //接收者为端点
1019 5 switch (Control_Data.DeviceRequest.bRequest)
1020 5 {
1021 6 default: break;
1022 6 }
1023 5 break;
1024 5
1025 5 case 3: //其它接收者
1026 5 switch (Control_Data.DeviceRequest.bRequest)
1027 5 {
1028 6 default: break;
1029 6 }break;
1030 5
1031 5 default: break;
1032 5 }
1033 4 break;
1034 4
1035 4 case 0x40: //用户请求
1036 4 #ifdef debug
Prints("USB用户输出请求:数据阶段.\r\n");
#endif
1039 4 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1040 4 {
1041 5 case 0: //接收者为设备
1042 5 switch (Control_Data.DeviceRequest.bRequest)
1043 5 {
1044 6 default: break;
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 18
1045 6 }
1046 5 break;
1047 5
1048 5 case 1: //接收者为接口
1049 5 switch (Control_Data.DeviceRequest.bRequest)
1050 5 {
1051 6 default: break;
1052 6 }
1053 5 break;
1054 5
1055 5 case 2: //接收者为端点
1056 5 switch (Control_Data.DeviceRequest.bRequest)
1057 5 {
1058 6 default: break;
1059 6 }
1060 5 break;
1061 5
1062 5 case 3: //其它接收者
1063 5 switch (Control_Data.DeviceRequest.bRequest)
1064 5 {
1065 6 default: break;
1066 6 }
1067 5 break;
1068 5
1069 5 default: break;
1070 5 }
1071 4 }
1072 3 }
1073 2 else
1074 2 {
1075 3 select_endpoint(0);
1076 3 clear_buffer();
1077 3 // Prints("端点0输出数据:");
1078 3 //read_endpoint_buff(0,16,buffer);
1079 3 }
1080 2 }
1081 1 }
1082 /******************************************************************************/
1083
1084 /***********************获取报告*********************************************/
1085 void get_report(void)
1086 {
1087 1 #ifdef debug
Prints(" 获取报告.\r\n");
#endif
1090 1 }
1091 /******************************************************************************/
1092
1093 /**********************获取空闲状态*********************************************/
1094 void get_idle(void)
1095 {
1096 1 #ifdef debug
Prints(" 获取空闲.\r\n");
#endif
1099 1 write_endpoint_buff(1,1,&idle);
1100 1 usb_flags.flags.usb_endp0_in=0;
1101 1 }
1102 /******************************************************************************/
1103
1104 /*************************获取协议**********************************************/
1105 void get_protocol(void)
1106 {
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 19
1107 1 #ifdef debug
Prints(" 获取协议.\r\n");
#endif
1110 1 write_endpoint_buff(1,1,&protocol);
1111 1 usb_flags.flags.usb_endp0_in=0;
1112 1 }
1113 /******************************************************************************/
1114
1115 /***********************设置报告***********************************************/
1116 void set_report(void)
1117 {
1118 1 #ifdef debug
Prints(" 设置报告.\r\n");
#endif
1121 1 }
1122 /******************************************************************************/
1123
1124 /***********************设置空闲***********************************************/
1125 void set_idle(void)
1126 {
1127 1 #ifdef debug
Prints(" 设置空闲.\r\n");
#endif
1130 1 while(select_endpoint(1)&0x01);
1131 1 write_endpoint_buff(1,0,0);
1132 1 idle=Control_Data.DeviceRequest.wValue;
1133 1 usb_flags.flags.usb_endp0_in=0;
1134 1 usb_flags.flags.setup_packet_out=0;
1135 1 }
1136 /******************************************************************************/
1137
1138 /**********************设置协议**************************************************/
1139 void set_protocol(void)
1140 {
1141 1 #ifdef debug
Prints(" 设置协议.\r\n");
#endif
1144 1 while(select_endpoint(1)&0x01);
1145 1 write_endpoint_buff(1,0,0);
1146 1 protocol=Control_Data.DeviceRequest.wValue;
1147 1 usb_flags.flags.usb_endp0_in=0;
1148 1 usb_flags.flags.setup_packet_out=0;
1149 1 }
1150 /******************************************************************************/
1151
1152 /**********************获取当前串口设置*****************************/
1153 void GetLineCoding(void)
1154 {
1155 1 #ifdef debug
Prints(" 获取串口设置.\r\n");
#endif
1158 1 while(select_endpoint(1)&0x01);
1159 1 write_endpoint_buff(1,7,(uint8 *)&LineCoding);
1160 1 usb_flags.flags.usb_endp0_in=0;
1161 1 }
1162 /*******************************************************************/
1163
1164 /**********************设置控制线状态******************************/
1165 void SetControlLineState(void)
1166 {
1167 1 #ifdef debug
Prints(" 设置控制线状态.\r\n");
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 20
#endif
1170 1 while(select_endpoint(1)&0x01);
1171 1 write_endpoint_buff(1,0,0);
1172 1 RTS=!((Control_Data.DeviceRequest.wValue)&0x2);
1173 1 DTR=!((Control_Data.DeviceRequest.wValue)&0x1);
1174 1 usb_flags.flags.usb_endp0_in=0;
1175 1 usb_flags.flags.setup_packet_out=0;
1176 1 }
1177 /*******************************************************************/
1178
1179 /*******************************************************************/
1180 void SetLineCoding(void)
1181 {
1182 1 #ifdef debug
Prints(" 设置串口属性.\r\n");
#endif
1185 1 while(select_endpoint(1)&0x01); //等待端点1发送完毕
1186 1 write_endpoint_buff(1,0,0); //返回0长度的状态包
1187 1 usb_flags.flags.usb_endp0_in=0;
1188 1 usb_flags.flags.setup_packet_out=0;
1189 1 }
1190 /*******************************************************************/
1191
1192 /*******************************************************************/
1193 void SendBreak(void)
1194 {
1195 1 #ifdef debug
Prints(" 设置break time\r\n");
#endif
1198 1
1199 1 if(Control_Data.DeviceRequest.wValue==0)
1200 1 {
1201 2 TXD=1;
1202 2 }
1203 1 if(Control_Data.DeviceRequest.wValue==0xFFFF)
1204 1 {
1205 2 TXD=0;
1206 2 }
1207 1 while(select_endpoint(1)&0x01); //等待端点1发送完毕
1208 1 write_endpoint_buff(1,0,0); //返回0长度的状态包
1209 1 usb_flags.flags.usb_endp0_in=0;
1210 1 usb_flags.flags.setup_packet_out=0;
1211 1 }
1212 /*******************************************************************/
1213
1214
1215 #define DCD P1_0
1216 #define DSR P1_1
1217 #define CTS P1_2
1218 #define RING P1_3
1219 /*******************************************************************/
1220 void SerialState(void)
1221 {
1222 1 uint16 state;
1223 1
1224 1 #ifdef debug
Prints(" 获取串口状态.\r\n");
#endif
1227 1
1228 1 state=0;
1229 1 if(DCD)
1230 1 {
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 21
1231 2 state|=0x01;
1232 2 }
1233 1 if(DSR)
1234 1 {
1235 2 state|=0x02;
1236 2 }
1237 1 if(CTS)
1238 1 {
1239 2 state|=0x04;
1240 2 }
1241 1 if(RING)
1242 1 {
1243 2 state|=0x08;
1244 2 }
1245 1 if(Overflow)
1246 1 {
1247 2 state|=0x40;
1248 2 Overflow=0;
1249 2 }
1250 1
1251 1 state=SWAP16(state);
1252 1
1253 1 while(select_endpoint(1)&0x01);
1254 1 write_endpoint_buff(1,2,(uint8 *)&state);
1255 1 usb_flags.flags.usb_endp0_in=0;
1256 1 }
1257 /*******************************************************************/
1258
1259 /****************************终端点0输入处理**************************************/
1260 void endp0_in(void)
1261 {
1262 1 read_last_status(1);
1263 1 //如果是输入请求包
1264 1 if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
1265 1 {
1266 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
1267 2 {
1268 3 case 0x00: //标准请求
1269 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -