大家好,我使用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? |