|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好,我使用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? |
|