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

📄 32musb.lst

📁 这个是一个完整的MP3项目
💻 LST
📖 第 1 页 / 共 2 页
字号:
 224          void Get_Configuration()
 225          {
 226   1              printu("Get_Configuration");
 227   1      }
 228          
 229          void Set_Configuration(unsigned char wValue)
 230          {
 231   1      
 232   1              if (wValue == 0) 
 233   1              {
 234   2              /* put device in unconfigured state */
 235   2                       /* Disable all endpoints but EPP0. *///init_unconfig
 236   2      
 237   2                      UEPNUM = 0x00;//Ep0 as control Endpoint
 238   2                      UEPCONX = 0x80;
 239   2              
 240   2                      UEPNUM = 0x01;//Ep1 as Bulk-in Endpoint
 241   2                      UEPCONX = 0x86;
C51 COMPILER V7.20   32MUSB                                                                03/21/2007 13:33:19 PAGE 5   

 242   2              
 243   2                      UEPNUM = 0x02;//Ep2 as Bulk-out Endpoint
 244   2                      UEPCONX = 0x82;
 245   2      
 246   2      //              WriteEp(0, &Device_Descriptor[4], 2);
 247   2                      USBCON &= (~CONFG);
 248   2                      WriteEp(0, 0, 0);//状态传送阶段之前完成指定操作
 249   2      
 250   2              }
 251   1              else if (wValue == 1) {
 252   2              /* Configure device */
 253   2                      /* Enable generic/iso endpoints. init_config*/
 254   2      
 255   2                      UEPNUM = 0x00;//Ep0 as control Endpoint
 256   2                      UEPCONX = 0x80;
 257   2              
 258   2                      UEPNUM = 0x01;//Ep1 as Bulk-in Endpoint
 259   2                      UEPCONX = 0x86;
 260   2              
 261   2                      UEPNUM = 0x02;//Ep2 as Bulk-out Endpoint
 262   2                      UEPCONX = 0x82;
 263   2      
 264   2      
 265   2                      USBCON |= CONFG;
 266   2                      WriteEp(0, 0, 0);//状态传送阶段之前完成指定操作
 267   2      
 268   2              }
 269   1      //      printu("Set_Configuration ");
 270   1      }
 271          
 272          void Get_Interface()
 273          {
 274   1              printu("Get_Interface");
 275   1      }
 276          
 277          void Set_Interface()
 278          {
 279   1              WriteEp(0, 0, 0);
 280   1              printu("Set_Interface ");
 281   1      }
 282          
 283          void Ep0Int()
 284          {
 285   1              unsigned char i, j;
 286   1              unsigned char ControlData[32] = {0, };
 287   1      
 288   1              i = ReadEp(0, ControlData);//读端点0
 289   1              P3_5 = 0;//USB通信指示灯点亮
 290   1              j = ControlData[0] & 0x60;//过滤端点0数据
 291   1              if ((j == 0) && i)
 292   1              {//如果为标准USB请求
 293   2                      switch (ControlData[1])
 294   2                      {//分别按请求类别进行处理
 295   3                              case get_status                 :       Get_Status(); break;
 296   3                              case clear_feature              :       Clear_Feature(); break;
 297   3      
 298   3                              case set_feature                :       Set_Feature(); break;
 299   3      
 300   3                              case set_address                :       Set_Address(ControlData[2]); break;
 301   3                              case get_descriptor             :       Get_Descriptor(ControlData[3], ControlData[6]); break;
 302   3      
 303   3                              case get_configuration  :       Get_Configuration(); break;
C51 COMPILER V7.20   32MUSB                                                                03/21/2007 13:33:19 PAGE 6   

 304   3                              case set_configuration  :       Set_Configuration(ControlData[2]); break;
 305   3                              case get_interface              :       Get_Interface(); break;
 306   3                              case set_interface              :       Set_Interface(); break;
 307   3                              default                                 :       Reserved(); break;
 308   3                      }
 309   2              }
 310   1              else if (ControlData[0] == 0xa1)
 311   1              {//特殊请求,特殊处理,直接返回Status
 312   2                      WriteEp(0, 0, 0);
 313   2              }
 314   1              
 315   1              P3_5 = 1;//USB通信指示灯关闭
 316   1      
 317   1      }
 318          
 319          //Bulk-In端点处理
 320          void main_txdone()
 321          {
 322   1              unsigned char i;
 323   1      
 324   1      //      printuf("Bulk_State : %x\n", bulk_state);
 325   1              P3_5 = 0;////USB通信指示灯点亮
 326   1      
 327   1              UEPSTAX &= (~(TXCMP));//清中断标志位clear TXCMP
 328   1              switch (bulk_state)
 329   1              {//按不同的传输状态,进行不同的后续处理
 330   2                      case BULK_DATA_TRANS :
 331   2                              TransDataGoOn();
 332   2                              break;
 333   2                      case BULK_DATA_END :
 334   2                              UEPNUM = 1;//指向相应端点
 335   2                              UEPSTAX |= DIR;//设置方向为写Set for status of a Control In transaction
 336   2      
 337   2                              for (i=0; i<13; i++) 
 338   2                              {
 339   3                                      UEPDATX = bulk_CSW[i];//将数据写入端点
 340   3                              }
 341   2      
 342   2                              UEPSTAX |= TXRDY;//发送数据Sending the data,this action will switch between bank0 and bank1
 343   2              
 344   2                              bulk_state = BULK_CSW_END;                                      //置传输状态。
 345   2      
 346   2                              break;
 347   2                      case BULK_REQEST_TRANS :
 348   2                              TransRequestGoOn();
 349   2                              break;
 350   2                      case BULK_CSW_END :
 351   2                              break;
 352   2                      default :       return;
 353   2              }
 354   1      
 355   1              P3_5 = 1;//USB通信指示灯关闭
 356   1      }
 357          
 358          //Bulk-Out端点处理
 359          void main_rxdone()
 360          {
 361   1      
 362   1              unsigned char nLength;
 363   1      //      printu("\nmain_rxdone ");
 364   1      //      P3_5 = 0;//USB通信指示灯点亮
 365   1              //ReadEp(2, Bulk_Out_Buf);//读取端点2
C51 COMPILER V7.20   32MUSB                                                                03/21/2007 13:33:19 PAGE 7   

 366   1      //      ReadEp(2, BulkPoint);//读取端点2
 367   1      
 368   1      
 369   1              UEPNUM = 2;//指向相应端点
 370   1              BulkStartPoint = BulkPoint;
 371   1              nLength = UBYCTX;//读取端点数据长度
 372   1      
 373   1              while (nLength--)
 374   1              {
 375   2                      *(BulkPoint++) = UEPDATX;
 376   2              }
 377   1                                              
 378   1      //      UEPSTAX &= ~(RXOUTB0 | RXOUTB1 | RXSETUP);//清中断标志
 379   1              UEPSTAX &= 0xb9;//清中断标志
 380   1      
 381   1              //printuf("%x", *BulkStartPoint);
 382   1              if ((bulk_state != BULK_DATA_RECIEVE) && (*BulkStartPoint == 0x55)) 
 383   1              {
 384   2                      InterpretCBW();//判断是否为命令数据
 385   2                      BulkPoint = BulkStartPoint;
 386   2              }
 387   1              else if (BulkPoint == Page_Buf + 512)
 388   1              {
 389   2                      Trans_Data2PC();//为普通数据时转向数据接收处理程序
 390   2              }
 391   1      //      P3_5 = 1;//USB通信指示灯关闭
 392   1      
 393   1      }
 394          
 395          void Reserved()
 396          {
 397   1              printuf("Undefined Interrupt Occured : %x\n", UEPINT);
 398   1      }
 399          //END OF USB DISK
 400          
 401          void main()
 402          {
 403   1      
 404   1      //      int i, j;
 405   1              printu("UP-TECH MP3 USB Disk test!\n");
 406   1              P4_4 |= 1;//USBLED off
 407   1              P4_5 &= 0;      //P3_3=0 LCD Power off, P3_3=1 LCD Power on
 408   1      
 409   1              printu("Entering USB...\n");//输出进入U盘功能的信息
 410   1              AtmelUSBInit(4, 11, 0);//PLL时钟配置,
 411   1              EpEnable();//端点初始化
 412   1              UEPNUM = 0;//指向端点0
 413   1              BulkPoint = Page_Buf;
 414   1      
 415   1              while (1)
 416   1              {//轮询,检查相应端点是否有中断产生
 417   2                      //if(){BulkPoint=Page_Buf;i=0;}
 418   2                      if (UEPINT & EP1INT) 
 419   2                      {
 420   3                              main_txdone();//Bulk-Out端点处理
 421   3                      }
 422   2      
 423   2                      if (UEPINT & EP2INT) 
 424   2                      {
 425   3                              main_rxdone();//Bulk-In端点处理
 426   3                      }
 427   2      
C51 COMPILER V7.20   32MUSB                                                                03/21/2007 13:33:19 PAGE 8   

 428   2                      if (UEPINT & EP0INT) 
 429   2                      {
 430   3                              Ep0Int();//端点0处理
 431   3                      }
 432   2                                                              
 433   2                      UEPINT=0;//清中断状态寄存器
 434   2              }
 435   1      
 436   1      }               
 437          
 438          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    939    ----
   CONSTANT SIZE    =    245    ----
   XDATA SIZE       =     93      42
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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