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

📄 usb_task.lst

📁 基于uCOS/II制作的MP3
💻 LST
📖 第 1 页 / 共 2 页
字号:
 203   1        {
 204   2          cbw_error = TRUE;
 205   2        }
 206   1        if (0x43 != Usb_read_byte())              /* check if dCBWSignature is correct */
 207   1        {
 208   2          cbw_error = TRUE;
 209   2        }
 210   1                  
 211   1        dCBWTag[0] = Usb_read_byte();             /* Store Tag to be repeated in CSW */
 212   1        dCBWTag[1] = Usb_read_byte();
 213   1        dCBWTag[2] = Usb_read_byte();
 214   1        dCBWTag[3] = Usb_read_byte();
 215   1        ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
 216   1        ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
 217   1        ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
 218   1        ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
 219   1        if (Usb_read_byte() != 0x00)              /* store bmCBWFlags.bit7 */
 220   1        {
 221   2          Usb_CBWFlag_in();       //(bmCBWFlag7 = 1)
 222   2          if (cbw_error)
 223   2          {
 224   3            Usb_clear_RXOUT_PP(); //{if(rx_bank){UEPSTAX&=~MSK_RXOUTB1;}else{UEPSTAX&=(~MSK_RXOUTB0);}rx_bank=~r
             -x_bank;}
 225   3            Usb_select_ep(EP_IN);
 226   3            Usb_set_STALLRQ();
 227   3            return;
 228   3          }
 229   2        }
 230   1        else
 231   1        {
 232   2          Usb_CBWFlag_out();       //(bmCBWFlag7 = 0)
 233   2          if (cbw_error)
 234   2          {
 235   3            Usb_clear_RXOUT_PP();
 236   3            Usb_set_STALLRQ();
 237   3            return;
 238   3          }
 239   2        }
C51 COMPILER V7.50   USB_TASK                                                              06/03/2006 10:32:53 PAGE 5   

 240   1          /* only 1 drive supported */
 241   1          ACC = Usb_read_byte();                  /* dummy LUN read */
 242   1          ACC = Usb_read_byte();                  /* dummy CBWCBLength read */
 243   1          Usb_clear_no_data_phase();
 244   1            /* on-board memory */
 245   1          Sbc_command_chip();
 246   1      
 247   1      
 248   1      
 249   1      }
 250          
 251          
 252          /*F**************************************************************************
 253          * NAME: usb_mass_storage_csw
 254          *----------------------------------------------------------------------------
 255          * PARAMS:
 256          *
 257          * return:
 258          *----------------------------------------------------------------------------
 259          * PURPOSE: 
 260          *   Command Status Wrapper management
 261          *----------------------------------------------------------------------------
 262          * EXAMPLE:
 263          *----------------------------------------------------------------------------
 264          * NOTE:
 265          *
 266          * REQUIREMENTS: 
 267          *****************************************************************************/
 268          void usb_mass_storage_csw (void)
 269          {
 270   1        Usb_select_ep(EP_IN);
 271   1        while (Usb_STALL_requested())
 272   1        {
 273   2          Usb_select_ep(EP_CONTROL);
 274   2          if (Usb_setup_received())
 275   2          {
 276   3            usb_enumeration_process();
 277   3          }
 278   2          Usb_select_ep(EP_IN);
 279   2        }
 280   1      
 281   1        Usb_select_ep(EP_OUT);
 282   1        while (Usb_STALL_requested())
 283   1        {
 284   2          Usb_select_ep(EP_CONTROL);
 285   2          if (Usb_setup_received())
 286   2          {
 287   3            usb_enumeration_process();
 288   3          }
 289   2          Usb_select_ep(EP_OUT);
 290   2        }
 291   1      
 292   1        Usb_clear_no_data_phase();
 293   1        Usb_clear_status_ready();
 294   1        Usb_select_ep(EP_IN);
 295   1        Usb_write_byte(0x55);
 296   1        Usb_write_byte(0x53);
 297   1        Usb_write_byte(0x42);
 298   1        Usb_write_byte(0x53);
 299   1      
 300   1        Usb_write_byte(dCBWTag[0]);
 301   1        Usb_write_byte(dCBWTag[1]);
C51 COMPILER V7.50   USB_TASK                                                              06/03/2006 10:32:53 PAGE 6   

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

 364   1        Usb_set_TXRDY();
 365   1        while (!(Usb_tx_complete()));
 366   1        Usb_clear_TXCMPL();
 367   1        while (!(Usb_rx_complete()));
 368   1        Usb_clear_RXOUT();
 369   1        Usb_clear_DIR();
 370   1      }
 371          
 372          
 373          /*F**************************************************************************
 374          * NAME: usb_it_suspend
 375          *----------------------------------------------------------------------------
 376          * PARAMS:
 377          *
 378          * return:
 379          *----------------------------------------------------------------------------
 380          * PURPOSE:
 381          *   USB suspend interrupt function -> reset
 382          *----------------------------------------------------------------------------
 383          * EXAMPLE:
 384          *----------------------------------------------------------------------------
 385          * NOTE:
 386          *   IRQ_USB defined in extsnd1.h
 387          *----------------------------------------------------------------------------
 388          * REQUIREMENTS:
 389          *****************************************************************************/
 390          Interrupt (usb_it_suspend(void), IRQ_USB) 
 391          {
 392   1        if (Usb_suspend())
 393   1        {
 394   2         // while (1);
 395   2        }
 396   1      }
 397          


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