优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx

上传人:b****5 文档编号:7799135 上传时间:2023-01-26 格式:DOCX 页数:7 大小:20.78KB
下载 相关 举报
优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx_第1页
第1页 / 共7页
优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx_第2页
第2页 / 共7页
优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx_第3页
第3页 / 共7页
优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx_第4页
第4页 / 共7页
优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx

《优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx》由会员分享,可在线阅读,更多相关《优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx(7页珍藏版)》请在冰豆网上搜索。

优选VR虚拟现实基于ARM的MP播放器的设计与制作.docx

优选VR虚拟现实基于ARM的MP播放器的设计与制作

优选(VR虚拟现实)基于ARM的MP播放器的设计与制作

嵌入式MP3播放器的设计

1系统概述

本文采用STM32系列微控制器,结合解码芯片VS1003、SD卡、LCD等外围设备设计并实现了MP3播放器。

其主要功能有:

播放VS1003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。

MP3播放过程是STM32通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至解码芯VS1003解码播放。

这里解码模块单独使用一个SPI接口,以减小干扰和噪声、提高音质。

2系统硬件设计方案

本系统在硬件上分为6个模块:

微控制器STM32F103、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。

系统硬件框架如图5所示。

图5系统硬件框架图

2.1存储模块设计

SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。

在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。

SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。

SD卡支持两种总线方式:

SD方式与SPI方式。

其中SD方式采用6线制,而SPI方式采用4线制,采用单片机对SD卡进行读写时一般都采用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:

已连接到STM32内部接口SPI1的时钟(SCLK)信号线。

可设置SPI的时钟频率来调整读取SD卡数据的快慢。

PA6:

已连接到STM32内部接口SPI1的主输入从输出(MISO)信号线。

数据的传输方向是从SD卡传输给STM32,主要返回SD卡的一些状态、内部寄存器值等。

PC12:

用于检测SD卡是否完全插入。

当SD卡完全插入时,PC12为低电平,否则为高电平。

2.2音频解码模块设计

音频解码模块完成MCU从SD卡里读取的数字MP3音频数据流进行解析、并转化成模拟信号进行输出。

在这里,系统使用VS1003音频解码芯片来实现音乐数据流的解析。

VS1003是由芬兰VLSI公司出品的一款单芯片的MP3/WMA音频解码芯片,其拥有一个高性能低功耗的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芯片的功能控制,如初始化、软复位、暂停、音量控制、播放时间的读取等,均是通过SCI写入到特定寄存器的内容来实现的。

两条SCI指令之间要通过DREQ引脚信号判断上次处理是否完成。

该系统使用STM32内部接口SPI2与VS1003进行通信,下面介绍其引脚连接情况。

PA3:

VS1003的中断请求引脚。

当VS1003内部数据已处理完毕,需要新的数据时,将DREQ拉高。

STM32根据这个信号来给VS1003发送新的数据流。

PB13:

已连接到STM32内部接口SPI2的时钟(SCLK)信号线。

PB14:

已连接到STM32内部接口SPI2的主输入从输出(MISO)信号线。

这里STM32是主设备,VS1003是从设备。

数据流的传输方向是从VS1003传输给STM32。

主要用于读取VS1003的一些状态和内部寄存器值,比如寄存器测试返回的内部寄存器的值。

PB15:

已连接到STM32内部接口SPI2的主输出从输入(MOSI)信号线。

这里STM32是主设备,VS1003是从设备。

数据流方向是从STM32传输给VS1003,主要传输给VS1003一些控制命令、MP3/WMA数据流等。

PA1:

低电平有效,如果拉低该引脚,那么通过SPI传输的是控制信号。

控制信号包括读写VS1003的内部寄存器、对VS1003进行初始化、设置左右声道音量等。

PA2:

低电平有效,如果拉低该引脚,那么通过SPI传输的是数据信号。

比如在向VS1003传输MP3/WMA的数据流时需要拉低该引脚。

PA0:

低电平有效,拉低该引脚则硬件复位VS1003。

2.3液晶显示模块设计

LCD3310芯片是一个48行84列的液晶显示器主要模块。

其内存带有低功耗PCD8544的CMOSLCD控制驱动器,串行输入速度最高可达4.0Mbits/S,而且所有必须的显示功能集成在一块芯片上,包括LCD电压及偏置电压发生器,所以LCD3310是一款低功耗的液晶显示器。

为了让LCD3310液晶能够显示4行12*12的汉字,系统开辟了一个6*84字节的缓冲区,要写液晶时,就不用直接写LCD3310的静态DDRAM了,可以先写系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容,LCD3310与主控制器是SPI接口方式。

 

3系统软件设计方案

3.1MP3播放器软件系统流程原理

系统启动后,先初始化硬件模块。

由MCU通过FAT32文件系统接口读取SD卡的一些基本信息,如容量、扇区大小、FAT表及根目录所在的启始扇区等。

通过获得这些信息后,就可以找出SD卡是否有我们可以播放的音乐文件。

若有音乐文件,微处理器将通过SPI总线方式读出该文件的音频信息,并将歌曲的码流信息送入到VS1003芯片中,通过VS1003芯片解码以及其内含的高质量的立体DAC和耳机驱动电路,实现MP3歌曲的播放功能。

在触摸键的控制下,通过LCD3310中菜单选项的选择,实现对歌曲选择及音量控制等功能;在播放的同时,LCD3310上显示的信息除歌曲名称信息外,还包括进度和音量等信息。

由于SPI1读取SD卡文件的速度远超过VS1003播放数据流的速度,因此VS1003在播放来自SPI2的数据流期间,SPI1能从SD卡中读取下次播放所需的数据,不会产生声音不连续的情况。

由于使用了2个SPI接口,相互之间无干扰,且提高了文件系统的效率,因此本系统能得到非常高品质的音乐。

如图6是MP3播放器的软件系统流程图。

下面介绍软件的核心模块。

(1)SD模块

SD模块主要提供SD卡驱动以及对FAT文件系统操作的函数,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卡的状态。

MSD_WriteBlock:

向SD卡写入1个块的数据。

MSD_ReadBlock:

从SD卡读取1个块的数据。

以下是函数MSD_ReadBlock的实现:

u8MSD_ReadBlock(u8*pBuffer,u32ReadAddr,u16NumByteToRead){

u32i=0;

u8rvalue=MSD_RESPONSE_FAILURE;

MSD_CS_LOW();  //拉低片选信号,选中SD卡

MSD_SendCmd(MSD_READ_SINGLE_BLOCK,ReadAddr,

0xFF);//发送读取块命令

//检测SD卡是否有返回信息,若是则返回0x00

if(!

MSD_GetResponse(MSD_RESPONSE_NO_ERROR)){

if(!

MSD_GetResponse(MSD_START_DATA_SINGLE_

BLOCK_READ)){ //等待数据令牌,标志数据传输开始

for(i=0;i

*pBuffer=MSD_ReadByte();//缓存收到的数据

 

图6软件系统流程图

 

pBuffer++;//缓存指针后移

}

rvalue=MSD_RESPONSE_NO_ERROR;//修改rvalue的值为成功

}

}

MSD_CS_HIGH();//拉高片选信号,禁用SD卡

MSD_WriteByte(DUMMY);//写无效字节,传输结束

returnrvalue;//返回

}

(2)fat16.c

该文件提供对FAT16文件系统的支持,主要包含以下函数。

ReadMBR:

读取MBR数据结构。

ReadBPB:

读取BPB数据结构。

ReadFAT:

读取文件分配表指定项。

ReadBlock:

读取SD卡的一个扇区。

FAT_Init:

获取FAT16文件系统的基本信息。

DirStartSec:

获取根目录的开始扇区号。

DataStartSec:

获取数据区的开始扇区号。

ClusConvLBA:

获取一个簇的开始扇区号。

LBAConvClus:

转换扇区号与簇号之间的关系。

GetFileName:

获取指定文件的首扇区号。

ListDateTime:

列出文件或子目录创建的时间日期。

SearchFoler:

在指定范围内查找文件或子目录。

ListDir:

列出指定范围内的文件或子目录及相关信息。

FAT_FileOpen:

打开指定文件。

FAT_FileRead:

读取文件数据。

(2)VS1003模块

VS1003模块主要提供对解码芯片VS1003的驱动,为应用层播放音频数据、控制音量声道等提供基本接口。

该模块主要含文件vs1003.c。

其主要函数的功能如下。

vs1003.c文件主要提供VS1003芯片的驱动,包含以下几个主要函数。

VS1003_Config:

配置STM32与VS1003连接的相关引脚,包括SPI2、PA0、PA1、PA2、PA3。

SPIGetChar:

通过SPI从VS1003读取1个字节。

SPIPutChar:

通过SPI向VS1003写入1个字节。

如果是MP3/WMA数据流,则VS1003将开始解码并播放。

Mp3ReadRegister:

读取VS1003寄存器的值。

Mp3WriteRegister:

写VS1003寄存器。

Mp3Reset:

VS1003复位,包括软件复位和硬件复位。

Mp3SoftReset:

VS1003软件复位,设置时钟、采样率、重音、音量、立体声等参数,一般在2首乐曲之间需要一次软件复位。

VsSineTest:

播放正弦声波,用于测试VS1003和STM32的连接是否完好。

                    

以下是VS1003音频解码芯片初始化的部分代码:

voidinit_vs1003()

{

vs1003_dir|=0X2C;

VS1003_xResetDIR|=BIT5;

printfs(“\n-----hard_reset----\

n”);

hard_reset;//硬件复位

delay_ms(10);

sotf_send_bit2(0XFF);

hard_set;

sotf_send_bit2(0XFF);

Wait_Vs1003_DREQ();

printfs(“\n-----soft_reset_vs1003-

---\n”);

soft_reset_vs1003();

printfs(“\n----vs1003initok----

\n”);

}

(3)图形人机交互模块(触摸屏支持库的安装)

网络MP3播放器搭载了一块触摸屏作为系统硬件的控制模块,有了触摸屏的支持,用户就可以通过点击图形人机交互界面中的窗体控件对播放器进行管理。

在设计播放器的图形人机交互界面之前,还需要一层应用程序库封装系统对底层触摸屏驱动的操作,将触摸控制以一个统一的接口提供给上层GUI应用程序使用。

该设计使用了tslib应用程序库来封装图形用户界面对底层触摸屏的操作。

tslib是一个开源的触摸屏支持库,它作为触摸屏驱动的适配层,为不同的触摸

屏提供了一个统一的接口。

tslib提供诸如滤波、去抖、校准之类的功能。

下图

7表示了tslib在本设计GUI系统中所处的层次结构。

 

图7层次结构图

tslib触摸屏支持库的安装与测试:

首先从tslib官方网站中下载tslib一1。

4。

tar。

gz源代码包进行编译,tslib的编译过程这里不再赘述了,其源代码文档中有详细地说明。

本设计将tslib安装

到宿主机/usr/local/tslib目录中,安装完成以后,在该目录中生成了bin、etc、

include、lib四个目录,其中,bin目录中保存了一些触摸屏的校验程序,etc

目录中保存了tslib相关的配置文件,lib目录中保存了tslib触摸屏支持库的库

文件。

①将tslib安装路径中的bin、etc、lib三个目录拷贝到目标机/usr/local/tslib目录中。

②修改其etc目录中的配置文件ts。

conf,讲触摸屏驱动模块参数的值设置为“module-raw-h3600”(对应目标机触摸屏设备/dev/h3600-tsraw)。

③修改tslib的环境变量,将其库文件的路径加入到系统环境变量中。

④执行tslib提供的触摸屏校验程序ts-calibrate,屏幕中出现了一个十字。

点击十字中心,程序会分别在左上,左下,右上,右下和中心依次出现五个小十字。

点击屏幕中的五点完成触摸屏校验,校验程序在/etc/pointercal文件里写入了校验结果,表明了本次tslib触摸屏支持库的安装成功了。

 

谢谢阅读!

!

!

随心编辑,值得下载拥用!

专业│专注│精心│卓越

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1