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

📄 usb_drv.lst

📁 串口小程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 274   2            break;
 275   2          case GET_MAX_LUN:
 276   2            usb_mass_storage_get_lun();
 277   2            break;
 278   2          case MASS_STORAGE_RESET:
 279   2            usb_mass_storage_reset();
 280   2            break;
 281   2          default:
 282   2            Usb_clear_RXSETUP();
 283   2            Usb_set_STALLRQ();
 284   2            while (!Usb_STALL_sent());
 285   2            Usb_clear_STALLRQ();
 286   2            Usb_clear_STALLED();
 287   2            break;
 288   2        }
 289   1      }
 290          
 291          
 292          /*F**************************************************************************
 293          * NAME: usb_set_address
 294          *----------------------------------------------------------------------------
 295          * PARAMS:
 296          *
 297          * return:
 298          *----------------------------------------------------------------------------
 299          * PURPOSE: 
 300          * This function manages the SET_ADDRESS request. The new address is stored
 301          * in the USBADDR register
 302          *----------------------------------------------------------------------------
C51 COMPILER V7.02a   USB_DRV                                                              09/13/2007 11:53:01 PAGE 6   

 303          * EXAMPLE:
 304          *----------------------------------------------------------------------------
 305          * NOTE:
 306          *----------------------------------------------------------------------------
 307          * REQUIREMENTS: 
 308          *****************************************************************************/
 309          void usb_set_address (void)
 310          {
 311   1      Byte add;
 312   1      
 313   1        Usb_clear_DIR();
 314   1        add = Usb_read_byte();                    /* store the LSB of wValue = address */
 315   1        UEPRST = 0x01 ;
 316   1        UEPRST = 0x00 ;
 317   1        Usb_clear_RXSETUP();
 318   1        Usb_set_TXRDY();                          /* send a ZLP for STATUS phase */
 319   1        Usb_set_FADDEN();
 320   1        while (!(Usb_tx_complete()));
 321   1        Usb_clear_TXCMPL();
 322   1        Usb_configure_address(add);
 323   1      }
 324          
 325          
 326          /*F**************************************************************************
 327          * NAME: usb_set_configuration
 328          *----------------------------------------------------------------------------
 329          * PARAMS:
 330          *
 331          * return:
 332          *----------------------------------------------------------------------------
 333          * PURPOSE: 
 334          * This function manages the SET_CONFIGURATION request.
 335          *----------------------------------------------------------------------------
 336          * EXAMPLE:
 337          *----------------------------------------------------------------------------
 338          * NOTE:
 339          *----------------------------------------------------------------------------
 340          * REQUIREMENTS: 
 341          *****************************************************************************/
 342          void usb_set_configuration (void)
 343          {
 344   1      Uchar configuration_number;
 345   1      
 346   1        configuration_number = Usb_read_byte();
 347   1        Usb_clear_DIR();
 348   1        Usb_clear_RXSETUP();
 349   1        Usb_set_TXRDY();                          /* send a ZLP for STATUS phase */
 350   1        if (configuration_number == 0)
 351   1        {
 352   2          Usb_clear_CONFG();
 353   2        }
 354   1        else
 355   1        {
 356   2          Usb_set_CONFG();
 357   2        }
 358   1        while (!Usb_tx_complete());
 359   1        Usb_clear_TXCMPL();
 360   1        Usb_select_ep(EP_IN);                     /* endpoints configuration */
 361   1        UEPCONX = BULK_IN ;
 362   1        Usb_select_ep(EP_OUT);
 363   1        UEPCONX = BULK_OUT;
 364   1      }
C51 COMPILER V7.02a   USB_DRV                                                              09/13/2007 11:53:01 PAGE 7   

 365          
 366          
 367          /*F**************************************************************************
 368          * NAME: usb_get_descriptor
 369          *----------------------------------------------------------------------------
 370          * PARAMS:
 371          *
 372          * return:
 373          *----------------------------------------------------------------------------
 374          * PURPOSE: 
 375          * This function manages the GET_DESCRIPTOR request.
 376          *----------------------------------------------------------------------------
 377          * EXAMPLE:
 378          *----------------------------------------------------------------------------
 379          * NOTE:
 380          *----------------------------------------------------------------------------
 381          * REQUIREMENTS: 
 382          *****************************************************************************/
 383          void usb_get_descriptor (void)
 384          {
 385   1      Byte    data_to_transfer;
 386   1      Uint16  wLength;
 387   1      Byte    descriptor_type;
 388   1      Byte    string_type;
 389   1      
 390   1        Usb_set_DIR();                            /* set out on EP0 */
 391   1        zlp = FALSE;                              /* no zero length packet */
 392   1      
 393   1        string_type = Usb_read_byte();            /* read LSB of wValue */
 394   1        descriptor_type = Usb_read_byte();        /* read MSB of wValue */
 395   1        switch (descriptor_type)
 396   1        {
 397   2          case DEVICE:
 398   2          {
 399   3            data_to_transfer = sizeof (usb_device_descriptor);
 400   3            pbuffer = &(usb_device_descriptor.bLength);
 401   3            break;
 402   3          }
 403   2      
 404   2          case CONFIGURATION:
 405   2          {
 406   3            data_to_transfer = sizeof (usb_configuration);
 407   3            pbuffer = &(usb_configuration.cfg.bLength);
 408   3            break;
 409   3          }
 410   2      
 411   2          case STRING:
 412   2          {
 413   3            switch (string_type)
 414   3            {
 415   4              case LANG_ID:
 416   4              {
 417   5                data_to_transfer = sizeof (usb_language);
 418   5                pbuffer = &(usb_language.bLength);
 419   5                break;
 420   5              }
 421   4              case MAN_INDEX:
 422   4              {
 423   5                data_to_transfer = sizeof (usb_manufacturer);
 424   5                pbuffer = &(usb_manufacturer.bLength);
 425   5                break;
 426   5              }
C51 COMPILER V7.02a   USB_DRV                                                              09/13/2007 11:53:01 PAGE 8   

 427   4              case PROD_INDEX:
 428   4              {
 429   5                data_to_transfer = sizeof (usb_product);
 430   5                pbuffer = &(usb_product.bLength);
 431   5                break;
 432   5              }
 433   4              case SN_INDEX:
 434   4              {
 435   5                data_to_transfer = sizeof (usb_serial_number);
 436   5                pbuffer = &(usb_serial_number.bLength);
 437   5                break;
 438   5              }
 439   4              default:
 440   4              {
 441   5                Usb_clear_RXSETUP();
 442   5                while (!Usb_setup_received())
 443   5                {
 444   6                  Usb_set_STALLRQ();              /* send stall */
 445   6                  while ((!(Usb_STALL_sent())) && (Usb_setup_received()));
 446   6                  Usb_clear_STALLED();
 447   6                  Usb_clear_STALLRQ();
 448   6                }
 449   5                Usb_clear_DIR();                  /* set in on EP0 */
 450   5                return;
 451   5              }
 452   4            }
 453   3            break;
 454   3          }
 455   2      
 456   2          default:
 457   2          {
 458   3            Usb_clear_RXSETUP();
 459   3            while (!Usb_setup_received())
 460   3            {
 461   4              Usb_set_STALLRQ();                  /* send stall */
 462   4              while ((!(Usb_STALL_sent())) && (Usb_setup_received()));
 463   4              Usb_clear_STALLED();
 464   4              Usb_clear_STALLRQ();
 465   4            }
 466   3            Usb_clear_DIR();                      /* set in on EP0 */
 467   3            return;
 468   3          }
 469   2        }
 470   1      
 471   1        ACC = Usb_read_byte();                    /* don't care of wIndex field */
 472   1        ACC = Usb_read_byte();
 473   1        ((Byte*)&wLength)[1] = Usb_read_byte();   /* read wLength */
 474   1        ((Byte*)&wLength)[0] = Usb_read_byte();
 475   1        if (wLength > data_to_transfer)
 476   1        {
 477   2          if ((data_to_transfer % EP_CONTROL_LENGTH) == 0)
 478   2          {
 479   3            zlp = TRUE;                           /* send a zero length packet */
 480   3          }
 481   2          else
 482   2          {
 483   3            zlp = FALSE;                          /* no need of zero length packet */
 484   3          }
 485   2        }
 486   1        else
 487   1        {
 488   2          data_to_transfer = (Byte)wLength;       /* send only requested number of data */
C51 COMPILER V7.02a   USB_DRV                                                              09/13/2007 11:53:01 PAGE 9   

 489   2        }
 490   1        Usb_clear_RXSETUP() ;                     /* clear the receive setup flag */
 491   1      
 492   1        while (data_to_transfer > EP_CONTROL_LENGTH)
 493   1        {
 494   2          pbuffer = send_ep0_packet(pbuffer, EP_CONTROL_LENGTH);
 495   2          data_to_transfer -= EP_CONTROL_LENGTH;
 496   2          while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));
 497   2          if ((Usb_rx_complete()))                /* if no cancel from USB Host */
 498   2          {
 499   3            Usb_clear_RXOUT();
 500   3            return;
 501   3          }
 502   2          if (Usb_tx_complete())
 503   2          {
 504   3            Usb_clear_TXCMPL();
 505   3          }
 506   2        }
 507   1        /* send last data packet */
 508   1        pbuffer = send_ep0_packet(pbuffer, data_to_transfer);
 509   1        data_to_transfer = 0;
 510   1        while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));
 511   1        if ((Usb_rx_complete()))                  /* if no cancel from USB Host */
 512   1        {
 513   2          Usb_clear_RXOUT();
 514   2          return;
 515   2        }
 516   1        if (Usb_tx_complete())
 517   1        {
 518   2          Usb_clear_TXCMPL();
 519   2        }
 520   1        if (zlp == TRUE)
 521   1        {
 522   2          send_ep0_packet(pbuffer, 0);
 523   2          while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));
 524   2          if ((Usb_rx_complete()))              /* if no cancel from USB Host */
 525   2          {
 526   3            Usb_clear_RXOUT();
 527   3            return;
 528   3          }
 529   2          if (Usb_tx_complete())
 530   2          {
 531   3            Usb_clear_TXCMPL();
 532   3          }
 533   2        }
 534   1        while ((!(Usb_rx_complete())) && (!(Usb_setup_received())));
 535   1        if (Usb_setup_received())
 536   1        {
 537   2          return;
 538   2        }
 539   1      
 540   1        if (Usb_rx_complete())
 541   1        {
 542   2          Usb_clear_DIR();                        /* set in on EP0 */
 543   2          Usb_clear_RXOUT();
 544   2        }
 545   1      }
 546          
 547          
 548          /*F**************************************************************************
 549          * NAME: usb_get_configuration
 550          *----------------------------------------------------------------------------
C51 COMPILER V7.02a   USB_DRV                                                              09/13/2007 11:53:01 PAGE 10  

 551          * PARAMS:
 552          *
 553          * return:
 554          *----------------------------------------------------------------------------

⌨️ 快捷键说明

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