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

📄 usbofcompuer00.lst

📁 基于PHILIPS的D12芯片USB固件的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 506   1      #ifdef debug
               Prints("连接USB.\r\n");
              #endif
 509   1       write_usb_command(0xf3);                         //初始化USBD12
 510   1       write_a_usb_data(0x1e);                          //连接USB
 511   1       write_a_usb_data(0x47);                          //设置频率
 512   1      }
 513          /******************************************************************************/
 514          
 515          /***************************初始化USB***************************************************/
 516          void init_usb(void)               
 517          {
 518   1      #ifdef debug
               Prints("USBD12芯片初始化\r\n");
              #endif
 521   1       set_usb_addr(0);
 522   1       set_endpoint_enable();
 523   1      }
 524          /******************************************************************************/
 525          
 526          /****************************USB总线复位处理***********************************/
 527          void usb_bus_reset(void)
 528          {
 529   1      #ifdef debug
               Prints("USB总线复位.\r\n");
              #endif
 532   1       usb_flags.Register=0;
 533   1       set_endpoint_enable();
 534   1      }
 535          /******************************************************************************/
 536          
 537          /*****************************USB总线挂起处理**********************************/
 538          void usb_bus_suspend(void)
 539          {
 540   1      #ifdef debug
               Prints("USB总线挂起.\r\n");
              #endif
 543   1      }
 544          /******************************************************************************/
 545          
 546          /***************************设置地址***************************************/
 547          void set_usb_address(void)
 548          {
 549   1       usb_flags.flags.set_addr=1;
 550   1       set_usb_addr(Control_Data.DeviceRequest.wValue);
 551   1       while(select_endpoint(1)&0x01);
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 10  

 552   1       write_endpoint_buff(1,0,0);
 553   1       while(select_endpoint(1)&0x01);
 554   1       usb_flags.flags.usb_endp0_in=0;
 555   1       usb_flags.flags.setup_packet_out=0;
 556   1      }
 557          /******************************************************************************/
 558          
 559          /**************************获取状态响应*****************************************/
 560          void get_status(uint8 receiver)
 561          {
 562   1       uint8 status[2];
 563   1       switch (receiver)
 564   1        {
 565   2         case 0:                        //获取设备状态
 566   2          status[0]=0x00;
 567   2          status[1]=0x00;
 568   2          break;
 569   2         case 1:                        //获取接口状态
 570   2          status[0]=0x00;
 571   2          status[0]=0x00;
 572   2          break;
 573   2         case 2:                        //获取端点状态
 574   2          status[0]=0x00;
 575   2          status[1]=0x00;
 576   2          break;
 577   2         }
 578   1        write_endpoint_buff(1,2,status);
 579   1        usb_flags.flags.usb_endp0_in=0;
 580   1      }
 581          /******************************************************************************/
 582          
 583          /*********************清除特性*******************************************/
 584          void clear_feature(uint8 receiver)    
 585          {
 586   1      #ifdef debug
               Prints("    清除特性.\r\n");
              #endif
 589   1       receiver=0;
 590   1       write_endpoint_buff(1,0,0);
 591   1       usb_flags.flags.usb_endp0_in=0;
 592   1       usb_flags.flags.setup_packet_out=0;
 593   1      }
 594          /******************************************************************************/
 595          
 596          /*******************设置特性**************************************************/
 597          void set_feature(uint8 receiver)
 598          {
 599   1      #ifdef debug
               Prints("    设置特性.\r\n");
              #endif
 602   1       receiver=0;
 603   1       write_endpoint_buff(1,0,0);
 604   1       usb_flags.flags.usb_endp0_in=0;
 605   1       usb_flags.flags.setup_packet_out=0;
 606   1      }
 607          /******************************************************************************/
 608          
 609          /*****************************设置描述*****************************************/
 610          void set_descriptor(void)
 611          {
 612   1      #ifdef debug
               Prints("    设置描述符.\r\n");
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 11  

              #endif
 615   1       usb_flags.flags.usb_endp0_in=0;
 616   1       usb_flags.flags.setup_packet_out=0;
 617   1      }
 618          /******************************************************************************/
 619          
 620          /***************************设置配置*******************************************/
 621          void set_configuration(void)
 622          {
 623   1      #ifdef debug
               Prints("    设置配置.\r\n");
              #endif
 626   1       write_endpoint_buff(1,0,0);
 627   1       usb_flags.flags.usb_endp0_in=0;
 628   1       usb_flags.flags.setup_packet_out=0;
 629   1      }
 630          /******************************************************************************/
 631          
 632          /************************获取配置状态******************************************/
 633          void get_configuration(void)
 634          { 
 635   1       uint8 value=0x01;
 636   1      #ifdef debug
               Prints("    获取配置.\r\n");
              #endif
 639   1       write_endpoint_buff(1,1,&value);
 640   1       usb_flags.flags.usb_endp0_in=0;
 641   1      }
 642          /******************************************************************************/
 643          
 644          /****************************设置接口************************************/
 645          void set_interface(void)
 646          {
 647   1      #ifdef debug
               Prints("    设置接口.\r\n");
              #endif
 650   1       write_endpoint_buff(1,0,0);
 651   1       usb_flags.flags.usb_endp0_in=0;
 652   1       usb_flags.flags.setup_packet_out=0;
 653   1      }
 654          /******************************************************************************/
 655          
 656          /***************************获取接口状态***************************************/
 657          void get_interface(void)
 658          {
 659   1       uint8 value=0x01;
 660   1      #ifdef debug
               Prints("    获取接口.\r\n");
              #endif
 663   1       write_endpoint_buff(1,1,&value);
 664   1       usb_flags.flags.usb_endp0_in=0;
 665   1      }
 666          /******************************************************************************/
 667          
 668          /***********************获取描述符*********************************************/
 669          void get_descriptor(void)
 670          {
 671   1      #ifdef debug
               Prints("    获取描述符.\r\n");
              #endif
 674   1        if(!usb_flags.flags.not_end)
 675   1           {
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 12  

 676   2            switch(MSB(Control_Data.DeviceRequest.wValue))
 677   2                 {
 678   3              case DEVICE_DESCRIPTOR:
 679   3                          #ifdef debug
                                   Prints("        获取设备描述符.\r\n");
                                      #endif
 682   3                       Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
 683   3                       Control_Data.pData=(uint8 *)(&device_descriptor);
 684   3                   break;
 685   3              case CONFIGURATION_DESCRIPTOR:
 686   3                          #ifdef debug
                                       Prints("        获取配置描述符.\r\n");
                                      #endif
 689   3                   Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
 690   3                               Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
 691   3                   if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 692   3                   break;
 693   3                      case STRING_DESCRIPTOR:
 694   3                          #ifdef debug
                                   Prints("        获取字符串描述符.\r\n");
                                      #endif
 697   3                               switch(LSB(Control_Data.DeviceRequest.wValue))
 698   3                                {
 699   4                                 case 0:
 700   4                                 #ifdef debug
                                          Prints("            获取语言ID.\r\n");
                                         #endif
 703   4                                  Control_Data.wCount=LANGUAGE_ID[0];
 704   4                      Control_Data.pData=LANGUAGE_ID;
 705   4                                  break;
 706   4      
 707   4                                 case 1:
 708   4                                 #ifdef debug
                                          Prints("            获取厂商字符串.\r\n");
                                         #endif
 711   4                                  Control_Data.wCount=ManufacturerString[0];
 712   4                      Control_Data.pData=ManufacturerString;
 713   4                                  break;
 714   4      
 715   4                                 case 2:
 716   4                                 #ifdef debug
                                          Prints("            获取产品字符串.\r\n");
                                         #endif
 719   4                                  Control_Data.wCount=ProducterString[0];
 720   4                      Control_Data.pData=ProducterString;
 721   4                                  break;
 722   4      
 723   4                                 case 3:
 724   4                                 #ifdef debug
                               Prints("            获取设备序列号.\r\n");
                                         #endif
 727   4                                   Control_Data.wCount=device_serial_number[0];
 728   4                                   Control_Data.pData=device_serial_number;
 729   4                                 break;
 730   4      
 731   4                                 default:
 732   4                       Prints("            其它描述符(未知),描述符编码:");
 733   4                                       PrintHex(MSB(Control_Data.DeviceRequest.wValue));
 734   4                                       Prints("\r\n");
 735   4                       DispLineInf();
 736   4                     break;
 737   4                                }
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 13  

 738   3                               break;
 739   3                       default:
 740   3                           Prints("       获取其它描述符..................描述符索引为:");
 741   3                               PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
 742   3                               Prints("\r\n"); 
 743   3                               DispLineInf();
 744   3                        break;
 745   3                      }
 746   2            if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 747   2               }
 748   1              //写数据到D12输入端点
 749   1          if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
 750   1           {
 751   2                write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
 752   2                Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
 753   2            Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
 754   2                if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
 755   2                 else usb_flags.flags.usb_endp0_in=0;
 756   2                return;
 757   2               }
 758   1          else
 759   1           {
 760   2                write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
 761   2            usb_flags.flags.setup_packet_in=0;
 762   2                usb_flags.flags.usb_endp0_in=0;

⌨️ 快捷键说明

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