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

📄 usb_task.lst

📁 该源码是基于atmel公司的89C51SND1C的mp3解决方案
💻 LST
📖 第 1 页 / 共 2 页
字号:
 221   1                  
 222   1        dCBWTag[0] = Usb_read_byte();             /* Store Tag to be repeated in CSW */
 223   1        dCBWTag[1] = Usb_read_byte();
 224   1        dCBWTag[2] = Usb_read_byte();
 225   1        dCBWTag[3] = Usb_read_byte();
 226   1        ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
 227   1        ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
 228   1        ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
 229   1        ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
 230   1        if (Usb_read_byte() != 0x00)              /* store bmCBWFlags.bit7 */
 231   1        {
 232   2          Usb_CBWFlag_in();
 233   2          if (cbw_error)
 234   2          {
 235   3            Usb_clear_RXOUT_PP();
 236   3            Usb_select_ep(EP_IN);
 237   3            Usb_set_STALLRQ();
 238   3            return;
 239   3          }
C51 COMPILER V7.00  USB_TASK                                                               04/28/2004 09:31:57 PAGE 5   

 240   2        }
 241   1        else
 242   1        {
 243   2          Usb_CBWFlag_out();
 244   2          if (cbw_error)
 245   2          {
 246   3            Usb_clear_RXOUT_PP();
 247   3            Usb_set_STALLRQ();
 248   3            return;
 249   3          }
 250   2        }
 251   1      
 252   1        if (ms_multiple_drive)
 253   1        { /* multiple drive supported */
 254   2          if (Usb_read_byte() == 0)
 255   2          { /* LUN = 0 */
 256   3            ACC = Usb_read_byte();                /* dummy CBWCBLength read */
 257   3            Usb_clear_no_data_phase();
 258   3            Sbc_command_chip();
 259   3          }
 260   2          else
 261   2          { /* LUN = 1 */
 262   3            ACC = Usb_read_byte();                /* dummy CBWCBLength read */
 263   3            Usb_clear_no_data_phase();
 264   3            Sbc_command_card();
 265   3          }
 266   2        }
 267   1        else
 268   1        { /* only 1 drive supported */
 269   2          ACC = Usb_read_byte();                  /* dummy LUN read */
 270   2          ACC = Usb_read_byte();                  /* dummy CBWCBLength read */
 271   2          Usb_clear_no_data_phase();
 272   2      
 273   2          if (gl_memory == MEM_CHIP)
 274   2          { /* on-board memory */
 275   3            Sbc_command_chip();
 276   3          }
 277   2          else
 278   2          { /* memory card */
 279   3            Sbc_command_card();
 280   3          }
 281   2        }
 282   1      }
 283          
 284          
 285          /*F**************************************************************************
 286          * NAME: usb_mass_storage_csw
 287          *----------------------------------------------------------------------------
 288          * PARAMS:
 289          *
 290          * return:
 291          *----------------------------------------------------------------------------
 292          * PURPOSE: 
 293          *   Command Status Wrapper management
 294          *----------------------------------------------------------------------------
 295          * EXAMPLE:
 296          *----------------------------------------------------------------------------
 297          * NOTE:
 298          *
 299          * REQUIREMENTS: 
 300          *****************************************************************************/
 301          void usb_mass_storage_csw (void)
C51 COMPILER V7.00  USB_TASK                                                               04/28/2004 09:31:57 PAGE 6   

 302          {
 303   1        Usb_select_ep(EP_IN);
 304   1        while (Usb_STALL_requested())
 305   1        {
 306   2          Usb_select_ep(EP_CONTROL);
 307   2          if (Usb_setup_received())
 308   2          {
 309   3            usb_enumeration_process();
 310   3          }
 311   2          Usb_select_ep(EP_IN);
 312   2        }
 313   1      
 314   1        Usb_select_ep(EP_OUT);
 315   1        while (Usb_STALL_requested())
 316   1        {
 317   2          Usb_select_ep(EP_CONTROL);
 318   2          if (Usb_setup_received())
 319   2          {
 320   3            usb_enumeration_process();
 321   3          }
 322   2          Usb_select_ep(EP_OUT);
 323   2        }
 324   1      
 325   1        Usb_clear_no_data_phase();
 326   1        Usb_clear_status_ready();
 327   1        Usb_select_ep(EP_IN);
 328   1        Usb_write_byte(0x55);
 329   1        Usb_write_byte(0x53);
 330   1        Usb_write_byte(0x42);
 331   1        Usb_write_byte(0x53);
 332   1      
 333   1        Usb_write_byte(dCBWTag[0]);
 334   1        Usb_write_byte(dCBWTag[1]);
 335   1        Usb_write_byte(dCBWTag[2]);
 336   1        Usb_write_byte(dCBWTag[3]);
 337   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[3]);
 338   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[2]);
 339   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[1]);
 340   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[0]);
 341   1        Usb_write_byte(status);
 342   1        Usb_set_TXRDY();
 343   1      
 344   1        Usb_select_ep(EP_IN);
 345   1        while (!Usb_tx_complete());
 346   1        Usb_clear_TXCMPL();
 347   1      }
 348          
 349          
 350          /*F**************************************************************************
 351          * NAME: usb_mass_storage_reset
 352          *----------------------------------------------------------------------------
 353          * PARAMS:
 354          *
 355          * return:
 356          *----------------------------------------------------------------------------
 357          * PURPOSE: 
 358          *   This function handles the mass storage reset command
 359          *----------------------------------------------------------------------------
 360          * EXAMPLE:
 361          *----------------------------------------------------------------------------
 362          * NOTE:
 363          *----------------------------------------------------------------------------
C51 COMPILER V7.00  USB_TASK                                                               04/28/2004 09:31:57 PAGE 7   

 364          * REQUIREMENTS: 
 365          *****************************************************************************/
 366          void usb_mass_storage_reset (void)
 367          {
 368   1        Usb_clear_RXSETUP();
 369   1        Usb_set_TXRDY();
 370   1        while (!(Usb_tx_complete()));
 371   1        Usb_clear_TXCMPL();
 372   1      }
 373          
 374          
 375          /*F**************************************************************************
 376          * NAME: usb_mass_storage_get_lun
 377          *----------------------------------------------------------------------------
 378          * PARAMS:
 379          *
 380          * return:
 381          *----------------------------------------------------------------------------
 382          * PURPOSE: 
 383          *   This function returns the mass storage class specific Logical Unit Number.
 384          *----------------------------------------------------------------------------
 385          * EXAMPLE:
 386          *----------------------------------------------------------------------------
 387          * NOTE:
 388          *----------------------------------------------------------------------------
 389          * REQUIREMENTS: 
 390          *****************************************************************************/
 391          void usb_mass_storage_get_lun (void)
 392          {
 393   1        Usb_clear_RXSETUP();
 394   1        Usb_set_DIR();
 395   1        Usb_write_byte(MS_MAX_LUN);
 396   1        Usb_set_TXRDY();
 397   1        while (!(Usb_tx_complete()));
 398   1        Usb_clear_TXCMPL();
 399   1        while (!(Usb_rx_complete()));
 400   1        Usb_clear_RXOUT();
 401   1        Usb_clear_DIR();
 402   1      #if (MS_MAX_LUN != 0)
                ms_multiple_drive = TRUE;                 /* multiple disk support */
                print_screen(MASS_SCREEN_NO_MEM);         /* memory icon off */
              #endif
 406   1      }
 407          
 408          
 409          /*F**************************************************************************
 410          * NAME: usb_it_suspend
 411          *----------------------------------------------------------------------------
 412          * PARAMS:
 413          *
 414          * return:
 415          *----------------------------------------------------------------------------
 416          * PURPOSE:
 417          *   USB suspend interrupt function -> reset
 418          *----------------------------------------------------------------------------
 419          * EXAMPLE:
 420          *----------------------------------------------------------------------------
 421          * NOTE:
 422          *   IRQ_USB defined in extsnd1.h
 423          *----------------------------------------------------------------------------
 424          * REQUIREMENTS:
 425          *****************************************************************************/
C51 COMPILER V7.00  USB_TASK                                                               04/28/2004 09:31:57 PAGE 8   

 426          Interrupt (usb_it_suspend(void), IRQ_USB) 
 427          {
 428   1        if (Usb_suspend())
 429   1        {
 430   2          Wdt_enable(0);
 431   2          while (1);
 432   2        }
 433   1      }
 434          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    473    ----
   CONSTANT SIZE    =     35    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =      5    ----
   BIT SIZE         =      6       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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