基于ARM的MP3播放器的设计与制作_第1页
基于ARM的MP3播放器的设计与制作_第2页
基于ARM的MP3播放器的设计与制作_第3页
基于ARM的MP3播放器的设计与制作_第4页
基于ARM的MP3播放器的设计与制作_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式MP3播放器的设计1 系统概述本文采用STM32系列微控制器, 结合解码芯片VS1003、SD卡、LCD等外围设备设计并实现了MP3播放器。其主要功能有:播放VS1003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作, 以方便拷贝音频文件。MP3播放过程是STM32通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至解码芯VS1003解码播放。这里解码模块单独使用一个SPI接口,以减小干

2、扰和噪声、提高音质。2 系统硬件设计方案本系统在硬件上分为6个模块: 微控制器STM32F103、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。系统硬件框架如图5所示。图5 系统硬件框架图2.1 存储模块设计SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。SD卡支持两种总线方式: SD方式与SPI方式。其中SD方式采用6线制,而SPI方式采用4线制,采用单片机对SD卡进行读写时一般都采

3、用SPI模式。可用不同的初始化方式使SD卡工作于SD方式或SPI方式。在本设计中,音频数据MP3文件是以SD卡为载体。所以在电路设计中必须含有读取SD卡模块。该系统使用STM32内部接口SPI1与SD卡进行通信,下面介绍其引脚连接情况。PE3:低电平有效,连接到SD卡的片选引脚CD/DAT3。SPI在和SD卡进行通信时,需要将PE3拉低才能对SD卡进行操作。PA7:映射为STM32内部接口SPI1的主输出从输入(MOSI)信号线。这里STM32是主设备,SD卡是设备。数据流的传输方向是从STM32传输给SD卡。该信号线用于传输一些控制命令来完成SD卡的操作,如读、写等。PA5: 已连接到STM

4、32内部接口SPI1的时钟(SCL K)信号线。可设置SPI的时钟频率来调整读取SD卡数据的快慢。PA6 :已连接到STM32内部接口SPI1的主输入从输出(MISO)信号线。数据的传输方向是从SD卡传输给STM32 ,主要返回SD卡的一些状态、内部寄存器值等。PC12 :用于检测SD卡是否完全插入。当SD卡完全插入时,PC12为低电平,否则为高电平。22 音频解码模块设计音频解码模块完成MCU从SD卡里读取的数字MP3音频数据流进行解析、并转化成模拟信号进行输出。在这里,系统使用VS1003音频解码芯片来实现音乐数据流的解析。VS1003是由芬兰VLSI公司出品的一款单芯片的MP3/WMA音

5、频解码芯片,其拥有一个高性能低功耗的DSP处理器核VS_DSP, 5K的指令ROM, 0.5K的数据RAM,串行的控制和数据输入接口, 4个通用I/O口,一个UART口,同时片内带有一个可变采样速率的ADC、一个立体声DAC以及音频耳机放大器接口。VS1003与核心控制器MSP430F149的数据通信是通过SPI总线方式进行的。VS1003主要通过串行命令接口(SCI)和串行数据接口(SDI)来接收MSP430F149控制器的控制命令和MP3的数据。通过XCS、XDCS引脚的置高、置低来确认是哪一个接口处于传送状态。对于VS1003芯片的功能控制,如初始化、软复位、暂停、音量控制、播放时间的读

6、取等,均是通过SCI写入到特定寄存器的内容来实现的。两条SCI指令之间要通过DREQ引脚信号判断上次处理是否完成。该系统使用STM32 内部接口SPI2 与VS1003 进行通信,下面介绍其引脚连接情况。PA3 :VS1003 的中断请求引脚。当VS1003 内部数据已处理完毕,需要新的数据时,将DREQ 拉高。STM32根据这个信号来给VS1003 发送新的数据流。PB13 : 已连接到STM32 内部接口SPI2 的时钟(SCL K) 信号线。PB14 :已连接到STM32 内部接口SPI2 的主输入从输出(MISO) 信号线。这里STM32 是主设备,VS1003 是从设备。数据流的传输

7、方向是从VS1003 传输给STM32 。主要用于读取VS1003 的一些状态和内部寄存器值,比如寄存器测试返回的内部寄存器的值。PB15 :已连接到STM32 内部接口SPI2 的主输出从输入(MOSI) 信号线。这里STM32 是主设备,VS1003 是从设备。数据流方向是从STM32 传输给VS1003 ,主要传输给VS1003 一些控制命令、MP3/ WMA 数据流等。PA1 :低电平有效,如果拉低该引脚,那么通过SPI 传输的是控制信号。控制信号包括读写VS1003 的内部寄存器、对VS1003 进行初始化、设置左右声道音量等。PA2 :低电平有效,如果拉低该引脚,那么通过SPI 传

8、输的是数据信号。比如在向VS1003 传输MP3/ WMA 的数据流时需要拉低该引脚。PA0 :低电平有效,拉低该引脚则硬件复位VS1003 。23 液晶显示模块设计LCD3310芯片是一个48行84列的液晶显示器主要模块。其内存带有低功耗PCD8544的CMOSLCD控制驱动器,串行输入速度最高可达4. 0Mbits/S,而且所有必须的显示功能集成在一块芯片上,包括LCD电压及偏置电压发生器,所以LCD3310是一款低功耗的液晶显示器。为了让LCD3310液晶能够显示4行12* 12的汉字,系统开辟了一个6* 84字节的缓冲区,要写液晶时,就不用直接写LCD3310的静态DDRAM了,可以先

9、写系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容,LCD3310与主控制器是SPI接口方式。3 系统软件设计方案3.1 MP3播放器软件系统流程原理系统启动后,先初始化硬件模块。由MCU通过FAT32文件系统接口读取SD卡的一些基本信息,如容量、扇区大小、FAT表及根目录所在的启始扇区等。通过获得这些信息后,就可以找出SD卡是否有我们可以播放的音乐文件。若有音乐文件,微处理器将通过SPI总线方式读出该文件的音频信息,并将歌曲的码流信息送入到VS1003芯片中,通过VS1003芯片解码以及其内含的高质量的立体DAC和耳机驱动电路,实现MP3歌曲的播放功能。在触摸键的控制下

10、,通过LCD3310中菜单选项的选择,实现对歌曲选择及音量控制等功能;在播放的同时, LCD3310上显示的信息除歌曲名称信息外,还包括进度和音量等信息。由于SPI1 读取SD 卡文件的速度远超过VS1003 播放数据流的速度,因此VS1003 在播放来自SPI2 的数据流期间,SPI1 能从SD 卡中读取下次播放所需的数据,不会产生声音不连续的情况。由于使用了2 个SPI 接口,相互之间无干扰,且提高了文件系统的效率,因此本系统能得到非常高品质的音乐。如图6是MP3播放器的软件系统流程图。下面介绍软件的核心模块。(1)SD 模块SD 模块主要提供SD 卡驱动以及对FAT 文件系统操作的函数,

11、FAT 文件系统支持长文件名。该模块主要含有2 个文件msd.c 和fat16.c 。下面分别介绍其主要函数的功能。(1) msd.c该文件用于提供SD 卡的驱动,主要包括以下函数。SPI_ Config : 配置与SD 卡相连接的SPI1 及相关GPIO。MSD_Init :初始化SD 卡通信。Get_Medium_Characteristics :获取SD 卡的容量和块大小等相关信息。MSD_GoIdleState :令SD 卡处于空闲态。MSD_SendCmd :向SD 卡发送命令。MSD_GetResponse :从SD 卡获取响应。MSD_GetStatus :获取SD 卡的状态。M

12、SD_WriteBlock :向SD 卡写入1 个块的数据。MSD_ReadBlock :从SD 卡读取1 个块的数据。以下是函数MSD_ReadBlock 的实现:u8 MSD_ ReadBlock ( u8 * pBuffer , u32 ReadAddr , u16 NumByte ToRead) u32 i = 0 ;u8 rvalue = MSD_RESPONSE_FAILURE;MSD_CS_LOW() ; / / 拉低片选信号,选中SD 卡MSD_SendCmd (MSD_READ_ SIN GL E_BLOCK, ReadAddr ,0 xFF) ; / / 发送读取块命令/

13、/ 检测SD 卡是否有返回信息,若是则返回0 x00if ( !MSD_GetResponse (MSD_RESPONSE_NO_ERROR) ) if ( !MSD_ GetResponse (MSD_ START_DA TA_ SIN GL E_BLOCK_READ) ) / / 等待数据令牌,标志数据传输开始for (i = 0 ; i Load Image加载要 HYPERLINK / t _blank 下载到FLASH的调试文件。第17问: Q:在ADS中是否可以进行软件调试基于UCOS-II的程序 A:ADS软件调试只能调试 HYPERLINK t _blank arm的内核,不能

14、调试外设。但是取消 PLL 锁定检测后,可以调试任务切换,最终到空闲任务上。开始移植时软件仿真是最好的工具。第18问: Q: HYPERLINK t _blank armulate软件是干什么的 2104不是用EasyJTAG.dll来仿真吗 A:软件仿真只能仿真 HYPERLINK t _blank arm 核。第19问: Q:有关LPC2106.INC的问题。我无法在project引用lpc2106.inc文件,只能引用lpc2106.h文件, 这是什么原因 且当我的主程序用汇编编写时,不能引用lpc2106.h,用lpc2106.inc则无法加入project,请问汇编器应如何设置 A:

15、不用加2106.inc只要该文件在你的工程文件夹中,就可以直接在汇编程序的开始处加 include 2106.inc. 注意:该文件是汇编文件定义的头文件,定义内部寄存器。第20问: Q:入口点是什么意思 我在使用LPC2106上移植UCOS-II,每次MAKE时总是提示我 Image does not have an entry point,可是我是把光盘的vetctors.s 复制过来的,而且仔细看了看,已经声明了ENTERY,这是怎么回事A:需要在ADS中设置入口。第21问: Q:请教:如何定义不被初始化变量 A:让编译器不知道有这个内存地址即可。 A:如用分散加载文件分配RAM故意预留

16、一部分RAM不分配,用它来存您不需要初始化的东西。或者不调用编译器提供的启动代码,不过这样可能编程会麻烦一些。第22问: Q:我直接通过JTAG口 HYPERLINK / t _blank 下载EasyArm板带的Ext1_test程序到 HYPERLINK t _blank arm中,出现中断向量的告警: interrupt vector is not correct HYPERLINK t _blank arm is not running freely. 果然复位后芯片不能运行。但是我用串口 HYPERLINK / t _blank 下载后芯片能正常工作,中断也行的。 并且我用JTAG仿

17、真的话,芯片能正常工作,中断也行的,唯独JTAG口 HYPERLINK / t _blank 下载不行。 不知道是什么原因 A:仿真器配置中要设置Erase Flash when need.也可以这样试试: 1.可以先打开一个工程在RAM中调试运行; 2.stop程序; 3.使用File-Load Image重新加载Ext1_test生成的*.axf文件。 Q:仿真器配置中我是设置了Erase Flash when need,但照你说的话,那不是在RAM下调试吗 在RAM下调试我是可以的,但是下载后出现interrupt vector data is not correct. 我又看了几篇文章

18、,是不是跟中断向量表的累加和不为零有关系啊 A:是的,是向量表的累加和不为零。 因为如果用ISP下载能运行,说明向量表的累加和已为零,而用JTAG下载不能运行的情况可能是 没有正常下载代码。先在RAM中调试,目的是为了后面正确下载程序到FLASH.第23问: Q:用Scatter怎样将某个函数或文件定位在Flash的某个位置 第24问: Q:我在仿真时遇到这样的提示: Error, Flash is protected by user configation! 怎么写到flash里面呢 A:看配套 HYPERLINK t _blank arm微控制器基础与实战附录一。第25问: Q:我在移植实

19、验中想到了两个问题,如下: 1.Debug和Release以及DebugRel有什么不同,为什么在作2104移植实验时,要用Release 2.在Release中为什么要将RW Base设置为0 x40000040 我将其设置为0 x40003000, 为什么不能工作 A:都只是一个问题,内存空间的使用,因为跑OS要比较大的内存空间,所以要腾出点地方。第26问: Q:请问没有MMU的 HYPERLINK t _blank arm芯片是否支持使用malloc()函数动态分配内存 A:是否支持malloc()函数与芯片没有多大关系,主要与编译器有关。 Q:再问:如果没有操作系统支持呢 A:也支持。

20、第27问: Q:在I2C实验程序中,我想查看数据缓冲区DataBuf的值,怎么查看 A:watch窗口或鼠标停留在要查看的变量名上。 Q:我查询的是写入DataBuf缓冲区的值,鼠标在上面根本就不会出现他的值,即使在watch中加入, 结果也是name not found. A:变量被优化,调试时可以把该变量定义为全局变量查看。第28问: Q:仿真软件和2104开发板连接不上 DBE Warning 00041: !An unspecified Debug Toolbox call failed 电源和开发板都连好,错误和没接开发板一样,驱动也安装了,安装时按确定键时,软件很长时间才有如上反应

21、,请帮忙 A:1.并口是否正常 2.在其它操作系统(如98)下或其它台式PC下试试。第29问: Q:如何生成32位hex文件 我在Release Setting- HYPERLINK t _blank arm fromELF-Output Format中设置为Intel 32bit HEX,可是好像没有生成hex文件 A:试试这种方法: Target-Target Setting- ost Link中选择 HYPERLINK t _blank arm fromELF加上你上面设的应该不成问题。第30问: Q:请问关于settings中r0 base rw base的意思 A:ro:read o

22、nly,rw:read and write.第31问: Q:编译成功后的信息第一行,code,R0 data,RW data,ZI data,debug分别代表什么 A:R0 只读段,即程序代码空间; RW 可读/写段,即数据变量空间; ZI 清零变量段,即需要清零初始化的数据变量空间。第32问: Q:如何在ADS里面看任务执行的一些情况 比如堆栈。 A:多任务环境下的堆栈,内存等信息需要调试软件的支持才可以实现。 ucos下有一个统计功能的模块可以间接实现部分功能。第33问: Q:请问向flash烧数据时出现:exceeds flash limitation 请予赐教! A:要写入的flas

23、h地址超过了范围。如果不是代码太大的问题,可以检查scf文件是否正确。第34问: Q:在LPC2214之类的芯片中如何实现数组的绝对地址定位,比如51的_at_的用法。 A:*(char*)0 x40000300)类似访问 Q:谢谢,但这样做就无须定义数组变量,访问也不便,还有高招吗 A:可以使用分散加载。第35问: Q:请问 ADS编译错误L6221E:Execution region ER_RO overlays with Execution region ER_ZI 该如何解决 A:请用我们网站上的工程模板试一试,最大的可能是因为你的RELEASE或者DEBUG选项里面没有正确设置,按照

24、参考 HYPERLINK t _blank arm微控制器基础与实战上面的设置,是不会有这个问题的。第36问: Q:请教一下:将程序写入flash,再用从JTAG方式调试写入之后再复位程序没什么反映。 看了很多以前的帖子,说memmap寄存器要为1,我用的是一个很简单的控制led的例子,改动了参数之后写入flash的。在这个程序的vectors中找不到关于memmap寄存器操作的部分啊,这是怎么回事,该怎么办呢 A: HYPERLINK t _blank arm微控制器基础与实战上附录有常见问题,列举了几点程序写到FLASH不能运行的原因。 memmap操作可以在target.c中的Targe

25、tResetInit()函数内添加。第37问: Q:HEX文件。EASY2100配套 HYPERLINK t _blank arm微控制器基础与实战上讲:把项目编译成HEX文件,我不会呀,咋办 A:Target-target settings设置Post-linker并且设置Linker-fromELF. Q:再问:我用的是光盘里的例子,打开工程项目里是DebugIn HYPERLINK t _blank arm.DebugInFlash. RelInFlash.不是ARM微控制器基础与实战上的DebugRel呀,我都照 HYPERLINK t _blank arm微控制器基础与实战上设置的,可用ISP HYPERLINK / t _blank 下载,提示无法找到HEX文件。 A:光盘上的例子是用专用工程模板建立,已经设置好参数,与默认模板不同。第38问: Q:Easy HYPERLINK t _blank arm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论