1、基于单片机的 MP3 播放器设计 1音频信号数字化后所面临的一个不容忽视的问题是:巨大的数据量给存储和传输带来的压力。因此音频压缩技术在广播专业领域、网络传输及多媒体使用中受到广泛关注,成为音频信号处理的关键技术之一。MPEG(Moving Picture Experts Group) 运动图像专家组,在 1992 年底制定了第一个世界范围的 Hi-Fi(High-Fidelity)质量的音频编码标准 MPEG-1。MPEG-1 分为三种不同的方式,称为 Layer1、Layer2 和 Layer3。序号越高,复杂性越大,但是可提供更好的编码效率,特别是在低比特率时。MP3 就是 MPEG-1
2、 Layer3,是基于感知编码的算法,目前在 CD 音质的声音压缩方面,是一种通用的方法。使用 MP3标准对于音频数据编码既可以获得较大的音频数据压缩比,又可以得到较好的音乐回放质量。MP3 的解码器结构复杂,涉及到大量的数学计算,对处理器和内存的要求相当高。目前,AT89C51 处理器以其高性价比,丰富的外设资源,越来越受到各种嵌入式研发人员的青睐 5-7。基于以上背景,我在此次设计中提出了 AT89C51SND1C 微处理器的软件解码方案,在降低硬件成本的基础上保证高质量的播放效果。1.2.2 课题研究的意义MP3 音频播放器的最合理工作速度为 30Mips,而一个典型的视频媒体播放器的理
3、想速度则为 175Mips,所以提高 MP3 的工作速度,以及改善 MP3 的音质是最关键的,也是亟待解决的问题。MP3 是一种典型的嵌入式设备,而现在市场上比较常见的是闪存式 MP3。由于闪存式 MP3 的容量限制,使它存储歌曲数目较少,在功能上也很难实现多样化。而硬盘式MP3 的多功能及大容量,也必将受到不少消费者的喜爱。另外一个原因是近年来,嵌入式系统和单片机开发的有机结合,已广泛被使用于网络通信、工业控制、机顶盒、PDA 等诸多领域 8。本文提出了一种基于单片机的 MP3 播放器的设计方案,这就进一步的体现了该设计的灵活性。目前该设计方案已经实现,实践证明,此播放器拥有市面 MP3 所
4、有的全部功能并能够很好的运行。MP3 播放器一般分成 3 个部分:CPU、MP3 硬件解码器存储器。其中可以将前两部分集成在一起,即带 MP3 硬件解码器的 CPU;或将后两部分集成在一起,即集成硬件解码、DA 转换及音频输入。存储器可以是 Flash 存储器或硬盘。通过用 MP3 编码技术,可以得到大约 12:1 压缩的有损音乐信号。尽管 MP3 音乐是有损的,它在压缩过程中对功率谱较弱的信号有所丢失,但它同 CD 原声区别不大,不影响一般音乐爱好者对音乐的欣赏。MP3 大大缩小了声音文件的长度,使音乐的存储和传输更方便。2 MP3 的编解码过程2.1 MP3 的工作原理一个完整 MP3 播
5、放器要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频 D/A 和功放、显示界面和控制键、其中中央处理器和解码器是整个系统地核心。这里的中央处理器我们通常成为 MCU(单片微处理器) ,简称单片机。它运行 MP3 的整个控制程序,也称为 fireware(或者固件程序) 。控制 MP3 的各个部件的工作:从存储设备读取数据送到解码器解码;和主机连接时完成和主机的数据交换;接收控制按键的操作;显示系统运行状态等任务。解码器是芯片中的一个硬件模块,或者说是硬件解码(有的 MP3 播放机是软件解码,由高速中央处理器完成) 。它可以直接完成各种格式MP3 数据流的解码操作,并输出 PCM
6、或 I2S 格式的数字音频信号 10。本课题来源于生产实践存储设备是 MP3 播放机的重要部分,通常的 MP3 随身听都是采用半导体存储器(FLASH MEMORY)或者硬盘(HDD)作为储存设备的 11。它通过接收储存主机通讯端口传来的数据(通常以文件形式) ,回放的时候 MCU 读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC 管理磁盘数据是以文件形式,MP3 亦不例外,最常用的办法就是直接利用 PC 的文件系统来管理存储器,微软操作系统采用的是 FAT 文件系统,这也是最广泛使用的一种 12。播放机其中一个任务就是要实现 FAT 文件系统,即可以从 FAT 文件
7、系统支持的磁盘中按文件名访问并读出其中的数据。主机通讯端口是 MP3 播放机和 PC 机交换数据的途径,PC 通过该端口操作 MP3 播放机存储设备中的数据,拷贝、删除、复制文件等操作。目前最广泛使用的是 USB 总线,并且遵循微软定义的大容量移动存储协议规范,将 MP3 播放机作为主机的一个移动存储设备。这里需要遵循几个规范:USB 通信协议、大容量移动存储器规范和 SCSI 协议 13-15。音频 DAC 是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。这里要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人们能听到的声音频率在 20
8、Hz 到 20kHz 之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是 ADC(模拟数字转换)过程,DAC(数字模拟转换)过程相反,将连续的数字按采样时候的频率转换成对应的电压。MP3 解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是 PCM 和 I2S 两种) ,需要通过 DA
9、C转换器变成模拟信号才能推动功放,被人耳所识别。2.2 MP3 播放器编码过程2.2.1 编码分析一、音频信号数字化信号的数字化就是将连续的模拟信号转换成离散的数字信号,一般需要完成采样、量化和编码三个步骤,如图 2-1 所示。采样是指用每隔一定时间间隔的信号样本值序列来代替原来的时间上连续的信号;量化是用有限个幅度近似表示原来的时间上连续变化的幅度值,把模拟信号的连续幅度变为有限数量、有一定时间间隔的离散值;编码则是按照一定的规律,把量化后的离散值用二进制数码表示。上述数字化的过程又称为脉冲编码调制,通常由 A/D 转换器来实现。模拟音频信号 低通滤波器编码数字流采样量化图 2-1 音频信号
10、数字化数字音频信号经过处理、记录或传输后,当需要重现声音时,还必须还原为连续变化的模拟信号。将数字信号转换成模拟信号为 D/A 转换。数字音频的质量取决于采样频率和量化位数。采样频率越高,量化位数越多,数字化后的音频质量越高。二、音频采样采样就是从一个时间上连续变化的模拟信号取出若干个有代表性的样本值,来代表这个连续变化的模拟信号。一个在时间和幅值上都连续的模拟音频信号的函数表示为,采样的过程就是在时间上将函数 离散化的过程。一般的采样是按照均匀的时xt xt间间隔进行的。设这一时间间隔为 T,则取样后的信号为 ,n 为自然数。xT根据奈奎斯特采样定理:要从采样值序列完全恢复原始的波形,采样频
11、率必须大于或等于原始信号最高频率的 2 倍。设连续信号 的频谱为 ,以采样间隔时间 T 抽tf样得到离散信号 ,如果满足 时,其中 是截止频率,即 时,可以xnTcfcf 12cf由 完全确定连续信号 ,如公式(2-1)所示。xnTx(2-2fnTfTxt1)因此,可由离散信号 完全确定频谱 ,如公式(2-2)所示。xnt(2-sinnTtxt2)当采样频率为 1/2T 时,即 时,称 为奈奎斯特采样频率。1nfTnf三、音频量化采样把模拟信号变成了时间上离散的样值序列,但每个样值的幅度仍然是一个连续的模拟量,因此还必须对其进行离散化处理,将其转换为有限个离散值,才能最终和数码来表示其幅值。量
12、化过程是将采样值在幅度上再进行离散化处理的过程。所有的采样值可能出现的范围被划分成有限多个量化阶的集合,把凡是落入某个量化阶内的采样值都赋予相同的值,即量化值。通常这个量化值用二进制来表示,用 N 位二进制码字可以表示 2N 个不同的量化电平。存储数字音频信号的比特率为: ,其中的 是采样sIfsf率,N 是每个采样值的比特数。表示采样值的二进制的位数为量化位数,它反映出各采样值的精度,如 3 位能表示采样值的 8 个等级,8 位能反映 256 个等级,其精度为音频信号最大振幅的 1/256。量化位数越多,量化值越接近于采样值,其净度越高,但要求的信息存储量就越大。根据以上公式可知,要减小比特
13、率 I,在 2s 已经确定的情况下,只能去减少 N 的值。N 的值降低会导致量化的精度降低,N 的值增加又会导致信息存储量的增加。因此在编码时就需要合理地选择 N 的值 16。均匀量化就是采用相等的量化间隔进行采样,也称为线性量化。用均匀量化来量化输入信号时,无论对大的输入信号还是小的输入信号都一律采用相同的量化间隔。因此,要想既适应幅度大的输入信号,同时又要满足精度高的要求,就需要增加采样样本的位数。非均匀量化的基本思想是对输入信号进行量化时,大的输入信号采用大的量化间隔,小的输入信号采用小的量化间隔,这样就可以在满足精度要求的情况下使用较少的位数来表示。其中采样输入信号幅度和量化输出数据之
14、间一般定义了两种关系,一种成为 u律压缩算法,另一种成为 A 律压缩算法。采用不同量化方法,量化后的数据量也就不同。因此说量化也是一种压缩数据的方法。四、音频编码采样、量化后的信号还不是数字信号,需要把它转换成数字脉冲,这一过程成为编码。最简单的编码方式是二进制编码。具体说就是用 n 比特的二进制编码来表示已经量化了的样值,每个二进制数对应一个量化电平,然后把它们排列,得到由二值脉冲串组成的数字信息流。用这种方式组成的二值脉冲的频率等于采样频率和量化比特数的乘积,成为数字信号的数码率。采样频率越高,量化比特数越大,数码率就越高,所需要的传输带宽就越宽 17。音频编码方法归纳起来可分三大类:波形
15、编码、参数编码、混合编码。波形编码是尽量保持输入波形不变,即重建的语音信号基本上和原始语音信号波形相同,压缩比较低;参数编码是要求重建的信号听起来和输入语音一样,但其波形可以不同,它是以语音信号所产生的数学模型为基础的一种编码方法,压缩较高;混合编码是综合了波形编码的高质量潜力和参数编码的高压缩效率的混合编码方法,这类方法也是目前低码率编码的方向。2.2.2 编码过程MP3 文件由一系列长度不同的帧组成,一个接着一个,就好像电影胶片一样。每一帧的前面都有一个头信息,其中就包括一些关于后继数据的额外信息。在某些编码中,这些帧可以互相影响。例如,一帧有剩余的空间,而下一帧没有,他们就可以组合起来产
16、生一个优化的结果。在一个 MP3 文件的开始或者结尾,通常会存储一些额外的信息,包括歌手、曲目名、专辑名、录制时间、流派以及个人评论。这叫做“ID3”数据,当文件数目不断增长是,将会非常有用。MP3 使用两种技术获得好的压缩比:一种有损压缩,一种无损压缩。首先,压缩过程将人类根本不能听到的部分丢弃(或者至少做出可接受的折衷) ,然后对冗余编码进一步的压缩 18。然而,正是第一部分的压缩做了大部分的工作,也具有更多的复杂性,这里也被更多的考虑。MP3 编码工具分析信号源,把它分解为各种数学模板,并和编码器存储的心理声学模板进行比较。编码器就可以丢弃大部分不匹配的数据。MP3 编码过程可以分成几个
17、步骤:首先,将信号分解成称为帧的组建片、每一帧持续不到一秒。这和电影中的帧很类似。第二,分析信号已决定其“光谱能量分布” ,也就是说,在整个可听频率的光谱范围内,找出怎样将比特流进行分布,以产生最好的音频编码。因为频率光谱的不同部分使用相同的算法,经过轻微的变换,可以进行高效编码,这一步将信号分解为子带(sub-bands) ,子带可以独立的进行处理以产生最优的效果(注意所有的子带都使用相同的算法,不同只是因为使用的编码器不同造成的其分配的比特流大小不同而已) 。第三,要考虑数据传输率,它决定了每一帧能够分配的比特最大值。例如,如果数据传输率是 128kbit/s,那么每一帧可以分配的数据上限
18、就确定了(除非使用变比特率方法) 。这一步决定了可以存储多少可获得的数据以及有多少数据被丢弃。把每一帧的频率分布于人类心理声学的数学模板进行比较(数学模板作为一个索引表存储在编/解码器中) ,从这些模板中就可以决定,哪些频率应该准确的渲染表现出来,那些频率可以丢弃或者分配较少的 bit。第四,经过 Huffman 编码的处理,这个过程去处取样的冗余信息。Huffman 编码和心理声学模型并不相关,它只是通过传统的压缩方式获得额外的压缩比。因此,读者可以看到,整个 MP3 编码过程是:首先,利用所有的心理声学模板选择性的丢弃大量数据,然后压缩剩余的数据,消除冗余。其中的第二步,并不丢弃数据,它仅
19、仅使用更小的空间存储剩余的数据。把一定数量的帧集合起来,再在每个数据帧前加上头信息,就组装成一系列的比特流,头信息主要包括一些相关帧的指令。在这个过程中,许多其他因素需要考虑,这经常在开始编码前就需要预先设定。另外,对每个单独的帧的编码算法经常还依赖于对前一帧和后一帧。整个过程包含了某种程度的同步,前面的步骤并不必须按顺序进行 19。MP3 的声音数据分成帧,每帧包含 1152 个样本的数据,由 32 个子带分别输出 MP3的编码器输入,以 12 个样本为一组,每组样本经过时间-频率变换之后进行一次位分配并记录一个比例因子(scale factor) 。位分配的信息告诉解码器每个样本由几位表示
20、,比例因子用 6 位表示解码器,使用 6 位的比例因子乘以量化器的每个输出样本值,以恢复被量化的子带值。比例因子的作用是充分利用量化器的量化范围,通过位分配的比例因子相配合,可以表示的动态范围超过了 120dB 的样本 20。MP3 使用了从 ASPEC(Audio Spectral Perceptual Encoding)和 OCF(Optimal Coding In The Frequency domain)导出的算法。在滤波器组上,MP3 在使用了正交镜像滤波(和MP1 和 MP2 相同)后,紧跟着使用了改进离散余弦变换 MDCT(Modified Discrete Cosine Tra
21、nsform) ,对正交镜像滤波的不足进行了一些补偿。MDCT 把子带的输出在频域里进一步细分已达到更高的频域分辨率。而且通过对子带的进一步细分,编码器部分消除了多相滤波器组引入的混迭效果。MP3 编码器的详细框图如图 2-2 所示。分析滤波器组比例器和量化器哈夫曼编码掩蔽域值边信号编码器FFTMDCT 动态加窗逆 MDCT动态加窗合成滤波器组逆比例器和量化器哈夫曼解码器边信号解码器MCUMCU数字通信图 2-2 MP3 编码器和解码器的结构MP3 指定了两种 MDCT 的块长:长块的块长为 18 个样本,短块的块长为 6 个样本,相邻变换的窗口之间有 50%的重叠。长块对于平稳的声音信号可以
22、得到更高的频域分辨率,而短块对跳变的声音信号可以得到更好的时域分辨率。在短块模式下,3 个短块代替了一个长块,短块的长恰好是一个长块的 1/3,所以 MDCT 的样本数不受块长的影响。给定的一个帧声音信号,MDCT 可以全部使用长块或全部使用短块,也可以长短块混合使用。因为低频区的频域分辨率对音质有重大影响,所以在混合块长模式下 MDCT 对低频的 2 个子带使用长块,而对其余的 30 个子带使用短块。这样,既能保证低频区的频域分辨率,又不会牺牲高频域的时域分辨率。长块和短块之间的切换有一个过程,一般用一个带特殊长转短或者短转长数据窗口的长块来完成这个长短块之间的切换。除了使用MDCT 外,M
23、P3 还采用了其他许多改进措施来提高压缩比而不降低音质。虽然 MP3 引入了许多复杂的感念,但是它的计算量并没有比 MP2 增加许多。增加的主要是编码器的复杂度和解码器所需要的存储容量。2.3 MP3 播放器解码过程作为一个整体,MP3 系统的大部分工作放在了解码部分。但是,普通用户主要是播放 MP3 文件而不是制造它,这里将重点介绍解码过程。解码器并不需要存储或者利用人类心理声学理论,也不需要进行比特分配过程。MP3 播放器所关注的只是检查比特流的头和频谱分布的数据帧,以及和它们存储在一起的边信息,然后再将重建这些信息为音频信号。从某种意义上说,播放器其实就是一个 MP3 文件、播放列表和声
24、卡的接口,将它们包装为相对简单明了的解码 MP3 比特流格式的规则。不同的 MP3 解码器在效率上有着很大的不同,同样在解码后声音的质量上也有很大的不同,在过去的几年里,这些不同对计算机硬件的依赖在很大程度上被忽视了,实际上解码器也同样要消耗大量系统资源的。这在那些没有良好微线程特征的操作系统中特别的明显,如果有适当的硬件,可以在很大程度上免除 MP3 的中断的问题。一些 MP3 解码器比其他解码器占用更多的 CPU 时间,但是,用效率来衡量它们之间的区别并不比用其它特征来衡量的区别大。选择 MP3 播放器关系到成本、可扩展性、音频质量和外观。图 2-3 为 MP3 的整个解码过程的流程图,和
25、解码器的图相对应:同步并读取帧头解码边信息解码比例系数霍夫曼解码转化为 PCM 采样逆离散余弦变化删除伪信号重新量化图 2-3 MP3 解码流程本节主要介绍了 MP3 的编解码过程。MP3 播放器的编码过程包括:音频信号数字化、音频采样、音频量化和音频编码。编码器将模拟信号经处理后,转换成数字信号进行传输。MP3 的解码是编码的反过程,主要是从编码后的谱线成分中,经过反量化和逆变换,提取出声音信号。MP3 的解码总体上可分为比特流分析,霍夫曼编码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,逆离散余弦变化,子带合成,PCM 输出。3 MP3 播放器的硬件设计和实现3.1 系统的总体设计此次
26、设计方案可以方便的将外部的 MP3 格式的音乐文件传输到本系统的存储器 Flash中。如图 3-1 可以看出本系统的具体硬件设计主要包括:主芯片和 USB 接口的连接设计,此部分主要用于 MP3 文件的传输和固件下载;主芯片和按键以及 LCD 之间的设计连接,用户通过显示屏幕获取播放器的进程息,通过按键来对音乐进行选择和控制;主芯片和D/A 转换器之间,这一系统将该系统解码后的数字信号转换为人耳能识别的模拟信号,这一部分主要包括时钟信号、数据信号以及反馈信号的连接;电源转换部分,本系统内部使用的电源一般为 3.3V,而 USB 接口以及电池的电源都需要 DC-DC 部分来进行转换,从而为系统提
27、供所需的 3.3V 电源;播放系统和存储系统的切换电路设计。LCD显示器Keyboard(操作按键)MCU(AT89C51SND1C)MP3 解码器(AT89C51SND1C 芯片内部集成)D/A 转换器功放音频输出通信接口(USB1.1)图 3-1 系统硬件结构MP3 工作原理流程图如图 3-2 所示。读取存储器上的信号解码器对信号进行解码通过 D/A 转换器将解码出的数字信号转换成模拟信号把转换后的模拟音频放大低通滤波后到音频输出图 3-2 工作原理流程图MP3 播放器的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。音乐播放器首
28、先读取存储器上的音乐信号,再通过解码器对信号进行解码分析,经解码的信号通过 D/A 转换器将解码出的数字信号转换成模拟信号,然后把转换后的模拟音频放大,通过低通滤波后到音频输出。3.2. 主电路设计系统的主芯片采用美国 ATMEL 公司的 AT89C51SND1C,该芯片是一个 2.53.3 V 低电压、80 mW 低功耗、运算速度高、功能完善、高度集成并且低成本的单芯片数字(MPEG1,2 ,2.5/First 1024 Byte MP3 Datam=ReadSector(SongName,Page_Buf) ;/从当前歌曲中读取 512 字节if(MP3STA1i0x00) /当前音量没有
29、达到最小时MP3VOR-=0x01; /右声道音量增大一档MP3VOL-=0x01; /左声道音量增大一档break;case EFFECTION : /如果出于音效调节功能If(MP3BAS7) /降低重音效果MP3BAS-=7;MP3MED=0x0f;MP3TRE+=7;break;case SELECTSONG : /如果处于 MP3 选曲功能if(NowPlaying=(NumofSong-1) NowPlayiing=0;/如果已经处于最后一首了,则指向第一首else NowPlaying+; /否则,指向下一首ChangeSong=1; /置选曲标志位break;default:b
30、reak;3) Previous,向前。此键的功能和 Next 正好相对应。源代码如下:void previous() /按下“上一首/音量增大”键时的处理switch(CurrentFun)case VOLUME : /如果当前处于音量调节功能if(MP3VOR0)NowPlaying-;/如果当前播放歌曲不为第一首,则指向上一首else NowPlaying=NumofSong-1;/如果当前已经到达第一首,则指向最后一首ChangwSong=1; /置选曲标志位break;default:break;4) Play Pause,播放/暂停。每当按下此键时,改变一下播放状态,配合在 MP3
31、 播放函数中对此状态的判断,可以实现 MP3 播放过程中的暂停。源代码如下:void PlayPause()PlayState=!PlayState; /按一下播放键时,改变播放状态4.3 USB 通信功能程序设计USB 通信功能模块用于对 Flash 存储器内的文件进行管理,实现 MP3 文件的下载,由于 AT89C51SND1C 没有外部中断引脚, USB 中断没有中断向量地址入口,USB 驱动程序采用中断查询工作方式。其流程图如图 4-3 所示。在 USB 控制器使用前,首先对其进行初始化,然后在主程序中循环读取 USB 断电中断寄存器,当查询到有中断产生时则进入到相应的中断处理程序,开
32、始设备配置和数据传输。程序代码如下:#include /51 单片机头文件#include “CH375INC.H“ / CH375 头文件unsigned char CH375_RD_DAT_PORT( void ) return( CH375_DAT_PORT ); void CH375_Init( ) switch ( InterruptStatus ) case USB_INT_BUS_RESET1: /USB 总线复位 break;case USB_INT_BUS_RESET2: /USB 总线复位 break; case USB_INT_BUS_RESET3: /USB 总线复位
33、break; case USB_INT_BUS_RESET4: /USB 总线复位 break; case USB_INT_EP0_SETUP: /端点 0 的接收器接收到数据, SETUP 事务成功,内部固件模式时不需要处理 break; case USB_INT_EP0_OUT: /端点 0 的接收器接收到数据, OUT 事务成功,内部固件模式时不需要处理break; case USB_INT_EP0_IN: /端点 0 的发送器发送完数据, IN 事务成功,内部固件模式时不需要处理 break; case USB_INT_EP2_OUT: /批量端点/端点 2 接收到数据,OUT 成功
34、/从当前 USB 中断的端点缓冲区读取数据块,并释放缓冲区CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); length = CH375_RD_DAT_PORT( ); /* 首先读取后续数据长度 */for ( i = 0; i length; i + ) buffer i = CH375_RD_DAT_PORT( ); /接收数据包/* -测试数据正确性,将接收到的命令包数据返回给 PC 机- */CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向 USB 端点 2 的发送缓冲区写入数据块 */CH375_WR_DAT_PORT
35、( length ); /* 首先写入后续数据长度,回传刚接收到的数据长度 */for ( i = 0; i length; i + ) CH375_WR_DAT_PORT( buffer i ); /* 数据返回,由计算机使用程序测试数据是否正确 */* - */break; case USB_INT_EP2_IN: /批量端点/端点 2 发送完数据,IN 成功 CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /释放当前 USB 缓冲区break; default: CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; main(
36、) Delay50ms( ); CH375_Init( ); /对 CH375/CH372 初始化EA = 1; /允许中断while(1);开始初始化 USB 时钟读取中断寄存器状态是否有端点产生中断中断寄存器清零相应的中断服务子程序是否、否图 4-3 USB 通信功能程序流程图5 结论本次设计我采用的是 AT89C51SND1C 单片机为核心展开对 MP3 播放器的设计,在AT89C51SND1 的 64KFlash 中,其中地址在 F000FFFF 的区域为 4K 字节的 Boot Flash,这部分程序是出厂时已经固化的 Boot Loader 代码,它使用 DFU(设备固件升级)协议
37、来更新芯片 Flash 存储器中的用户程序。有两种方式可以使得芯片在上电复位后执行 Boot Flash 中的这段程序:一是当芯片中的 BLJB 位为 1 时,上电即执行这段代码;二是当BLJB 位不为 1 时,如果在复位后芯片检测到引脚 ISP 为低时,也会执行这段程序。在输入程序时,AT89C51SND1 自带 USB 接口,可对 Flash 进行在线编程,不需要硬件烧写器就可以下载目标代码到芯片中,这样大大的降低了这次毕业设计的成本。在硬件部分,首先由复位电路和晶振电路和单片机构成最小系统,由最小系统为核心展开对外围电路的设计,这样会大大减少设计电路的难度。由于设计所需电源为3.3V,而外接电源为 5V,因此,要在设计中加上可调输出电源电路部分,在设计中我采用 AS1117 低压差线性稳压器,不仅仅它可以将 5V 电压转换为设计所需要的 3.3V 电压,它还具有完善的过流保护和过热保护功能,可以很好的保护电路;在 D/A 转换电路部分,我选用 CS4331 将解码后的数字信号转换成模拟信号。AT89C51SND1C 从 Flash 中读取数据之后,将 MP3 格式的音乐在其内部进行硬件解码为二进制数据, 之后通过 D/A 转换器 CS4331 来对这些数据进行数模转换,转换成人耳可以接受的音乐。CS4331 在改善音频质量,降低信噪比等方面都很好,可以减少信号的失真。