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

📄 usb_task.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 195   2        }
 196   1                  
 197   1        dCBWTag[0] = Usb_read_byte();             /* Store Tag to be repeated in CSW */
 198   1        dCBWTag[1] = Usb_read_byte();
 199   1        dCBWTag[2] = Usb_read_byte();
 200   1        dCBWTag[3] = Usb_read_byte();
 201   1        ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
 202   1        ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
 203   1        ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
 204   1        ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
 205   1        if (Usb_read_byte() != 0x00)              /* store bmCBWFlags.bit7 */
 206   1        {
 207   2          Usb_CBWFlag_in();
 208   2          if (cbw_error)
 209   2          {
 210   3            Usb_select_ep(EP_IN);
 211   3            Usb_clear_RXOUT();
 212   3            Usb_set_STALLRQ();
 213   3            return;
 214   3          }
 215   2        }
 216   1        else
 217   1        {
 218   2          Usb_CBWFlag_out();
 219   2          if (cbw_error)
 220   2          {
 221   3            Usb_clear_RXOUT();
 222   3            Usb_set_STALLRQ();
 223   3            return;
 224   3          }
 225   2        }
 226   1      
 227   1        if (ms_multiple_drive)
 228   1        { /* multiple drive supported */
 229   2          if (Usb_read_byte() == 0)
 230   2          {
 231   3            ACC = Usb_read_byte();                /* dummy CBWCBLength read */
 232   3            Usb_clear_no_data_phase();
 233   3            sbc_command_df();
 234   3          }
 235   2          else
 236   2          {
 237   3            ACC = Usb_read_byte();                /* dummy CBWCBLength read */
 238   3            Usb_clear_no_data_phase();
 239   3            sbc_command_mmc();
 240   3          }
C51 COMPILER V6.20c  USB_TASK                                                              07/10/2002 15:17:42 PAGE 5   

 241   2        }
 242   1        else
 243   1        { /* only 1 drive supported */
 244   2          ACC = Usb_read_byte();                  /* dummy LUN read */
 245   2          ACC = Usb_read_byte();                  /* dummy CBWCBLength read */
 246   2          Usb_clear_no_data_phase();
 247   2      
 248   2          if (gl_memory == MEM_DF)
 249   2          {
 250   3            sbc_command_df();
 251   3          }
 252   2          else
 253   2          {
 254   3            sbc_command_mmc();
 255   3          }
 256   2        }
 257   1      }
 258          
 259          
 260          /*F**************************************************************************
 261          * NAME: usb_mass_storage_csw
 262          *----------------------------------------------------------------------------
 263          * PARAMS:
 264          *
 265          * return:
 266          *----------------------------------------------------------------------------
 267          * PURPOSE: 
 268          *   Command Status Wrapper management
 269          *----------------------------------------------------------------------------
 270          * EXAMPLE:
 271          *----------------------------------------------------------------------------
 272          * NOTE:
 273          *
 274          * REQUIREMENTS: 
 275          *****************************************************************************/
 276          void usb_mass_storage_csw (void)
 277          {
 278   1        Usb_select_ep(EP_IN);
 279   1        while (Usb_STALL_requested())
 280   1        {
 281   2          Usb_select_ep(EP_CONTROL);
 282   2          if (Usb_setup_received())
 283   2          {
 284   3            usb_enumeration_process();
 285   3          }
 286   2          Usb_select_ep(EP_IN);
 287   2        }
 288   1      
 289   1        Usb_select_ep(EP_OUT);
 290   1        while (Usb_STALL_requested())
 291   1        {
 292   2          Usb_select_ep(EP_CONTROL);
 293   2          if (Usb_setup_received())
 294   2          {
 295   3            usb_enumeration_process();
 296   3          }
 297   2          Usb_select_ep(EP_OUT);
 298   2        }
 299   1      
 300   1        Usb_clear_no_data_phase();
 301   1        Usb_clear_status_ready();
 302   1        Usb_select_ep(EP_IN);
C51 COMPILER V6.20c  USB_TASK                                                              07/10/2002 15:17:42 PAGE 6   

 303   1        Usb_write_byte(0x55);
 304   1        Usb_write_byte(0x53);
 305   1        Usb_write_byte(0x42);
 306   1        Usb_write_byte(0x53);
 307   1      
 308   1        Usb_write_byte(dCBWTag[0]);
 309   1        Usb_write_byte(dCBWTag[1]);
 310   1        Usb_write_byte(dCBWTag[2]);
 311   1        Usb_write_byte(dCBWTag[3]);
 312   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[3]);
 313   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[2]);
 314   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[1]);
 315   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[0]);
 316   1        Usb_write_byte(status);
 317   1        Usb_set_TXRDY();
 318   1      
 319   1        Usb_select_ep(EP_IN);
 320   1        while (!Usb_tx_complete());
 321   1        Usb_clear_TXCMPL();
 322   1      }
 323          
 324          
 325          /*F**************************************************************************
 326          * NAME: usb_mass_storage_reset
 327          *----------------------------------------------------------------------------
 328          * PARAMS:
 329          *
 330          * return:
 331          *----------------------------------------------------------------------------
 332          * PURPOSE: 
 333          *   This function handles the mass storage reset command
 334          *----------------------------------------------------------------------------
 335          * EXAMPLE:
 336          *----------------------------------------------------------------------------
 337          * NOTE:
 338          *----------------------------------------------------------------------------
 339          * REQUIREMENTS: 
 340          *****************************************************************************/
 341          void usb_mass_storage_reset (void)
 342          {
 343   1        Usb_clear_RXSETUP();
 344   1        Usb_set_TXRDY();
 345   1        while (!(Usb_tx_complete()));
 346   1        Usb_clear_TXCMPL();
 347   1      }
 348          
 349          
 350          /*F**************************************************************************
 351          * NAME: usb_mass_storage_get_lun
 352          *----------------------------------------------------------------------------
 353          * PARAMS:
 354          *
 355          * return:
 356          *----------------------------------------------------------------------------
 357          * PURPOSE: 
 358          *   This function returns the mass storage class specific Logical Unit Number.
 359          *----------------------------------------------------------------------------
 360          * EXAMPLE:
 361          *----------------------------------------------------------------------------
 362          * NOTE:
 363          *----------------------------------------------------------------------------
 364          * REQUIREMENTS: 
C51 COMPILER V6.20c  USB_TASK                                                              07/10/2002 15:17:42 PAGE 7   

 365          *****************************************************************************/
 366          void usb_mass_storage_get_lun (void)
 367          {
 368   1        Usb_clear_RXSETUP();
 369   1        Usb_set_DIR();
 370   1        Usb_write_byte(MS_MAX_LUN);
 371   1        Usb_set_TXRDY();
 372   1        while (!(Usb_tx_complete()));
 373   1        Usb_clear_TXCMPL();
 374   1        while (!(Usb_rx_complete()));
 375   1        Usb_clear_RXOUT();
 376   1        Usb_clear_DIR();
 377   1      #if (MS_MAX_LUN != 0)
 378   1        ms_multiple_drive = TRUE;                 /* multiple disk support */
 379   1        print_screen(MASS_SCREEN_NO_MEM);         /* memory icon off */
 380   1      #endif
 381   1      }
 382          
 383          


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


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

⌨️ 快捷键说明

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