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

📄 song_drv.lst

📁 这是atmel公司的89C51SND1C的mp3源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 224          
 225          /*F**************************************************************************
 226          * NAME: song_get_level
 227          *----------------------------------------------------------------------------
 228          * PARAMS:
 229          *
 230          * return:
 231          *   level of sound selected
 232          *----------------------------------------------------------------------------
 233          * PURPOSE:
 234          *   Returns selected sound level
 235          *----------------------------------------------------------------------------
 236          * EXAMPLE:
 237          *----------------------------------------------------------------------------
 238          * NOTE:
 239          *----------------------------------------------------------------------------
 240          * REQUIREMENTS:
C51 COMPILER V6.20c  SONG_DRV                                                              07/10/2002 15:17:36 PAGE 5   

 241          *****************************************************************************/
 242          Byte song_get_level (void)
 243          {
 244   1        switch (song_sound)
 245   1        {
 246   2          case SND_VOLUME:
 247   2          {
 248   3            return (MP3VOL);
 249   3          }
 250   2      
 251   2          case SND_BASS:
 252   2          {
 253   3            return (MP3BAS);
 254   3          }
 255   2      
 256   2          case SND_MEDIUM:
 257   2          {
 258   3            return (MP3MED);
 259   3            break;
 260   3          }
 261   2      
 262   2          case SND_TREBLE:
 263   2          {
 264   3            return (MP3TRE);
 265   3          }
 266   2        }
 267   1      }
 268          
 269          
 270          /*F**************************************************************************
 271          * NAME: song_init
 272          *----------------------------------------------------------------------------
 273          * PARAMS:
 274          *
 275          * return:
 276          *   header status:  SONG_NO_ERR:    header ok
 277          *                   SONG_LAYER_ERR: not a layer 3 file
 278          *                   SONG_BR_ERR:    bit rate not supported
 279          *                   SONG_FS_ERR:    bad frequency sampling
 280          *                   SONG_SYNC_ERR:  no header found
 281          *----------------------------------------------------------------------------
 282          * PURPOSE: 
 283          *   Initialize song playing depending on the frame
 284          *----------------------------------------------------------------------------
 285          * EXAMPLE:
 286          *----------------------------------------------------------------------------
 287          * NOTE:
 288          *----------------------------------------------------------------------------
 289          * REQUIREMENTS:
 290          *****************************************************************************/
 291          Byte song_init (void)
 292          {
 293   1      Byte    b, c;
 294   1      
 295   1        while (!Feof())
 296   1        {
 297   2          if (Fgetc() == MP3_SYNC_H)
 298   2          { /* high order sync found */
 299   3            b = Fgetc();
 300   3            if ((b & MP3_MSK_SYNC) == MP3_SYNC_L)
 301   3            { /* low order sync found */
 302   4              if ((b & MP3_MSK_LAYER) != MP3_LAYER_III)
C51 COMPILER V6.20c  SONG_DRV                                                              07/10/2002 15:17:36 PAGE 6   

 303   4              {
 304   5                return SONG_LAYER_ERR;            /* bad layer */
 305   5              }
 306   4      
 307   4              c = Fgetc();
 308   4              b = (b & MP3_MSK_VER) >> 1;         /* keep MPEG Version B3 -> B2 */
 309   4              b |= (c & MP3_MSK_FS) >> 2;         /* read FS B3:2 -> B1:0 */
 310   4              c &= MP3_MSK_BR;
 311   4      
 312   4              switch (b)
 313   4              {
 314   5                case MP3_FS_44:
 315   5                {
 316   6                  if ((c == MP3_BR_FREE) || (c > MP3_BR_256))
 317   6                  {
 318   7                    return SONG_BR_ERR;           /* bad bit-rate */
 319   7                  }
 320   6                  break;
 321   6                }
 322   5                case MP3_FS_48:
 323   5                {
 324   6                  if ((c == MP3_BR_FREE) || (c > MP3_BR_320))
 325   6                  {
 326   7                    return SONG_BR_ERR;           /* bad bit-rate */
 327   7                  }
 328   6                  break;
 329   6                }
 330   5                case MP3_FS_32:
 331   5                {
 332   6                  if ((c == MP3_BR_FREE) || (c > MP3_BR_224))
 333   6                  {
 334   7                    return SONG_BR_ERR;           /* bad bit-rate */
 335   7                  }
 336   6                  break;
 337   6                }
 338   5                case MP3_FS_22:
 339   5                case MP3_FS_24:
 340   5                case MP3_FS_16:
 341   5                {
 342   6                  if (c == MP3_BR_FREE)
 343   6                  {
 344   7                    return SONG_BR_ERR;           /* bad bit-rate */
 345   7                  }
 346   6                  break;
 347   6                }
 348   5                default:
 349   5                {
 350   6                  return SONG_FS_ERR;             /* bad sampling frequency */
 351   6                }
 352   5              }
 353   4              song_audio_init();                  /* init audio interface */
 354   4              clock_song_init(b);                 /* program the song clocks */
 355   4              Dac_emphasis(Fgetc() & MP3_MSK_EMP);/* config DAC emphasis */
 356   4              return SONG_NO_ERR;
 357   4            }
 358   3          }
 359   2        }
 360   1        return SONG_SYNC_ERR;                     /* bad MP3 file */
 361   1      }
 362          
 363          
 364          /*F**************************************************************************
C51 COMPILER V6.20c  SONG_DRV                                                              07/10/2002 15:17:36 PAGE 7   

 365          * NAME: song_audio_init
 366          *----------------------------------------------------------------------------
 367          * PARAMS:
 368          *
 369          * return:
 370          *----------------------------------------------------------------------------
 371          * PURPOSE: 
 372          *   Audio interface initialization in song mode
 373          *----------------------------------------------------------------------------
 374          * EXAMPLE:
 375          *----------------------------------------------------------------------------
 376          * NOTE:
 377          *   DAC_NB_BIT defined in config.h
 378          *----------------------------------------------------------------------------
 379          * REQUIREMENTS:
 380          *****************************************************************************/
 381          void song_audio_init (void)
 382          {
 383   1        Aud_set_pcm_32(DAC_NB_BIT);
 384   1        Aud_set_song();
 385   1        Aud_enable();
 386   1        Aud_disable_int();                      /* disable audio interrupt */
 387   1        Dac_unmute();
 388   1      }
 389          
 390          
 391          /*F**************************************************************************
 392          * NAME: song_start
 393          *----------------------------------------------------------------------------
 394          * PARAMS:
 395          *
 396          * return:
 397          *----------------------------------------------------------------------------
 398          * PURPOSE: 
 399          *   Start song playing
 400          *----------------------------------------------------------------------------
 401          * EXAMPLE:
 402          *----------------------------------------------------------------------------
 403          * NOTE:
 404          *----------------------------------------------------------------------------
 405          * REQUIREMENTS:
 406          *****************************************************************************/
 407          void song_start (void)
 408          {
 409   1        Aud_song_play();                            /* start sample request */
 410   1        mp3_init();                                 /* enable mp3 decoder */
 411   1      }
 412          
 413          
 414          /*F**************************************************************************
 415          * NAME: song_stop
 416          *----------------------------------------------------------------------------
 417          * PARAMS:
 418          *
 419          * return:
 420          *----------------------------------------------------------------------------
 421          * PURPOSE: 
 422          *   Stop song playing
 423          *----------------------------------------------------------------------------
 424          * EXAMPLE:
 425          *----------------------------------------------------------------------------
 426          * NOTE:
C51 COMPILER V6.20c  SONG_DRV                                                              07/10/2002 15:17:36 PAGE 8   

 427          *----------------------------------------------------------------------------
 428          * REQUIREMENTS:
 429          *****************************************************************************/
 430          void song_stop (void)
 431          {
 432   1        Dac_mute();                               /* silence */
 433   1        aud_stop();                               /* disable audio */
 434   1        mp3_stop();                               /* disable mp3 macrocell */
 435   1        clock_disable();                          /* disable clocks */
 436   1      }
 437          
 438          
 439          


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