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

📄 usb2uart.lst

📁 通过c语言实现将USB接口转换成串行接口
💻 LST
📖 第 1 页 / 共 5 页
字号:
 505          /******************************************************************************/
 506          
 507          /*************************写终端点缓冲*****************************************/
 508          uint8 write_endpoint_buff(uint8 endp,uint8 len,uint8 * buff)
 509          {
 510   1       uint8 i;
 511   1       read_last_status(endp);
 512   1       select_endpoint(endp);
 513   1       write_usb_command(Write_Buffer);
 514   1       write_a_usb_data(0);
 515   1       write_a_usb_data(len);
 516   1      #ifdef debug
               Prints("Write endpoint");
               PrintLongInt(endp);
               Prints("\'s buffer ");
               PrintLongInt(len);
               Prints(" bytes.\r\n");
              #endif
 523   1       for(i=0;i<len;i++)
 524   1        {
 525   2         USB_DATA=*(buff+i);
 526   2         USB_WR=0;
 527   2         USB_WR=1;
 528   2      #ifdef debug
                 PrintHex(*(buff+i));
              #endif
 531   2        }
 532   1      #ifdef debug
               Prints("\r\n");
              #endif  
 535   1       USB_DATA=0xFF;
 536   1       validate_buffer();
 537   1       return len;
 538   1      }
 539          /******************************************************************************/
 540          
 541          /***************************断开USB连接****************************************/
 542          void disconnect_usb(void)
 543          {
 544   1      #ifdef debug
               Prints("断开USB连接.\r\n");
              #endif
 547   1       write_usb_command(0xf3);
 548   1       write_a_usb_data(0x0e);
 549   1       write_a_usb_data(0x47);
 550   1       delay(100);
C51 COMPILER V7.06   USB2UART                                                              12/11/2007 01:02:42 PAGE 10  

 551   1      }
 552          /******************************************************************************/
 553          
 554          /*******************************连接USB**************************************/
 555          void connect_usb(void)
 556          {
 557   1      #ifdef debug
               Prints("连接USB.\r\n");
              #endif
 560   1       write_usb_command(0xf3);                         //初始化USBD12
 561   1       write_a_usb_data(0x1e);                          //连接USB
 562   1       write_a_usb_data(0x47);                          //设置频率
 563   1      }
 564          /******************************************************************************/
 565          
 566          /***************************初始化USB***************************************************/
 567          void init_usb(void)               
 568          {
 569   1      #ifdef debug
               Prints("USBD12芯片初始化\r\n");
              #endif
 572   1       set_usb_addr(0);
 573   1       set_endpoint_enable();
 574   1      }
 575          /******************************************************************************/
 576          
 577          /****************************USB总线复位处理***********************************/
 578          void usb_bus_reset(void)
 579          {
 580   1      #ifdef debug
               Prints("USB总线复位.\r\n");
              #endif
 583   1       usb_flags.Register=0;
 584   1       set_endpoint_enable();
 585   1      }
 586          /******************************************************************************/
 587          
 588          /*****************************USB总线挂起处理**********************************/
 589          void usb_bus_suspend(void)
 590          {
 591   1      #ifdef debug
               Prints("USB总线挂起.\r\n");
              #endif
 594   1      }
 595          /******************************************************************************/
 596          
 597          /***************************设置地址***************************************/
 598          void set_usb_address(void)
 599          {
 600   1       usb_flags.flags.set_addr=1;
 601   1       set_usb_addr(Control_Data.DeviceRequest.wValue);
 602   1       while(select_endpoint(1)&0x01);
 603   1       write_endpoint_buff(1,0,0);
 604   1       while(select_endpoint(1)&0x01);
 605   1       usb_flags.flags.usb_endp0_in=0;
 606   1       usb_flags.flags.setup_packet_out=0;
 607   1      }
 608          /******************************************************************************/
 609          
 610          /**************************获取状态响应*****************************************/
 611          void get_status(uint8 receiver)
 612          {
C51 COMPILER V7.06   USB2UART                                                              12/11/2007 01:02:42 PAGE 11  

 613   1       uint8 status[2];
 614   1       switch (receiver)
 615   1        {
 616   2         case 0:                        //获取设备状态
 617   2          status[0]=0x00;
 618   2          status[1]=0x00;
 619   2          break;
 620   2         case 1:                        //获取接口状态
 621   2          status[0]=0x00;
 622   2          status[0]=0x00;
 623   2          break;
 624   2         case 2:                        //获取端点状态
 625   2          status[0]=0x00;
 626   2          status[1]=0x00;
 627   2          break;
 628   2         }
 629   1        write_endpoint_buff(1,2,status);
 630   1        usb_flags.flags.usb_endp0_in=0;
 631   1      }
 632          /******************************************************************************/
 633          
 634          /*********************清除特性*******************************************/
 635          void clear_feature(uint8 receiver)    
 636          {
 637   1      #ifdef debug
               Prints("    清除特性.\r\n");
              #endif
 640   1       receiver=0;
 641   1       write_endpoint_buff(1,0,0);
 642   1       usb_flags.flags.usb_endp0_in=0;
 643   1       usb_flags.flags.setup_packet_out=0;
 644   1      }
 645          /******************************************************************************/
 646          
 647          /*******************设置特性**************************************************/
 648          void set_feature(uint8 receiver)
 649          {
 650   1      #ifdef debug
               Prints("    设置特性.\r\n");
              #endif
 653   1       receiver=0;
 654   1       write_endpoint_buff(1,0,0);
 655   1       usb_flags.flags.usb_endp0_in=0;
 656   1       usb_flags.flags.setup_packet_out=0;
 657   1      }
 658          /******************************************************************************/
 659          
 660          /*****************************设置描述*****************************************/
 661          void set_descriptor(void)
 662          {
 663   1      #ifdef debug
               Prints("    设置描述符.\r\n");
              #endif
 666   1       usb_flags.flags.usb_endp0_in=0;
 667   1       usb_flags.flags.setup_packet_out=0;
 668   1      }
 669          /******************************************************************************/
 670          
 671          /***************************设置配置*******************************************/
 672          void set_configuration(void)
 673          {
 674   1      #ifdef debug
C51 COMPILER V7.06   USB2UART                                                              12/11/2007 01:02:42 PAGE 12  

               Prints("    设置配置.\r\n");
              #endif
 677   1       write_endpoint_buff(1,0,0);
 678   1       usb_flags.flags.usb_endp0_in=0;
 679   1       usb_flags.flags.setup_packet_out=0;
 680   1      }
 681          /******************************************************************************/
 682          
 683          /************************获取配置状态******************************************/
 684          void get_configuration(void)
 685          { 
 686   1       uint8 value=0x01;
 687   1      #ifdef debug
               Prints("    获取配置.\r\n");
              #endif
 690   1       write_endpoint_buff(1,1,&value);
 691   1       usb_flags.flags.usb_endp0_in=0;
 692   1      }
 693          /******************************************************************************/
 694          
 695          /****************************设置接口************************************/
 696          void set_interface(void)
 697          {
 698   1      #ifdef debug
               Prints("    设置接口.\r\n");
              #endif
 701   1       write_endpoint_buff(1,0,0);
 702   1       usb_flags.flags.usb_endp0_in=0;
 703   1       usb_flags.flags.setup_packet_out=0;
 704   1      }
 705          /******************************************************************************/
 706          
 707          /***************************获取接口状态***************************************/
 708          void get_interface(void)
 709          {
 710   1       uint8 value=0x01;
 711   1      #ifdef debug
               Prints("    获取接口.\r\n");
              #endif
 714   1       write_endpoint_buff(1,1,&value);
 715   1       usb_flags.flags.usb_endp0_in=0;
 716   1      }
 717          /******************************************************************************/
 718          
 719          /***********************获取描述符*********************************************/
 720          void get_descriptor(void)
 721          {
 722   1      #ifdef debug
               Prints("    获取描述符.\r\n");
              #endif
 725   1        if(!usb_flags.flags.not_end)
 726   1           {
 727   2            switch(MSB(Control_Data.DeviceRequest.wValue))
 728   2                 {
 729   3              case DEVICE_DESCRIPTOR:
 730   3                          #ifdef debug
                                   Prints("        获取设备描述符.\r\n");
                                      #endif
 733   3                       Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
 734   3                       Control_Data.pData=(uint8 *)(&device_descriptor);
 735   3                   break;
 736   3              case CONFIGURATION_DESCRIPTOR:
C51 COMPILER V7.06   USB2UART                                                              12/11/2007 01:02:42 PAGE 13  

 737   3                          #ifdef debug
                                       Prints("        获取配置描述符.\r\n");
                                      #endif
 740   3                   Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
 741   3                               Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
 742   3                   if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 743   3                   break;
 744   3                      case STRING_DESCRIPTOR:
 745   3                          #ifdef debug
                                   Prints("        获取字符串描述符.\r\n");
                                      #endif
 748   3                               switch(LSB(Control_Data.DeviceRequest.wValue))
 749   3                                {
 750   4                                 case 0:
 751   4                                 #ifdef debug
                                          Prints("            获取语言ID.\r\n");
                                         #endif
 754   4                                  Control_Data.wCount=LANGUAGE_ID[0];
 755   4                      Control_Data.pData=LANGUAGE_ID;
 756   4                                  break;
 757   4      
 758   4                                 case 1:
 759   4                                 #ifdef debug
                                          Prints("            获取厂商字符串.\r\n");
                                         #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -