打印

AT89C51SND制作MP3的问题

[复制链接]
2137|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duan281110040|  楼主 | 2010-8-3 22:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我使用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?

相关帖子

沙发
lhkjg| | 2010-8-15 13:22 | 只看该作者
会不会是注解没有修改的缘故?不懂,没有搞过,但是办理顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

1

粉丝