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

📄 usb_drv.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 529          * This function manages the GET_CONFIGURATION request.
 530          *----------------------------------------------------------------------------
 531          * EXAMPLE:
 532          *----------------------------------------------------------------------------
 533          * NOTE:
 534          *----------------------------------------------------------------------------
 535          * REQUIREMENTS: 
 536          *****************************************************************************/
 537          void usb_get_configuration (void)
 538          {
 539   1        Usb_clear_RXSETUP();
 540   1        Usb_set_DIR();
 541   1        if (USBCON & MSK_CONFG)
 542   1        {
 543   2          Usb_write_byte(1);
 544   2        }
 545   1        else
 546   1        {
 547   2          Usb_write_byte(0);
 548   2        }
 549   1      
 550   1        Usb_set_TXRDY();
C51 COMPILER V6.20c  USB_DRV                                                               07/10/2002 15:17:37 PAGE 10  

 551   1        while (!(Usb_tx_complete()));
 552   1        Usb_clear_TXCMPL();
 553   1        while (!(Usb_rx_complete()));
 554   1        Usb_clear_RXOUT();
 555   1        Usb_clear_DIR();
 556   1      }
 557          
 558          
 559          /*F**************************************************************************
 560          * NAME: usb_get_status
 561          *----------------------------------------------------------------------------
 562          * PARAMS:
 563          *
 564          * return:
 565          *----------------------------------------------------------------------------
 566          * PURPOSE: 
 567          * This function manages the GET_STATUS request.
 568          *----------------------------------------------------------------------------
 569          * EXAMPLE:
 570          *----------------------------------------------------------------------------
 571          * NOTE:
 572          *----------------------------------------------------------------------------
 573          * REQUIREMENTS: 
 574          *****************************************************************************/
 575          void usb_get_status (void)
 576          {
 577   1      Byte wIndex;
 578   1      
 579   1        ACC = Usb_read_byte();                    /* dummy read */
 580   1        ACC = Usb_read_byte();                    /* dummy read */
 581   1        wIndex = Usb_read_byte();
 582   1        Usb_clear_RXSETUP();
 583   1        Usb_set_DIR();
 584   1        switch(bmRequestType) 
 585   1        {
 586   2          case REQUEST_DEVICE_STATUS:
 587   2          {
 588   3            Usb_write_byte(SELF_POWERED);
 589   3            break;
 590   3          }
 591   2          case REQUEST_INTERFACE_STATUS:
 592   2          {
 593   3            Usb_write_byte(0x00);
 594   3            break;
 595   3          }
 596   2          case REQUEST_ENDPOINT_STATUS:
 597   2          {
 598   3            wIndex = wIndex & MSK_EP_DIR;
 599   3            Usb_write_byte(endpoint_status[wIndex]);
 600   3            break;
 601   3          }
 602   2        }
 603   1        Usb_write_byte(0x00);
 604   1        Usb_set_TXRDY();
 605   1        while ((!(Usb_tx_complete())) || (Usb_setup_received()));
 606   1        Usb_clear_TXCMPL();
 607   1        while ((!(Usb_rx_complete())) || (Usb_setup_received()));
 608   1        Usb_clear_RXOUT();
 609   1        Usb_clear_DIR();
 610   1      }
 611          
 612          
C51 COMPILER V6.20c  USB_DRV                                                               07/10/2002 15:17:37 PAGE 11  

 613          /*F**************************************************************************
 614          * NAME: usb_set_feature
 615          *----------------------------------------------------------------------------
 616          * PARAMS:
 617          *
 618          * return:
 619          *----------------------------------------------------------------------------
 620          * PURPOSE: 
 621          * This function manages the SET_FEATURE request.
 622          *----------------------------------------------------------------------------
 623          * EXAMPLE:
 624          *----------------------------------------------------------------------------
 625          * NOTE:
 626          *----------------------------------------------------------------------------
 627          * REQUIREMENTS: 
 628          *****************************************************************************/
 629          void usb_set_feature (void)
 630          {
 631   1        if (bmRequestType == ZERO_TYPE)
 632   1        {
 633   2          Usb_clear_RXSETUP();
 634   2          Usb_set_STALLRQ();
 635   2          while (!(Usb_STALL_sent()));
 636   2          Usb_clear_STALLRQ();
 637   2        }
 638   1        if (bmRequestType == INTERFACE_TYPE)
 639   1        {
 640   2          Usb_clear_RXSETUP();
 641   2          Usb_set_STALLRQ();
 642   2          while (!(Usb_STALL_sent()));
 643   2          Usb_clear_STALLRQ();
 644   2        }
 645   1        if (bmRequestType == ENDPOINT_TYPE)
 646   1        {
 647   2          if (Usb_read_byte() == 0x00)
 648   2          {
 649   3            ACC = Usb_read_byte();                /* dummy read */
 650   3            switch (Usb_read_byte())              /* check wIndex */
 651   3            {
 652   4              case ENDPOINT_1:
 653   4              {
 654   5                Usb_select_ep(EP_IN);
 655   5                Usb_set_STALLRQ();
 656   5                Usb_select_ep(EP_CONTROL);
 657   5                endpoint_status[1] = 0x01;
 658   5                Usb_clear_RXSETUP();
 659   5                Usb_set_TXRDY();
 660   5                while (!(Usb_tx_complete()));
 661   5                Usb_clear_TXCMPL();
 662   5                break;
 663   5              }
 664   4              case ENDPOINT_2:
 665   4              {
 666   5                Usb_select_ep(EP_OUT);
 667   5                Usb_set_STALLRQ();
 668   5                Usb_select_ep(EP_CONTROL);
 669   5                endpoint_status[2] = 0x01;
 670   5                Usb_clear_RXSETUP();
 671   5                Usb_set_TXRDY();
 672   5                while (!(Usb_tx_complete()));
 673   5                Usb_clear_TXCMPL();
 674   5                break;
C51 COMPILER V6.20c  USB_DRV                                                               07/10/2002 15:17:37 PAGE 12  

 675   5              }
 676   4              default:
 677   4              {
 678   5                Usb_clear_RXSETUP();
 679   5                Usb_set_STALLRQ();
 680   5                while (!(Usb_STALL_sent()));
 681   5                Usb_clear_STALLRQ();
 682   5                break;
 683   5              }
 684   4            }
 685   3          }
 686   2        }
 687   1      }
 688          
 689          
 690          /*F**************************************************************************
 691          * NAME: usb_clear_feature
 692          *----------------------------------------------------------------------------
 693          * PARAMS:
 694          *
 695          * return:
 696          *----------------------------------------------------------------------------
 697          * PURPOSE: 
 698          * This function manages the SET_FEATURE request.
 699          *----------------------------------------------------------------------------
 700          * EXAMPLE:
 701          *----------------------------------------------------------------------------
 702          * NOTE:
 703          *----------------------------------------------------------------------------
 704          * REQUIREMENTS: 
 705          *****************************************************************************/
 706          void usb_clear_feature (void)
 707          {
 708   1        if (bmRequestType == ZERO_TYPE)
 709   1        {
 710   2          Usb_clear_RXSETUP();
 711   2          Usb_set_STALLRQ();
 712   2          while (!(Usb_STALL_sent()));
 713   2          Usb_clear_STALLRQ();
 714   2        }
 715   1        if (bmRequestType == INTERFACE_TYPE)
 716   1        {
 717   2          Usb_clear_RXSETUP();
 718   2          Usb_set_STALLRQ();
 719   2          while (!(Usb_STALL_sent()));
 720   2          Usb_clear_STALLRQ();
 721   2        }
 722   1        if (bmRequestType == ENDPOINT_TYPE)
 723   1        {
 724   2          if (Usb_read_byte() == 0x00)
 725   2          {
 726   3            ACC = Usb_read_byte();                /* dummy read */
 727   3            switch (Usb_read_byte())              /* check wIndex */
 728   3            {
 729   4              case ENDPOINT_1:
 730   4              {
 731   5                Usb_select_ep(EP_IN);
 732   5                Usb_clear_STALLRQ();
 733   5                UEPRST = 0x02;
 734   5                UEPRST = 0x00;
 735   5                Usb_select_ep(EP_CONTROL);
 736   5                endpoint_status[EP_IN] = 0x00;
C51 COMPILER V6.20c  USB_DRV                                                               07/10/2002 15:17:37 PAGE 13  

 737   5                Usb_clear_RXSETUP();
 738   5                Usb_set_TXRDY();
 739   5                while (!(Usb_tx_complete()));
 740   5                Usb_clear_TXCMPL();
 741   5                break;
 742   5              }
 743   4              case ENDPOINT_2:
 744   4              {
 745   5                Usb_select_ep(EP_OUT);
 746   5                Usb_clear_STALLRQ();
 747   5                UEPRST = 0x04;
 748   5                UEPRST = 0x00;
 749   5                Usb_select_ep(EP_CONTROL);
 750   5                endpoint_status[EP_OUT] = 0x00;
 751   5                Usb_clear_RXSETUP();
 752   5                Usb_set_TXRDY();
 753   5                while (!(Usb_tx_complete()));
 754   5                Usb_clear_TXCMPL();
 755   5                break;
 756   5              }
 757   4              case ENDPOINT_0:
 758   4              {
 759   5                Usb_clear_RXSETUP();
 760   5                Usb_set_TXRDY();
 761   5                while (!(Usb_tx_complete()));
 762   5                Usb_clear_TXCMPL();
 763   5                break;
 764   5              }
 765   4              default:
 766   4              {
 767   5                Usb_clear_RXSETUP();
 768   5                Usb_set_STALLRQ();
 769   5                while (!(Usb_STALL_sent()));
 770   5                Usb_clear_STALLRQ();
 771   5                break;
 772   5              }
 773   4            }
 774   3          }
 775   2        }
 776   1      }
 777          
 778          
 779          
 780          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1063    ----
   CONSTANT SIZE    =    120    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       5
   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 + -