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

📄 usb_drv.lst

📁 该源码是基于atmel公司的89C51SND1C的mp3解决方案
💻 LST
📖 第 1 页 / 共 3 页
字号:
 550          * This function manages the GET_CONFIGURATION request.
 551          *----------------------------------------------------------------------------
 552          * EXAMPLE:
 553          *----------------------------------------------------------------------------
 554          * NOTE:
 555          *----------------------------------------------------------------------------
 556          * REQUIREMENTS: 
 557          *****************************************************************************/
 558          void usb_get_configuration (void)
 559          {
 560   1        Usb_clear_RXSETUP();
 561   1        Usb_set_DIR();
 562   1        if (USBCON & MSK_CONFG)
 563   1        {
 564   2          Usb_write_byte(1);
 565   2        }
 566   1        else
 567   1        {
 568   2          Usb_write_byte(0);
 569   2        }
 570   1      
 571   1        Usb_set_TXRDY();
 572   1        while (!(Usb_tx_complete()));
 573   1        Usb_clear_TXCMPL();
 574   1        while (!(Usb_rx_complete()));
 575   1        Usb_clear_RXOUT();
 576   1        Usb_clear_DIR();
 577   1      }
 578          
 579          
 580          /*F**************************************************************************
 581          * NAME: usb_get_status
 582          *----------------------------------------------------------------------------
 583          * PARAMS:
 584          *
 585          * return:
 586          *----------------------------------------------------------------------------
 587          * PURPOSE: 
 588          * This function manages the GET_STATUS request.
 589          *----------------------------------------------------------------------------
 590          * EXAMPLE:
 591          *----------------------------------------------------------------------------
 592          * NOTE:
 593          *----------------------------------------------------------------------------
 594          * REQUIREMENTS: 
 595          *****************************************************************************/
 596          void usb_get_status (void)
 597          {
 598   1      Byte wIndex;
 599   1      
 600   1        ACC = Usb_read_byte();                    /* dummy read */
 601   1        ACC = Usb_read_byte();                    /* dummy read */
 602   1        wIndex = Usb_read_byte();
 603   1        Usb_clear_RXSETUP();
 604   1        Usb_set_DIR();
 605   1        switch(bmRequestType) 
 606   1        {
 607   2          case REQUEST_DEVICE_STATUS:
 608   2          {
 609   3            Usb_write_byte(SELF_POWERED);
 610   3            break;
 611   3          }
C51 COMPILER V7.00  USB_DRV                                                                04/28/2004 09:31:55 PAGE 11  

 612   2          case REQUEST_INTERFACE_STATUS:
 613   2          {
 614   3            Usb_write_byte(0x00);
 615   3            break;
 616   3          }
 617   2          case REQUEST_ENDPOINT_STATUS:
 618   2          {
 619   3            wIndex = wIndex & MSK_EP_DIR;
 620   3            Usb_write_byte(endpoint_status[wIndex]);
 621   3            break;
 622   3          }
 623   2        }
 624   1        Usb_write_byte(0x00);
 625   1        Usb_set_TXRDY();
 626   1        while ((!(Usb_tx_complete())) || (Usb_setup_received()));
 627   1        Usb_clear_TXCMPL();
 628   1        while ((!(Usb_rx_complete())) || (Usb_setup_received()));
 629   1        Usb_clear_RXOUT();
 630   1        Usb_clear_DIR();
 631   1      }
 632          
 633          
 634          /*F**************************************************************************
 635          * NAME: usb_set_feature
 636          *----------------------------------------------------------------------------
 637          * PARAMS:
 638          *
 639          * return:
 640          *----------------------------------------------------------------------------
 641          * PURPOSE: 
 642          * This function manages the SET_FEATURE request.
 643          *----------------------------------------------------------------------------
 644          * EXAMPLE:
 645          *----------------------------------------------------------------------------
 646          * NOTE:
 647          *----------------------------------------------------------------------------
 648          * REQUIREMENTS: 
 649          *****************************************************************************/
 650          void usb_set_feature (void)
 651          {
 652   1        if (bmRequestType == ZERO_TYPE)
 653   1        {
 654   2          Usb_clear_RXSETUP();
 655   2          Usb_set_STALLRQ();
 656   2          while (!(Usb_STALL_sent()));
 657   2          Usb_clear_STALLRQ();
 658   2        }
 659   1        if (bmRequestType == INTERFACE_TYPE)
 660   1        {
 661   2          Usb_clear_RXSETUP();
 662   2          Usb_set_STALLRQ();
 663   2          while (!(Usb_STALL_sent()));
 664   2          Usb_clear_STALLRQ();
 665   2        }
 666   1        if (bmRequestType == ENDPOINT_TYPE)
 667   1        {
 668   2          if (Usb_read_byte() == 0x00)
 669   2          {
 670   3            ACC = Usb_read_byte();                /* dummy read */
 671   3            switch (Usb_read_byte())              /* check wIndex */
 672   3            {
 673   4              case ENDPOINT_1:
C51 COMPILER V7.00  USB_DRV                                                                04/28/2004 09:31:55 PAGE 12  

 674   4              {
 675   5                Usb_select_ep(EP_IN);
 676   5                Usb_set_STALLRQ();
 677   5                Usb_select_ep(EP_CONTROL);
 678   5                endpoint_status[1] = 0x01;
 679   5                Usb_clear_RXSETUP();
 680   5                Usb_set_TXRDY();
 681   5                while (!(Usb_tx_complete()));
 682   5                Usb_clear_TXCMPL();
 683   5                break;
 684   5              }
 685   4              case ENDPOINT_2:
 686   4              {
 687   5                Usb_select_ep(EP_OUT);
 688   5                Usb_set_STALLRQ();
 689   5                Usb_select_ep(EP_CONTROL);
 690   5                endpoint_status[2] = 0x01;
 691   5                Usb_clear_RXSETUP();
 692   5                Usb_set_TXRDY();
 693   5                while (!(Usb_tx_complete()));
 694   5                Usb_clear_TXCMPL();
 695   5                break;
 696   5              }
 697   4              default:
 698   4              {
 699   5                Usb_clear_RXSETUP();
 700   5                Usb_set_STALLRQ();
 701   5                while (!(Usb_STALL_sent()));
 702   5                Usb_clear_STALLRQ();
 703   5                break;
 704   5              }
 705   4            }
 706   3          }
 707   2        }
 708   1      }
 709          
 710          
 711          /*F**************************************************************************
 712          * NAME: usb_clear_feature
 713          *----------------------------------------------------------------------------
 714          * PARAMS:
 715          *
 716          * return:
 717          *----------------------------------------------------------------------------
 718          * PURPOSE: 
 719          * This function manages the SET_FEATURE request.
 720          *----------------------------------------------------------------------------
 721          * EXAMPLE:
 722          *----------------------------------------------------------------------------
 723          * NOTE:
 724          *----------------------------------------------------------------------------
 725          * REQUIREMENTS: 
 726          *****************************************************************************/
 727          void usb_clear_feature (void)
 728          {
 729   1        if (bmRequestType == ZERO_TYPE)
 730   1        {
 731   2          Usb_clear_RXSETUP();
 732   2          Usb_set_STALLRQ();
 733   2          while (!(Usb_STALL_sent()));
 734   2          Usb_clear_STALLRQ();
 735   2        }
C51 COMPILER V7.00  USB_DRV                                                                04/28/2004 09:31:55 PAGE 13  

 736   1        if (bmRequestType == INTERFACE_TYPE)
 737   1        {
 738   2          Usb_clear_RXSETUP();
 739   2          Usb_set_STALLRQ();
 740   2          while (!(Usb_STALL_sent()));
 741   2          Usb_clear_STALLRQ();
 742   2        }
 743   1        if (bmRequestType == ENDPOINT_TYPE)
 744   1        {
 745   2          if (Usb_read_byte() == 0x00)
 746   2          {
 747   3            ACC = Usb_read_byte();                /* dummy read */
 748   3            switch (Usb_read_byte())              /* check wIndex */
 749   3            {
 750   4              case ENDPOINT_1:
 751   4              {
 752   5                Usb_select_ep(EP_IN);
 753   5                        if(Usb_STALL_requested())
 754   5                        {
 755   6                  Usb_clear_STALLRQ();
 756   6                        }
 757   5                        if(Usb_STALL_sent())
 758   5                        {
 759   6                          Usb_clear_STALLED();
 760   6                }
 761   5                UEPRST = 0x02;
 762   5                UEPRST = 0x00;
 763   5                Usb_select_ep(EP_CONTROL);
 764   5                endpoint_status[EP_IN] = 0x00;
 765   5                Usb_clear_RXSETUP();
 766   5                Usb_set_TXRDY();
 767   5                while (!(Usb_tx_complete()));
 768   5                Usb_clear_TXCMPL();
 769   5                break;
 770   5              }
 771   4              case ENDPOINT_2:
 772   4              {
 773   5                Usb_select_ep(EP_OUT);
 774   5                        if(Usb_STALL_requested())
 775   5                        {
 776   6                  Usb_clear_STALLRQ();
 777   6                        }
 778   5                        if(Usb_STALL_sent())
 779   5                        {
 780   6                          Usb_clear_STALLED();
 781   6                }
 782   5                        UEPRST = 0x04;
 783   5                UEPRST = 0x00;
 784   5                Usb_select_ep(EP_CONTROL);
 785   5                endpoint_status[EP_OUT] = 0x00;
 786   5                Usb_clear_RXSETUP();
 787   5                Usb_set_TXRDY();
 788   5                while (!(Usb_tx_complete()));
 789   5                Usb_clear_TXCMPL();
 790   5                break;
 791   5              }
 792   4              case ENDPOINT_0:
 793   4              {
 794   5                Usb_clear_RXSETUP();
 795   5                Usb_set_TXRDY();
 796   5                while (!(Usb_tx_complete()));
 797   5                Usb_clear_TXCMPL();
C51 COMPILER V7.00  USB_DRV                                                                04/28/2004 09:31:55 PAGE 14  

 798   5                break;
 799   5              }
 800   4              default:
 801   4              {
 802   5                Usb_clear_RXSETUP();
 803   5                Usb_set_STALLRQ();
 804   5                while (!(Usb_STALL_sent()));
 805   5                Usb_clear_STALLRQ();
 806   5                break;
 807   5              }
 808   4            }
 809   3          }
 810   2        }
 811   1      }
 812          
 813          
 814          
 815          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1129    ----
   CONSTANT SIZE    =    120    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =      7    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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