基于ATmega16和VS1003的音频分析与设计
2009-06-12陈朝大
摘要:MP3编码标准压缩率高,压缩质量好,是广为应用的音频压缩格式。文章介绍了一种基于ATmega16内核的单片机MP3解码原理,对系统的软、硬件部件进行了设计,实现了实时解码过程。
关键词:VS1003;ATmega16;Keil8.08;音频解码
MP3 作为高质量音乐压缩标准,给音频产业带来了具大的冲击。MP3 技术使音乐数据压缩比率大,回放质量高。如 CD格式的音乐数据压缩成MP3 格式,音效相差无己,但大小至少可压缩12 倍。由于MP3 音乐的较小数据量和近乎完美的播放效果使其在网络上传输得以实现。随着电子技术的发展,MP3播放器向大容量、高音质、小巧
便携不断发展。本文将从软硬件方面详细介绍如何实现基于ATmega16单片机的MP3音频解码过程。
l 方案设计
本设计主要完成U盘的识别和数据的读取,并将U盘中读取的MP3文件解码播放出流畅的音乐,完成MP3播放器的存储与解码的分离。系统功能主要包括:读取U盘数据、MP3解码播放。实现设计功能需要USB接口芯片、MP3解码芯片、主控制器和其他外围电路。
2硬件设计
MP3解码芯片与MCU的连接
VSl003的所有数据和控制命令均通过SPI总线接口实现,因此与ATmega16的接口实现比较简单,包括3条SPI数据线和4条控制线,如图1所示。
VSl003通过同步串行总线SPI与ATmega64进行命令和数据的传输。由于ATmega64内部集成有SPI总线模块,只要正确写SPI相关寄存器就能轻松控制SPL,这种硬件SPI总线减小了软件设计的困难。VSl003的SPI接口具有2种工作模式:新模式和兼容模式。设置寄存器SM_SDI。NEW为1使VSl003处于新模式,此时设置SMSDISFIARED为1,控制信号和数据信号的传送将分别采用xCS和xDCS作为同步信号。系统启动后,由MCU控制将存储于U盘中歌曲的码流信息送入到VSl003芯片中,通过VSl003芯片解码以及其内含的高质量的立体声DAC和耳机驱动电路,实现MP3歌曲的播放功能,在按键的控制下,实现对歌曲播放模式以及歌曲选择等功能。
2.1 VS1003的3条SPI数据线
28脚-SCLK 串行总线的时钟
29脚--SI串行输入
30脚--SO 串行输出
2.2 VS1003的4条控制线及ATEEGA16的4条控制线
03脚--XRESET 异步复位端,低电平有效 PB1/T1 T/C1 计数器源
13脚--XDCS/BSYNC1数据片选端,低电平有效 PB2模拟比较正输入
23脚--XCS片选输入,低电平有效PB3模拟比较负输入
08脚--DREQ 数据请求,输入总线PD0输出
控制信号和数据信号的传送分别采用xCS和xDCS作为同步信号;RXD(端口 PD0)是USART的数据接收引脚。当使能了USART的接收器后,这个引脚被强制设置为输出,此时 DDD0 不起作用。但是 PORTD0 仍然控制上拉电阻;DREQ 脚,在VS1003的FIFO 在能够接受数据的时候输出高电平。此时,VS1003可获取至少 32Byte的 SDI。数据或一个SCI命令。遵循这个标准,当DREQ 变低时,发送器必须停止发送新的数据。 因为有32Byte 的保险区域(数据缓冲区),当检测到DREQ 信号时,发送器(MCU)须发送32Byte的 SDI数据。
3软件设计
3.1软件架构分析
因为要兼顾到高质量的音视频效果、多种外设和有限的系统资源,PMP软件系统的设计变得相对复杂。系统设计将软件分为三层架构,如图2所示。第1层是操作系统层,其中包括bootloader引导程序,主要完成系统从FLASH的启动,LOGO的显示,以及OS的引导。主要包括适合在TI DM320上运行的嵌入式操作系统,以及各种外围设备的驱动程序。第2层为CODEC和MMI核层,MMI核包括第3层主GUI和各种应用程序所依赖的各种框架结构和数据结构,如窗口管理,定时器管理等。CODEC部分包括音频的编/解码程序(主要由ARM实现)和图像的编/解码程序(主要由DSP实现)。第3层为主GUI和各种应用程序。应用程序包括:FileManager(用来浏览存储器中的文件),VideoPlayer(播放视频文件),AudioPlayer(播放音频文件),ImageViewer(浏览图片),FM(收音机),Games(游戏),Resumes(重新播放音/视频文件)。
3.2读取U盘数据
单片机读写U盘的程序可分成2大部分:应用程序和固件程序。应用程序完成系统的数据处理任务、外围控制等功能;固件程序处理底层的USB通讯协议、文件系统,数据在USB总线上的可靠传输和在U盘上的存取操作。CH375内置了处理海量存储设备的专用通信协议的固件,所以嵌入式系统的单片机可以通过CH375将U盘作为可移动的大容量存储器。数据读写只需要几条指令,而不需要详细了解USB通信协议。
U盘文件的读写方式采取扇区模式以扇区(每个扇区通常是512字节)为基本单位进行读写操作,从而将USB存储设备简化为一种外部数据存储器,单片机可以自由读写USB存储设备中的数据,也可以自由定义其数据结构。
3.3播放MP3文件(音频解码的实现)
首先完成对VSl003和SPI总线的初始化,然后等待系统从U盘存储介质中打开MP3文件,从中读取的一个扇区的数据放入Atmeag16的512 B缓冲区中,然后将数据发往VSl003,解码芯片就会自动播放出流畅的音乐。由于VSl003有32 B的数据缓存区,一次可向其发32 B数据然后检查DREQ引脚,当DREQ为高时送下一个32 B数据,发完一个扇区的内容后再继续从U盘中读取下一个扇区内容,重复操作直到文件播放完为止。
VS1003 是基于自主的数字信号处理器VS_DSP。它包含了针对MP3,WMA和WAV PCM+ADPCM音频解码所必须的全部代码和数据,MIDI合成器,共享串行接口,多速立体声DAC和模拟输出放大器及滤波器。同时有麦克风放大器和ADC及ADPCM音频编码。为调试准备了一个UART。
依赖于音频数据,且非设置为ADPCM编码模式,MP3,WMA,PCMWAV,IMA ADPPCM WAV 或MIDI的数据流从SDI总线接收并解码。解码之后,如果SCI_AIADDR非零,则应用代码从寄存器所指向的地址开始执行。然后数据流是否经过低音,高音增强器,取决于SCI_BASS寄存器。之后,数据流向音量控制单元,同时拷贝数据进音频FIFO。
音频FIFO 锁存住数据,通过音频中断将数据送进采样率变换器和DAC。音频FIFO 的大小是2048立体声(2x16bit)采样,即8KB。采样率变换器把所有不同的采样率变为XTALI/2,或128 次最高可用采样率。这个变换用一个固定的输入时钟频率,经过复杂的PLL 时钟配置后,几乎允许无限制的采样率精确度。对于12.288MHz 的时钟,DAC 工作在128x48KHz 也就是6.144MHz 上,并建立一个立体声同相位模拟信号。过采样的输出被片上的模拟滤波器进行低通滤波。滤波后的信号前往耳机放大器。SDI数据被解码,解码的采样率变换到内部模拟DAC允许的范围。如果找不到能被解码的数据,SCI_HDAT0 和SCI_HDAT1被设置为0并且模拟输出静音。
4 结语
采用VSl003实现基于ATmega16和Keil8.08的音频编解码功能,接口电路简单,控制程序易于编写,且最终音频播放清晰、自然。音质效果和播放的连贯性都很不错,在音响和汽车电子及数据采集存储方面具有良好的应用前景。
参考文献
[1]张志良编:《单片机原理与控制技术》,机械工业出版社 2005
[2]张家田编:《DSP综合应用技术》,机械工业出版社 2007
[3]胡健栋编:《现代无线通信技术》,机械工业出版社 2007
作者简介:陈朝大,毕业于华中科技大学,电子讲师,软件硕士,研究方向:单片机应用、电子信息、智能控制.