音乐播放器的设计与实现Word文档下载推荐.docx
《音乐播放器的设计与实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《音乐播放器的设计与实现Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
三星公司推出的基于ARM9内核32位RISC嵌入式微处理器S3C2440,最高可运行在200MHz。
该芯片的功能强大,完全能够满足MP3定点或浮点解码程序的实现,还能够将Linux操作系统移植进入该芯片,实现包括播放MP3在内的多进程,多任务处理,是一种理想的解决方案。
图2。
1系统总体结构图
第三章硬件详细设计方案
3.1硬件设计说明
系统设计的硬件部分主要包括电源、ARM微处理器芯片、存储芯片、USB接口芯片以及音频芯片等。
可归结为两个部分:
(1)微处理器S3C2440,及其外围电路,具体包括复位电路,存储模块(包括FLASH、RAM和ROM)、电源。
(2)系统的外围部分:
音频接口、UART、USB接口、带触摸屏的LCD、调试及下载接口.音频编解码可以采用PHILIPS的UCB1400等芯片。
LCD可以采用320X240的TFT液晶显示器,电源则宜用可充电锂电池。
图3。
1硬件系统结构图
如上图3。
1可知,在此次设计中,MP3主要组成部分是:
CPU、MP3解码部分、音频放大器、FLASH存储器及SDRAM存储器。
我们所设计的MP3播放器以微处理器S3C244O为中心,包括外部存储器、串口UART、音频接口、带触摸屏的LCD、USB接口、复位电路、调试及下载接口。
解码部分由软件完成.整个播放器整体控制。
此MP3播放器的核心是三星公司的S3C2440芯片。
系统可以分为核心部分、音频编解码部分、音频输出、液晶控制等几个部分,此外还有必不可少的电源管理等部分。
音频编解码可以采用PHILIPS公司的UCB1400芯片。
LCD可以采用试验箱上的TFTLCD显示器。
硬件设计部分主要是S3C2440与UCB1400芯片的连接.具体的模块说明如下.
3。
2处理器模块S3C2440
S3C2440是三星公司生产的基于arm920T内核的RISC微处理器,其主频可达203MHz,适用于信息家电、PDA、手持设备、移动终端等领域.S3C2440除具备一般嵌入式芯片所具有的总线、SDRAM控制器和3个串口等外设之外,还具有TFTLCD控制器、USBSlave、USBHost、I2C总线控制器、SPI控制器、IIS音频接口、SD&
MMC存储卡接口等丰富的扩展功能、AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制。
芯片工作电压3.3/1.8V,最高运行速度可达200MHz.由于它是一款专为手持设备设计的低功耗处理器.因此可以降低手持设备成本,具有较高的性价比。
该芯片是基于ARM9而开发的多功能SOC(signaloperationcontro1)。
ARM9是一种小型、快速、低能耗、集成式的内核。
它的功能和特性如下:
①具有较高的处理速度,通过内部锁相环,最高可在203MHz的系统时钟下运行;
②具有极低的功耗.其核心供电电压为1.8V,外围I/O口使用3.3V电压;
③具有3种低功耗控制方式,甚至可关闭CPU中除唤醒逻辑外的所有功能,极大地降低了功耗;
④与其他arm器件相比,S3C2410片上集成了更多的外设接口,如外部存储控制器、LCD,DMA,USBl.1,SD,M。
MC卡控制器、UART,SPI接口、I2C总线控制器和I2S总线控制器、I2S音频接口、PWM定时器、看门狗、117个外部I/O口、24个外部中断源、A/D转换器和触摸屏接口、实时时钟及片上PLL的时钟产生等。
使用集成接口,有利于功能的扩展。
3.3存储模块
存储模块由一片64MB的SDRAM和两片16MB的Flash组成,可为系统提供足够的存储空间.Flash存储器是一种可在系统电擦写,掉电后信息不丢失的存储器.与Flash存储器相比,SDRAM不具有掉电保持数据的特性,但存取速度大大高于Flash存储器,且具有读/写特性。
因此系统中SDRAM主要用作程序的运行空间、数据及堆栈区。
3.4音频解码/编码模块
决定MP3音质的关键是主控解码器件中的数模转换器(DAC)单元和耳机功率放大器单元。
DAC负责把解码的数字音频流转换成可驱动耳机发音的模拟音频信号;
耳机放大器则可把模拟音频信号放大到可驱动耳机的功率。
该系统音频解码/编码模块采用PHILIPS公司的UCB1400芯片,UCB1400的外部接口共有48个管脚,大部分都提供ACLink、中断、音频、ADC、触屏、功率和其它接口。
其接口电路图如图3所示。
UCB1400是一种用于音频处理的20位立体声解码/编码器。
它在一个芯片上集成了音频解码/编码功能、一个触屏控制器和功率管理接口.10个通用管脚可进行可编程输入/输出,使得主机控制器可执行控制功能和监控运行状态.
在此次设计中,UCB1400主要的作用是音频编解码器与触摸屏控制器,还有就是对电源管理进行监控。
S3C2440可通过IIC音频接口与UCB1400连接。
图3.2音频模块流程
5网络模块
S3C2440自身并没有网络控制器,接入以太网时需增加独立的以太网控制器,在此选用DM9000作为以太网控制器.该器件具有通用的处理器接口、10M/100M自适应、4K双字节静态存取存储器、低功耗、高处理性能,可支持3。
3—5V的容差。
3.6带触摸屏的LCD模块
显示MP3播放控制界面,通过触摸屏实现对播放和暂停,停止,音量递增,音量递减等功能的控制。
LCD可以采用试验箱上的320*240的TFT液晶显示器。
3.7USB接口模块
USB接口模块是连接U盘等存储设备为MP3播放器提供歌曲来源。
本设计中,主机是通过主控制器与USB设备进行数据传输的,USB主控制器采用USB2。
0标准和开放式主机控制器接口标准,可支持高速和低速的USB设备,具备内置的MCU和内部缓存,与CPU之间有一个静态存储器的接口。
CPU通过这个接口进行读写来完成USB协议要求的控制和数据收发功能.USB主控制器提供一系列的寄存器,系统通过对这些寄存器可以实现对USB主控制器的控制.
8串口电路
此MP3提供一个串口,用来调试硬件和软件。
Max232用来转换电平.UART用于开发调试控制和返回调试信息。
3.9系统复位电路
系统时钟输入由24.576MHz的外部晶振提供,而微处理器内核的工作频率为66MHz,S3C2440内部含有PLL电路实现倍频,因此,系统由内部PLL电路倍频至66MHz,供给CPU运行。
系统复位信号由IMP811T芯片提供,并且设计了RESET按钮,可以在系统运行过程中随时复位操作,便于系统调试。
10电源模块
系统电源由XC6206P332MR芯片提供,宜用可充电锂电池。
第四章系统软件设计方案
总体上来说,系统软件包括操作系统、驱动程序及播放器应用程序3部分。
4.1软件总体设计
在此次设计中,MP3播放器的软件体系结构采用分层模式,它包括硬件层、驱动层、操作系统层及MP3播放器应用层等,软件体系结构图如下所示4.1.
图4。
1MP3播放器的软件体系结构图
从软件角度看,嵌入式Linux操作系统分为引导加载程序、内核、文件系统及用户应用程序4部分。
其一用于完成初始化RAM,初始化串口、设置Linux启动参数、调用Linux内核映像等功能;
其二为特定于具体硬件的定制内核以及控制内核引导系统的参数;
其三为含根目录文件的系统建立Flash存储器设备的文件系统;
其四为特定于用户的应用程序,即为播放程序.
软件的核心是Linux操作系统.首先需要设备驱动程序,包括USB、硬盘控制、音频控制、LCD等等。
然后是文件系统。
该设计采用的是通用的FAT32文件系统,在对Windows平台有很好的兼容性。
硬件层包括了MP3播放器所需的物理设备:
USB接口、音频接口芯片AC97、3.5英寸的TFT液晶屏等;
设备驱动层包括上述各个设备的驱动程序的编写;
操作系统层我们移植了Linux2.6的操作系统,由操作系统来统一管理各个硬件设备;
最上层是应用层,我们使用QT设计图形用户界面,通过移植开源的Madplay解码器实现对MP3文件的解码,播放、音量增减的控制.此MP3播放器软件系统包括驱动程序、操作系统及MP3播放器应用程序3部分。
4。
2操作系统的实现
在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。
BootLoader的任务是初始化芯片和主板,通过修改相应的配置文件和驱动程序就可以实现移植过程中需要创建的开发板文件.
1嵌入式开发环境的搭建
在此次设计中,硬件平台是基于XSBASE270试验箱的。
嵌入式开发环境的搭建主要包括以下几个方面,如下:
1、虚拟机安装
安装虚拟机,采用VMware。
2、Linux系统安装
在VMware上安装REDHAT企业版linux操作系统。
安装完毕之后,安装VMwareTools工具。
3、minicom配置
在启动红帽之前,要设置添加一个串口,设置成功之后,打开linux操作系统,在终端执行minicom-s命令,会出现以下界面:
选择serialportsetup,按照以下设置:
设置串口,设置波特率为115200,硬件流控制设为无.具体如下:
选择Savesetupasdfl
选择Exit即可启动minicom
4、Tftp配置
Tftp是类似于ftp的一个传输协议。
它使用IP和UDP作为子协议。
在目标板上,该协议被会在Bootloader下被用来下载kernel和文件系统的镜像,传输媒质是以太网,以较高的速度。
安装tftprpm包的步骤如下:
①安装tftp-server—0。
17-9。
i386软件包
在终端中输入命令:
rpm-ivhtftp-server—0.17-9。
i386。
rpm
②修改/etc/xinetd.d/tftp文件,内容如下:
servicetftp
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in。
tftpd
server_args=-s/tftpboot
server_args+=—s/odm/tftpboot
disable=no
}
5、在根目录下建立/tftpboot文件夹,将要下载的文件放在该目录中即可。
6、bootp配置
引导协议(BOOTP)是一种基于UDP/IP的协议。
这种协议允许正在启动的主机动态配置而无需用户监督。
BOOTP主要用于客户机从服务器获得自己的IP地址,服务器的IP地址以及启动映象文件名。
在一个评估板系统中,这些协议通常是和tftp一起使用用来将内核和文件系统从PC上下载到目标板中.Bootp主要用来获得目标板和主机的ip信息,以便可以使用Tftp协议来传输文件。
①安装bootp-2.4。
3-7.i386软件包
rpm—ivhbootp—2。
4.3-7。
rpm
②在/etc/xinetd。
d/目录下建立bootp文件,文件内容如下:
servicebootps
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/bootpd
③在/etc/目录下建立bootptab文件,内容如下
test:
\
ht=1:
ha=0x123456789a00:
#ha=0x123456789999:
ip=192.168.0.50:
sm=255.255.255。
④重启xinitd
在终端中输入:
/etc/rc。
d/init.d/xinetdrestart
7、nfs配置
8、交编译环境配置
交叉编译环境的配置总共分为四个部分:
配置交叉编译环境,然后将交叉编译工具安装在/opt目录下,试交叉编译环境,测试的时候用file命令查看文件.
2Bootloader烧写
BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。
尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。
下面介绍BootLoader的烧写过程,以Linux-2.6.22.10内核为例,我们采用的烧写工具是jflashmm.具体步骤如下:
将bootloader的映象文件boot拷贝Jflash—XSBase270(jflashmm所在目录),并利用用Jflash—XSBase270目录中jflashmm程序,将bootloader映象文件boot烧写到开发板上.在Jflash_Xsbase270文件夹下打开一个终端,同时给板子上电,输入命令:
./Jflashmmboot,即可完成boot的烧写。
指令为:
[root@localhostpxa270]#cdJflash_Xsbase270
[root@localhostJflash—XSBase270]#./jflashmmboot
3内核、文件系统的烧写
Bootloader烧写成功后,接下来就进行内核和文件系统的烧写,具体步骤如下:
(1)开发板上电,进入下载模式
打开minicom,已经配置好了,拔掉JTAG下载线。
按空格键,进入下载模式
按菜单0,
51Board>
set
myipaddr:
192。
168。
0。
50
destipaddr:
0.100
myhaddr:
00:
02:
88:
8E:
CA:
B1
autoboot:
loadkernel;
loadramdisk;
boot
kernelname:
zImage
fsname:
rootfs。
img
delay:
2
按键盘上的0,进入命令行模式:
[0]Comanndlinemode
51board>
set//查看系统状态
将系统属性修改成以上状态
按键盘上的1,进入命令行模式:
[1]Viewcurrentconfiguration,回车。
然后按2,3,4……等烧写成功后,可看到显示屏亮起来,显示当前的操作系统。
4.4驱动程序的实现
在嵌入式Linux系统中操作设备的方法,是将设备看作一个文件来访问。
用户只需注意对文件的操作。
在嵌入式Linux系统中一个设备表示为主设备和从设备.Linux系统的设备分为字符设备、块设备和网络设备3种。
字符设备是指存取时没有缓存的设备,块设备的读写都有缓存来支持,并且块设备必须能够随机存取,字符设备则没有这个要求.典型的字符设备包括鼠标、键盘、串行口等;
块设备主要包括硬盘软盘设备、CDROM等,这些设备要想在操作系统下正常运行,必须配置相应的驱动程序.在本系统中,Flash及USB属于块设备,AUDIO及LCD属于字符设备。
下面是读写Flash存储器的驱动程序的主要代码:
main()
{charbuf[4096],buf2[4096];
intfd1,fd2;
if(((fd1=open(“/dev/dsk5”,O_RDONLY))==1)||
(fd1=open(“/dev/dsk5”,O_RDONLY))==1)
printf(“failureonopen\n”);
exit();
lseek(fdl,8192L,O);
lseek(fd2,8192L,O);
if((read(fd1,buf,sizeof(buf1))==—1)||(read(fdl,buf1,sizeof(buf1))==—1)
printf(“failureonread\n”):
exit();
}
for(i=0;
I〈sizeof(buf1);
i++)
if(buf1[i]!
=buf2[i])
Printf(“diferentatoffset%d\n”,i);
printf(“readsmatch\n"
);
MP3解码部分芯片的驱动。
音频驱动程序实现的主要功能是:
(1)系统启动时可以完成芯片的初始化;
(2)具体操作时可以提供给操作系统合适的软件接口。
音频驱动初始化程序如下:
voidSTA013_Init(void)
if(STA013_SendCommand(RESET_REG,0,0x00))
//复位STA013
STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00))
//未激活状态
STA013_PrintError();
if(STA013_SendCommand(PWR_CON_REG,0,0x00))
//上电
if(STA013_SendCommand(FS_CON_REG,0,
ISTA013L_FsValue[SysInfo。
SamplingIndex]))
//选择采样频率
if(STA013_SendCommand(IF_CON_REG,0,0x02+(0〈〈6)))
//选择1
6位IIS数据格式
if(STA013_SendCommand(ANG_CTL_REG,0,0))
//0x13,0x12选择DAC和LineIn输入模式]
STA013_PrintError();
if(STA013_SendCommand(DGT_CTL_REG,0,0x00))
//DAC静音
if(STA013_SendCommand(LHP_VOL_REG,0,0x00))
//左声道音量
if(STA013_SendCommand(RHP_VOL_REG,0,0x00))
//右声道音量
if(STA013_SendCommand(ACT_CON_REG,0,0x00))
//数据传送激活
4.3音频驱动电路
音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准音频接口.音频接口驱动向上提供2个标准接口:
数字音频处理(DSP),负责音频数据的传输即播放数字化声音文件和录音操作等;
混音器(MIXER),负责对输出音频进行混音处理,如音量调节等。
这2个标准接口分别对应设备文件dev/sound/dsp和dev/sound/mixer。
整个音频驱动的实现分为初始化、打开设备、DSP驱动、MIXER驱动和释放设备等部分:
⑴设备初始化主要完成对UCB1400音量、采样频率、L3接口等的初始化,并且注册设备、打开设备。
为设备分配DMA通道,根据采样参数计算出缓存内段的大小。
当缓存区和DMA设置好后,读写操作主要对缓存操作。
⑵DSP驱动的实现:
DSP驱动实现了音频数据的传输即播放和录音的数据传输。
同时提供ioctl对UCB1400中的DAC何ADC采样频进行控制.
⑶MIXER驱动的