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

📄 chap_9.lst

📁 该代码是基于菲利普ISP1581USB接口芯片与STC89C51单片机的USB2.0开发代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 429   4                                      if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
 430   4                                              Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
 431   4                                      if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
 432   4                                              Descriptor_Ptr = &HS_Bulk_In_Descriptor[0]; //set pointer to interface descriptor
 433   4                                      count = *Descriptor_Ptr;        //read in descriptor length
 434   4                                      //写入端点2IN描述符
 435   4                                      while(count != 0)
 436   4                                      {
 437   5                                              D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 438   5                                              count--;
 439   5                                              Descriptor_Ptr++;
 440   5                                      }
 441   4                                      //选择高速还是全速端点2OUT描述符
 442   4                                      if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
 443   4                                              Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
 444   4                                      if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
 445   4                                              Descriptor_Ptr = &HS_Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
 446   4                                      count = *Descriptor_Ptr;        //read in descriptor length
 447   4                                      //写入端点2OUT描述符
 448   4                                      while(count != 0)
 449   4                                      {
 450   5                                              D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 451   5                                              count--;
 452   5                                              Descriptor_Ptr++;
 453   5                                      }
 454   4                              }
 455   3                              //使端点有效
 456   3                              D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;      //validate FIFO
 457   3                              wait_ep0tx();
 458   3                              ep0out_ack();
 459   3                      }
 460   2                      break;
 461   2                      
 462   2                      case  3:  //获取字符串描述符
 463   2                              Descriptor_Ptr = &Standard_String_ID[0];                //set pointer to interface descriptor
 464   2                              count = *Descriptor_Ptr;                //get length
 465   2                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 466   2                              if(USB_Device_Request.wLength < count)
 467   2                                      count = USB_Device_Request.wLength;                     //get the remaining length
 468   2                              D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
 469   2                              D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 470   2                              //send string ID
 471   2                              while(count != 0)
 472   2                              {
 473   3                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;      //fill up FIFO
 474   3                                      Descriptor_Ptr++;
 475   3                                      count--;
 476   3                              }
 477   2                              wait_ep0tx();
 478   2                              ep0out_ack();
 479   2                              break;
 480   2                              
 481   2                              
 482   2                      case  4:  
 483   2                              reserved();
 484   2                              break;
 485   2                              
 486   2                      case  5:  //获取端点描述符
 487   2                              Temp = 0;
 488   2                              if((USB_Device_Request.wValue & 0x00ff) > 0x0001)
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 9   

 489   2                              {
 490   3                                      D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
 491   3                                      while(!USB_Int_Flag.BITS.EP0SETUP)
 492   3                                      {
 493   4                                              //读取ISP1581中断寄存器
 494   4                                              USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
 495   4                                              //回写ISP1581中断寄存器
 496   4                                              D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
 497   4                                              if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
 498   4                                                      return;
 499   4                                      }
 500   3                                      USB_Int_Flag.BITS.EP0TX = 0;
 501   3                              }
 502   2                              else
 503   2                              {
 504   3                                      Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor
 505   3                                      count = *Descriptor_Ptr;        //read in descriptor length
 506   3                                      D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 507   3                                      if(count >= USB_Device_Request.wLength)
 508   3                                      {
 509   4                                              Temp = USB_Device_Request.wLength;
 510   4                                              //send endpoint descriptor
 511   4                                              D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
 512   4                                              D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
 513   4                                              for(count = 0 ; count < USB_Device_Request.wLength ; count++)
 514   4                                              {
 515   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 516   5                                                      Descriptor_Ptr++;
 517   5                                              }
 518   4                                              wait_ep0tx();
 519   4                                              ep0out_ack();
 520   4                                      }
 521   3                                      else
 522   3                                      {
 523   4                                              USB_Device_Request.wLength -= count; //send Endpoint descriptor
 524   4                                              Temp += count;
 525   4                                              while(count != 0)
 526   4                                              {
 527   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 528   5                                                      count--;
 529   5                                                      Descriptor_Ptr++;
 530   5                                              }
 531   4                                              Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
 532   4                                              count = *Descriptor_Ptr;        //read in descriptor length
 533   4                                              if(count >= USB_Device_Request.wLength)
 534   4                                              {
 535   5                                                      Temp += USB_Device_Request.wLength;
 536   5                                                      //send endpoint descriptor
 537   5                                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
 538   5                                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
 539   5                                                      for(count = 0 ; count < USB_Device_Request.wLength ; count++)
 540   5                                                      {
 541   6                                                              D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 542   6                                                              Descriptor_Ptr++;
 543   6                                                      }
 544   5                                                      wait_ep0tx();
 545   5                                                      ep0out_ack();
 546   5                                              }
 547   4                                              else
 548   4                                              {
 549   5                                                      USB_Device_Request.wLength -= count; //send Endpoint descriptor
 550   5                                                      Temp += count;
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 10  

 551   5                                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
 552   5                                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
 553   5                                                      while(count != 0)
 554   5                                                      {
 555   6                                                              D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 556   6                                                              count--;
 557   6                                                              Descriptor_Ptr++;
 558   6                                                      }
 559   5                                                      wait_ep0tx();
 560   5                                                      ep0out_ack();
 561   5                                              }       
 562   4                                      }                                       
 563   3                              }
 564   2                              break;
 565   2                              
 566   2                      case  6:  //获取设备限制描述符
 567   2                              Descriptor_Ptr = &HS_Device_Qualifier[0];               //set pointer to High Speed device descriptor
 568   2                              count = *Descriptor_Ptr;                                                        //read in descriptor length
 569   2                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 570   2                              if(USB_Device_Request.wLength < count)
 571   2                              {
 572   3                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
 573   3                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 574   3                                      count = USB_Device_Request.wLength;
 575   3                              }
 576   2                              else
 577   2                              {
 578   3                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
 579   3                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
 580   3                              }
 581   2                              while(count != 0)
 582   2                              {
 583   3                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;      //fill up FIFO
 584   3                                      Descriptor_Ptr++;
 585   3                                      count--;
 586   3                              };
 587   2                              wait_ep0tx();
 588   2                              ep0out_ack();
 589   2                              break;
 590   2                              
 591   2                      case  7  ://获取速度配置描述符
 592   2                              Temp = 64;
 593   2                              Descriptor_Ptr = &Other_Speed_Config_Descriptor[0];     //set pointer to configuration descriptor
 594   2                              count = *Descriptor_Ptr;                                                        //get configuration Descriptor length
 595   2                              D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
 596   2                              if(count >= USB_Device_Request.wLength)                         //Send only Configuration descriptor
 597   2                              {
 598   3                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
 599   3                                      D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
 600   3                                      for(count = 0 ; count < USB_Device_Request.wLength ; count++)
 601   3                                      {
 602   4                                              D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 603   4                                              Descriptor_Ptr++;
 604   4                                      }
 605   3                                      wait_ep0tx();
 606   3                                      ep0out_ack();
 607   3                              }
 608   2                              else //send Configuration,Interface and Endpoint descriptor
 609   2                              {
 610   3                                      if(USB_Device_Request.wLength >= 32)
 611   3                                      {
 612   4                                              while(count != 0)
C51 COMPILER V7.50   CHAP_9                                                                10/30/2007 16:17:28 PAGE 11  

 613   4                                              {
 614   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 615   5                                                      count--;
 616   5                                                      Descriptor_Ptr++;
 617   5                                              }
 618   4                                              Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
 619   4                                              count = *Descriptor_Ptr;        //get the descriptor count
 620   4                                              while(count != 0)
 621   4                                              {
 622   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 623   5                                                      count--;
 624   5                                                      Descriptor_Ptr++;
 625   5                                              }
 626   4                                              Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
 627   4                                              count = *Descriptor_Ptr;        //read in descriptor length
 628   4                                              while(count != 0)
 629   4                                              {
 630   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 631   5                                                      count--;
 632   5                                                      Descriptor_Ptr++;
 633   5                                              }
 634   4                                              Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
 635   4                                              count = *Descriptor_Ptr;        //read in descriptor length
 636   4                                              while(count != 0)
 637   4                                              {
 638   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 639   5                                                      count--;
 640   5                                                      Descriptor_Ptr++;
 641   5                                              }
 642   4                                              Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
 643   4                                              count = *Descriptor_Ptr;        //read in descriptor length
 644   4                                              while(count != 0)
 645   4                                              {
 646   5                                                      D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
 647   5                                                      count--;
 648   5                                                      Descriptor_Ptr++;

⌨️ 快捷键说明

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