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

📄 usb_task.lst

📁 atmel at89c51snd1c mp3芯片方案源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 189   1        dCBWTag[2] = Usb_read_byte();
 190   1        dCBWTag[3] = Usb_read_byte();
 191   1        ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
 192   1        ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
 193   1        ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
 194   1        ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
 195   1        if (Usb_read_byte() != 0x00)              /* store bmCBWFlags.bit7 */
 196   1        {
 197   2          Usb_CBWFlag_in();       //(bmCBWFlag7 = 1)
 198   2          if (cbw_error)
 199   2          {
 200   3            Usb_clear_RXOUT_PP(); //{if(rx_bank){UEPSTAX&=~MSK_RXOUTB1;}else{UEPSTAX&=(~MSK_RXOUTB0);}rx_bank=~r
             -x_bank;}
 201   3            Usb_select_ep(EP_IN);
 202   3            Usb_set_STALLRQ();
 203   3            return;
 204   3          }
 205   2        }
 206   1        else
 207   1        {
 208   2          Usb_CBWFlag_out();       //(bmCBWFlag7 = 0)
 209   2          if (cbw_error)
 210   2          {
 211   3            Usb_clear_RXOUT_PP();
 212   3            Usb_set_STALLRQ();
 213   3            return;
 214   3          }
 215   2        }
 216   1          /* only 1 drive supported */
 217   1          ACC = Usb_read_byte();                  /* dummy LUN read */
 218   1          ACC = Usb_read_byte();                  /* dummy CBWCBLength read */
 219   1          Usb_clear_no_data_phase();
 220   1            /* on-board memory */
 221   1          Sbc_command_chip();
 222   1      }
 223          
 224          
 225          /*F**************************************************************************
 226          * NAME: usb_mass_storage_csw
 227          *----------------------------------------------------------------------------
 228          * PARAMS:
 229          *
 230          * return:
 231          *----------------------------------------------------------------------------
 232          * PURPOSE: 
 233          *   Command Status Wrapper management
 234          *----------------------------------------------------------------------------
 235          * EXAMPLE:
 236          *----------------------------------------------------------------------------
 237          * NOTE:
 238          *
 239          * REQUIREMENTS: 
C51 COMPILER V7.50   USB_TASK                                                              02/16/2009 09:59:55 PAGE 5   

 240          *****************************************************************************/
 241          void usb_mass_storage_csw (void)
 242          {
 243   1        Usb_select_ep(EP_IN);
 244   1        while (Usb_STALL_requested())
 245   1        {
 246   2          Usb_select_ep(EP_CONTROL);
 247   2          if (Usb_setup_received())
 248   2          {
 249   3            usb_enumeration_process();
 250   3          }
 251   2          Usb_select_ep(EP_IN);
 252   2        }
 253   1      
 254   1        Usb_select_ep(EP_OUT);
 255   1        while (Usb_STALL_requested())
 256   1        {
 257   2          Usb_select_ep(EP_CONTROL);
 258   2          if (Usb_setup_received())
 259   2          {
 260   3            usb_enumeration_process();
 261   3          }
 262   2          Usb_select_ep(EP_OUT);
 263   2        }
 264   1      
 265   1        Usb_clear_no_data_phase();
 266   1        Usb_clear_status_ready();
 267   1        Usb_select_ep(EP_IN);
 268   1        Usb_write_byte(0x55);
 269   1        Usb_write_byte(0x53);
 270   1        Usb_write_byte(0x42);
 271   1        Usb_write_byte(0x53);
 272   1      
 273   1        Usb_write_byte(dCBWTag[0]);
 274   1        Usb_write_byte(dCBWTag[1]);
 275   1        Usb_write_byte(dCBWTag[2]);
 276   1        Usb_write_byte(dCBWTag[3]);
 277   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[3]);
 278   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[2]);
 279   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[1]);
 280   1        Usb_write_byte(((Byte*)&dCBWDataTransferLength)[0]);
 281   1        Usb_write_byte(status);
 282   1        Usb_set_TXRDY();
 283   1      
 284   1        Usb_select_ep(EP_IN);
 285   1        while (!Usb_tx_complete());
 286   1        Usb_clear_TXCMPL();
 287   1      
 288   1      }
 289          
 290          
 291          /*F**************************************************************************
 292          * NAME: usb_mass_storage_reset
 293          *----------------------------------------------------------------------------
 294          * PARAMS:
 295          *
 296          * return:
 297          *----------------------------------------------------------------------------
 298          * PURPOSE: 
 299          *   This function handles the mass storage reset command
 300          *----------------------------------------------------------------------------
 301          * EXAMPLE:
C51 COMPILER V7.50   USB_TASK                                                              02/16/2009 09:59:55 PAGE 6   

 302          *----------------------------------------------------------------------------
 303          * NOTE:
 304          *----------------------------------------------------------------------------
 305          * REQUIREMENTS: 
 306          *****************************************************************************/
 307          void usb_mass_storage_reset (void)
 308          {
 309   1        Usb_clear_RXSETUP();
 310   1        Usb_set_TXRDY();
 311   1        while (!(Usb_tx_complete()));
 312   1        Usb_clear_TXCMPL();
 313   1      }
 314          
 315          
 316          /*F**************************************************************************
 317          * NAME: usb_mass_storage_get_lun
 318          *----------------------------------------------------------------------------
 319          * PARAMS:
 320          *
 321          * return:
 322          *----------------------------------------------------------------------------
 323          * PURPOSE: 
 324          *   This function returns the mass storage class specific Logical Unit Number.
 325          *----------------------------------------------------------------------------
 326          * EXAMPLE:
 327          *----------------------------------------------------------------------------
 328          * NOTE:
 329          *----------------------------------------------------------------------------
 330          * REQUIREMENTS: 
 331          *****************************************************************************/
 332          void usb_mass_storage_get_lun (void)
 333          {
 334   1        Usb_clear_RXSETUP();
 335   1        Usb_set_DIR();
 336   1        Usb_write_byte(MS_MAX_LUN);
 337   1        Usb_set_TXRDY();
 338   1        while (!(Usb_tx_complete()));
 339   1        Usb_clear_TXCMPL();
 340   1        while (!(Usb_rx_complete()));
 341   1        Usb_clear_RXOUT();
 342   1        Usb_clear_DIR();
 343   1      }
 344          
 345          
 346          /*F**************************************************************************
 347          * NAME: usb_it_suspend
 348          *----------------------------------------------------------------------------
 349          * PARAMS:
 350          *
 351          * return:
 352          *----------------------------------------------------------------------------
 353          * PURPOSE:
 354          *   USB suspend interrupt function -> reset
 355          *----------------------------------------------------------------------------
 356          * EXAMPLE:
 357          *----------------------------------------------------------------------------
 358          * NOTE:
 359          *   IRQ_USB defined in extsnd1.h
 360          *----------------------------------------------------------------------------
 361          * REQUIREMENTS:
 362          *****************************************************************************/
 363          Interrupt (usb_it_suspend(void), IRQ_USB) 
C51 COMPILER V7.50   USB_TASK                                                              02/16/2009 09:59:55 PAGE 7   

 364          {
 365   1        if (Usb_suspend())
 366   1        {
 367   2         // while (1);
 368   2        }
 369   1      }
 370          


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 + -