赞助论坛
  • 5178阅读
  • 0回复

制作MP3的问题 [复制链接]

楼层直达
发帖
6
精华
0
金币
50
威望
4
贡献
1
好评
0
注册
2008-06-11
楼主    duan1234 发表于: 2010-07-22 20:14:48 
大家好,我使用AT89C51SND单片机做一个MP3,可是资料里有些不懂,具体如下:
MP3时钟频率设置
static void MP3FsInit(unsigned char NDIV, unsigned int RDIV, unsigned char MPCD, unsigned char AUCD)
{    
   PLLNDIV = 0;
   PLLRDIV = 0;
   MP3CLK = 0;
   AUDCLK = 0;

   PLLNDIV     = 0x7f & NDIV;      
   PLLCON    |= (0x3 & RDIV) << 6;  
   PLLRDIV     = (0x3ff & RDIV) >> 2;
   MP3CLK |= MPCD;          
   AUDCLK |= AUCD;            

}

调用MP3FsInit函数:
switch ((MP3_Framehead[2] & 0x0C) >> 2)
          {
               case 0x00:MP3FsInit (24, 126, 3, 5); break;           //Fs=44.1kHz
               case 0x01 : MP3FsInit(124, 575, 3, 4); break;           //Fs=48kHz
               case 0x02 : MP3FsInit(124, 511, 3, 9); AUDCON0 = 0x76; break;//Fs=32kHz
               default : break;
          }        
其中MP3FsInit (24, 126, 3, 5),Fs=44.1kHz ,但是据MP3FsInit 函数得N=24,R=222,MPCD=3,AUCD=5再根据公式:PLLclk=OSCclk*(R+1)/(N+1), 而OSCclk为20M(采用的是20M外部晶振),得到PLLclk=178.4M. 根据MP3clk=PLLclk/(MPCD+1) 公式得MP3的CLK=44.6M;根据AUDclk=PLLclk/(AUCD+1) ,AUDclk=29.73M。
Fs是怎么算出来等于44.4Khz?