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

📄 mp3.lst

📁 这个是一个完整的MP3项目
💻 LST
📖 第 1 页 / 共 4 页
字号:
 201   1      }
 202          
 203          void Get_Status()
 204          {
 205   1              printu("Get_Status ");
 206   1      }
 207          
 208          void Clear_Feature()
 209          {
 210   1              printu("Clear_Feature ");
 211   1      }
 212          
 213          void Set_Feature()
 214          {
 215   1              printu("Set_Feature ");
 216   1      }
 217          
 218          void Set_Address(unsigned char EpNum)
 219          {
 220   1      //      unsigned char Test[]={0};
 221   1              WriteEp(0, 0, 0);//在Status阶段过后才能改变设备地址
 222   1      
 223   1              USBADDR |= EpNum;//设置地址
 224   1              USBADDR |= FEN;//地址使能
 225   1              USBCON |= FADDEN;
 226   1      
 227   1      //      printuf("\nSet_Address:%x\n",USBADDR);
 228   1      }
 229          void Get_Descriptor(unsigned char DesType, unsigned char nLength)
 230          {
 231   1              if (DesType == 0x01) 
 232   1              {
 233   2                      WriteEp(0, 18, Device_Descriptor);//提供设备描述符
 234   2              }
 235   1      
 236   1              if ((DesType == 0x02) && (nLength == 0x09)) 
 237   1              {
 238   2                      WriteEp(0, 9, Configuration_Descriptor_All);//提供配置描述符
 239   2              }
 240   1              //提供全部描述符
 241   1      
C51 COMPILER V7.50   MP3                                                                   03/16/2006 09:11:14 PAGE 5   

 242   1              if ((DesType == 0x02) && (nLength == 0xff))
 243   1              {
 244   2                      WriteEp(0, 32, Configuration_Descriptor_All);
 245   2                      WriteEp(0, 2, &Device_Descriptor[4]);
 246   2              }
 247   1              //提供全部描述符
 248   1      
 249   1              if ((DesType == 0x02) && (nLength == 0x20)) 
 250   1              {
 251   2                      WriteEp(0, 32, Configuration_Descriptor_All);
 252   2              }
 253   1      
 254   1      //              printu("Get_Descriptor\n");
 255   1      }
 256          
 257          void Get_Configuration()
 258          {
 259   1              printu("Get_Configuration");
 260   1      }
 261          
 262          void Set_Configuration(unsigned char wValue)
 263          {
 264   1      
 265   1              if (wValue == 0) 
 266   1              {
 267   2              /* put device in unconfigured state */
 268   2                       /* Disable all endpoints but EPP0. *///init_unconfig
 269   2      
 270   2                      UEPNUM = 0x00;//Ep0 as control Endpoint
 271   2                      UEPCONX = 0x80;
 272   2              
 273   2                      UEPNUM = 0x01;//Ep1 as Bulk-in Endpoint
 274   2                      UEPCONX = 0x86;
 275   2              
 276   2                      UEPNUM = 0x02;//Ep2 as Bulk-out Endpoint
 277   2                      UEPCONX = 0x82;
 278   2      
 279   2      //              WriteEp(0,&Device_Descriptor[4],2);
 280   2                      USBCON &= (~CONFG);
 281   2                      WriteEp(0, 0, 0);//状态传送阶段之前完成指定操作
 282   2      
 283   2              }
 284   1              else if (wValue == 1) 
 285   1              {
 286   2              /* Configure device */
 287   2                      /* Enable generic/iso endpoints. init_config*/
 288   2      
 289   2                      UEPNUM = 0x00;//Ep0 as control Endpoint
 290   2                      UEPCONX = 0x80;
 291   2              
 292   2                      UEPNUM = 0x01;//Ep1 as Bulk-in Endpoint
 293   2                      UEPCONX = 0x86;
 294   2              
 295   2                      UEPNUM = 0x02;//Ep2 as Bulk-out Endpoint
 296   2                      UEPCONX = 0x82;
 297   2      
 298   2      
 299   2                      USBCON |= CONFG;
 300   2                      WriteEp(0, 0, 0);//状态传送阶段之前完成指定操作
 301   2      
 302   2              }
 303   1      //      printu("Set_Configuration ");
C51 COMPILER V7.50   MP3                                                                   03/16/2006 09:11:14 PAGE 6   

 304   1      }
 305          
 306          void Get_Interface()
 307          {
 308   1              printu("Get_Interface");
 309   1      }
 310          
 311          void Set_Interface()
 312          {
 313   1              WriteEp(0, 0, 0);
 314   1              printu("Set_Interface");
 315   1      }
 316          
 317          void Ep0Int()
 318          {
 319   1              unsigned char i, j;
 320   1              unsigned char ControlData[32] = {0, };
 321   1              i = ReadEp(0, ControlData);//读端点0
 322   1              P3_5 = 0;//USB通信指示灯点亮
 323   1              j = ControlData[0] & 0x60;//过滤端点0数据
 324   1      
 325   1              if ((j == 0) && i)
 326   1              {//如果为标准USB请求
 327   2                      switch (ControlData[1])
 328   2                      {//分别按请求类别进行处理
 329   3                              case get_status                 :       Get_Status(); break;
 330   3                              case clear_feature              :       Clear_Feature(); break;
 331   3      
 332   3                              case set_feature                :       Set_Feature(); break;
 333   3      
 334   3                              case set_address                :       Set_Address(ControlData[2]); break;
 335   3                              case get_descriptor             :       Get_Descriptor(ControlData[3], ControlData[6]); break;
 336   3      
 337   3                              case get_configuration  :       Get_Configuration(); break;
 338   3                              case set_configuration  :       Set_Configuration(ControlData[2]); break;
 339   3                              case get_interface              :       Get_Interface(); break;
 340   3                              case set_interface              :       Set_Interface(); break;
 341   3                              default                                 :       Reserved(); break;
 342   3                      }
 343   2              }
 344   1              else if (ControlData[0] == 0xa1) 
 345   1              {//特殊请求,特殊处理,直接返回Status
 346   2                              WriteEp(0, 0, 0);
 347   2              }
 348   1              
 349   1              P3_5 = 1;//USB通信指示灯关闭
 350   1      
 351   1      }
 352          
 353          //Bulk-In端点处理
 354          void main_txdone()
 355          {
 356   1      //      printuf("Bulk_State:%x\n",bulk_state);
 357   1              P3_5 = 0;////USB通信指示灯点亮
 358   1      
 359   1              UEPSTAX &= (~(TXCMP));//清中断标志位clear TXCMP
 360   1              switch (bulk_state)
 361   1              {//按不同的传输状态,进行不同的后续处理
 362   2                      case BULK_DATA_TRANS :
 363   2                              TransDataGoOn();
 364   2                              break;
 365   2                      case BULK_DATA_END :
C51 COMPILER V7.50   MP3                                                                   03/16/2006 09:11:14 PAGE 7   

 366   2                              TransmitCSW();
 367   2                              break;
 368   2                      case BULK_REQEST_TRANS :
 369   2                              TransRequestGoOn();
 370   2                              break;
 371   2                      case BULK_CSW_END :
 372   2                              break;
 373   2                      default:        return;
 374   2              }
 375   1              P3_5 = 1;//USB通信指示灯关闭
 376   1      }
 377          
 378          //Bulk-Out端点处理
 379          void main_rxdone()
 380          {
 381   1      //      printu("\nmain_rxdone  ");
 382   1              P3_5 = 0;//USB通信指示灯点亮
 383   1              ReadEp(2, Bulk_Out_Buf);//读取端点2
 384   1      
 385   1              if ((bulk_state != BULK_DATA_RECIEVE) && (Bulk_Out_Buf[0] == 0x55)) 
 386   1                      InterpretCBW();//判断是否为命令数据
 387   1              else
 388   1                      Trans_Data2PC();        //为普通数据时转向数据接收处理程序
 389   1      
 390   1              P3_5 = 1;//USB通信指示灯关闭
 391   1      
 392   1      }
 393          
 394          void Reserved()
 395          {
 396   1              printuf("Undefined Interrupt Occured : %x\n", UEPINT);
 397   1      }
 398          //END OF USB DISK
 399          //---------Edit by kent-------------------------------------------------------------
 400          void MP3FsInit(unsigned char NDIV, unsigned int RDIV, unsigned char MPCD, unsigned char AUCD)
 401          {       //!!!!!!!!!!!!!!!先清零!!!!!!!!!这个问题在调试的时候碰到了很多麻烦!!!!!!!!!!!!!!!!!!
 402   1              //例如先置5后置11时发现变成了0f,因为0101|1011=1111=F,因此总是不能改歌
 403   1              PLLNDIV = 0;
 404   1              PLLRDIV = 0;
 405   1              MP3CLK = 0;
 406   1              AUDCLK = 0;
 407   1      //PLL时钟的频率计算方法
 408   1              //      PLLclk=(OSCclk*(RDIV+1))/(int)(NDIV+1);
 409   1              //set PLL CLK

⌨️ 快捷键说明

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