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

📄 usb2uart.lst

📁 通过c语言实现将USB接口转换成串行接口
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -