WAV播放器的设计与制作.docx
- 文档编号:7236689
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:30
- 大小:480.57KB
WAV播放器的设计与制作.docx
《WAV播放器的设计与制作.docx》由会员分享,可在线阅读,更多相关《WAV播放器的设计与制作.docx(30页珍藏版)》请在冰豆网上搜索。
WAV播放器的设计与制作
(2012届)
本科毕业设计(论文)资料
题目名称:
WAV播放器的设计与制作
学院(部):
电气与信息工程学院
专业:
电子信息工程
学生姓名:
班级:
电信
学号
指导教师姓名:
职称
最终评定成绩:
教务处
2012届
本科毕业设计(论文)资料
第一部分毕业论文
摘要
本课题研究的是基于WAV格式的播放器的设计与制作。
该课题涉及的技术主要有,SD卡读写、FAT32文件系统读写、TFT驱动显示、电阻式触摸屏驱动、WAV文件解码、IIS音频驱动。
对于WAV格式文件的解码采用的是软件解码的方式,在本次设计中已成功实现了对容量1G字节的SD卡的读写,且实现了对存在于SD卡中FAT32文件系统的文件的搜寻和读写,实现了WAV文件的软件解码并将解码后的PCM数据送进IIS接口输出经音频驱动IC播放,WAV解码采用了双缓冲区解码。
至于TFT驱动显示部分已成功实现汉字字库的移植显示和bmp文件的显示,在触摸屏方面,成功采用三点式校验法将触摸屏校准成功。
在本次设计中我采用了三星公司生产的ARM9处理器S3C2440A。
该处理器功耗低、性能高、指令执行速度快、寻址方式灵活简单、指令长度固定等优点。
WAV播放器由五个模块组成,分别是电源模块、MCU核心控制模块、音频驱动模块、SD卡模块和TFT及触摸屏模块。
关键词:
嵌入式,WAV播放器,SD卡,FAT32,TFT
ABSTRACT
Thistopicstudiestheplayer'sdesignandproductionbasedontheWAVformat.ThemaintechnologiesinvolvedinthissubjectarethereadingandwritingofSDcardandFAT32filesystem、thedriveranddisplayingofTFT、theresistivetouchscreendriver、WAVfiledecodingandIISaudiodriver.
Thedesignhasbeensuccessfullyrealizedthereadingandwritingofthecapacityof1GbyteSDcard,andachievedthesearching、readingandwritingofFAT32filesystem'sfileexistingintheSDcard.FilesearchandreadandwriteWAVfilessoftwaredecodinganddecodingPCMdataissenttotheIISinterfaceoutputbytheaudiodriverIC,playWAVdecoderusingdual-bufferdecoding.AtthesametimeithasachievedasoftwaredecoderoftheWAVfilesandsentthedecodedPCMdatatotheIISinterfacetoplay.TheWAVdecoderusesdual-bufferdecoding.InthepartofTFTdriveranddisplaying,itsuccessfullycompletesthetransplantationoftheChinesecharacterandtheshowofbmpfile.Inthetouchscreenrespect,Iusedthethree-pointcalibrationmethodtothetouchscreencalibration.
Inthisdesign,IusetheSamsungARM9processorS3C2440A.Thisprocessorhasmanymerits,suchaslowpowerconsumption,highperformance,fastinstructionexecution,flexibleandsimpleaddressingandthefixedinstructionlength.
WAVplayerhasavarietyofprogramstoachieve.Hereconsistsoffivemodules,respectivelyofthepowersupplymodule,MCUcorecontrolmodule,theaudiodrivermodule,SDcardmoduleandTFTtouchscreenmodule.
Keywords:
Embedded,WAV player,SD card,FAT3,TFT
第1章课题背景与目标任务
1.1课题意义及背景
随着人们收入水平的不断提高,物质生活的满足下,人们的精神生活越来越需要得到丰富。
音乐,作为精神生活很好的调剂与保养品,一直以来都受到人们的喜爱。
电子技术不断发展,各种消费电子都倾向于便携式,使得人们随时随地就能欣赏到美妙的音乐,音乐播放器,自然就成为了很多消费电子产品中的必备。
WAV文件是一种无损编码音乐文件格式,具有编码简单解码容易特点。
WAV文件里声音波形数据是经过PCM编码的,且这种编码形式在我们数字通信课程上也有学到,而充当解码的的核心控制处理器,也是我们所学课程嵌入式的内容。
这就很好的强化了我们所学知识,达到了学以致用目的。
1.2目标任务
(1)了解WAV播放器的结构和工作原理;
(2)了解SD卡的结构和开发技术;
(3)掌握单片机应用系统的设计和开发方法;
(4)画出系统硬件电路图;
(5)编写系统软件程序。
1.3研究思路与方案
WAV播放器有很多种方案实现,在这里我们由五个模块组成,分别是电源模块、MCU核心控制模块、音频驱动模块、SD卡模块和TFT及触摸屏模块组成。
(1)电源模块由5VDC电源提供,也可充电式锂电池提供,然后经稳压芯片提供给各个模块相应的电压;
(2)MCU核心控制模块也可以有很多选择,但选用普通的51单片机且没有专用解码芯片的话,对高音质的音乐文件进行解码播放的话就会显得力不从心了。
在这里我采用三星公司的ARM9处理器S3C2440A;
(3)音频驱动模块则选用现在应用很广的驱动芯片UDA1341TS;
(4)至于SD卡模块则是一固定的SD卡座电路;
(5)TFT及触摸屏模块采用东华液晶显示公司的3.5寸屏WXCAT35-TG3#001F。
第2章系统设计
2.1系统框图
图2.1整体框图
2.2硬件设计
由于硬件制作难度较大,且单套制作成本高,为完成系统设计的验证决定采用广州天嵌计算机科技有限公司的TQ2440开发板。
该开发板分由两块板组成,分别为核心板和底板,核心板为一最小系统板,板载三星S3C2440A处理器,带有2M字节的NorFlash和64M字节SDRAM以及256M字节的NandFlash存储器,所有可用I/O均用排针引出。
底板则附带有很多外设接口,像TFT触摸屏接口、摄像头接口、音频接口、串口通讯接口、SD卡接口、100M网络接口、USB主机接口和USB设备接口等。
在本系统中只用到TFT触摸屏接口、音频接口和SD卡接口
2.2.1核心板接口设计
核心板接口电路仅是把处理器S3C2440A的I/O引脚引出至底板,并没什么复杂的电路,在设计中我们要根据处理器的I/O引脚功能来分配管脚,由于这里我们是采用现成的开发进行二次设计,因此在这里我们就玩需担心这个,只需注意NorFlash和SDRAM的地址起始地址和结束地址范围,以及启动方式选择引脚。
图2.2核心板接口电路图
2.2.2电源模块设计
由于对电流的要求较小,为节约设计时间与成本,提高可靠性,电源可以采用集成电路实现。
因此电源模块电路的设计其实就是三端稳压集成电路的运用,在这里我们采用AS1117AR-3.3三端稳压器,前端输入电压为直流电压,电压范围为4.7V-10V,输出为3.3V。
同时设计了电池与直流电源无扰切换供电模式,如果电池为可充电电池时,则在供电的同时还可以通过直流电源对其充电。
如果为非充电电池则要去掉二极管D3。
当接上直流电源时二极管D1截止,此时系统由直流电源直接供电,且当电池电量低时,D3导通,直流电源对电池进行充电,当充电充满时D3截止;当无直流电源供电时,D1导通,电池向系统供电。
图2.3电源模块电路图
2.2.3音频驱动电路设计
音频电路则是采用PHILIPS公司生产的一款应用很广的芯片UDA1341TS,该芯片即可对声音数据进行还原还可以
图2.4音频电路图
2.2.4TFT触摸屏电路设计
TFT触摸屏电路采用的是TFT标准电路,由于不同TFT屏的电压不同,在这里用一个2*2排针通过短路帽进行选择。
其余引脚的功能见表2.1。
图2.5TFT接口电路图
表2.1LCD接口引脚功能表
引脚号
引脚名
作用
1
LED_VDD
背光电源
2
VDD
TFT主电源
3
VD0
蓝色数据最低位
4
VD1
蓝色数据第二位
5
VD2
蓝色数据第三位
6
VD3
蓝色数据第四位
7
VD4
蓝色数据第五位
8
VD5
蓝色数据第六位
9
VD6
蓝色数据第七位
10
VD7
蓝色数据最高位
11
GND
LED电源地
12
VD8
绿色数据最低位
13
VD9
绿色数据第二位
14
VD10
绿色数据第三位
15
VD11
绿色数据第四位
16
VD12
绿色数据第五位
17
VD13
绿色数据第六位
18
VD14
绿色数据第七位
19
VD15
绿色数据最高位
20
GND
TFT主电源地
21
VD16
红色数据最低位
22
VD17
红色数据第二位
23
VD18
红色数据第三位
24
VD19
红色数据第四位
25
VD20
红色数据第五位
26
VD21
红色数据第六位
27
VD22
红色数据第七位
28
VD23
红色数据最高位
29
GND
地
30
LCD_PWR
LCD电源控制
31
I2CSDA
串行数据输入
32
I2CSCL
串行接口时钟
33
VM
数据使能信号
34
VFRAME
帧信号
35
VLINE
行信号
36
VCLK
数据时钟
37
TSXM
触摸屏横向端点
38
TSXP
触摸屏横向端点
39
TSYM
触摸屏纵向端点
40
TSYP
触摸屏纵向端点
2.2.5SD卡电路设计
SD卡电路则是一标准的接口电路,SD卡接口电平范围为2.0V-3.6V,由于我们所用处理器I/O引脚电平为3.3V所以刚好兼容只需对接口引脚加入上拉电阻,若不兼容必须进行电平转换。
电平转换则可采用电平转换IC。
图2.6SD卡电路图
2.2.6整体电路图
图2.7整体电路图
2.3软件设计
软件部分设计是本次设计的核心部分,主要由SD卡读写函数模块、FAT32文件系统读写函数模块、WAV文件解码模块、IIS音频驱动函数模块、TFT显示及触摸屏读取模块组成,由于程序量巨大,因此在本文中不会列出源码,下文的设计中只会说明如何软件编写流程,只要熟悉了这些流程后就可以编写出代码。
主流程图如下:
图2.8主程序流程图
2.3.1SD卡读写函数模块
要对SD卡进行正确读写就必需了解SD卡协议,其中对SD卡指令的熟悉是一个很重要的部分。
SD卡的指令被封装成48位的数据包,每次传送这48位的数据包。
数据包的内容包括起始位、结束位、传输位、命令索引、传输参数和7位CRC校验码。
其具体格式分布如下表。
表2.2SD卡指令格式表
Bit位置
47
46
[45:
40]
[39:
08]
[07:
01]
00
Bit宽度
1
1
6
32
7
1
值
“0”
“1”
x
x
x
“1”
说明
起始位
发送标志位
命令
参数
CRC7
结束位
表2.3SD卡指令说明
CMD
简略语
指令说明
0
GO_IDLE_STATE
这是使card初始化到Idle状态的指令。
CS信号设在Low的状态时,接到本指令后,card将转换到SPI模式
1
SEND_OP_COND
接到本指令后,card将做R3回应(含有OCR数据).根据OCR值,可以得知card能工作电压范围.OCR数据最高值位的1bit是用来确认card内部处理是否结束(Ready/Busy轮询).
2
ALL_SEND_CID
接到本指令后,处于Ready状态的card将传送CID数据.在MMC模式下,数据被送到CMD信号,在CID数据的每1bit传送后,CMD信号状态将与该card内部状态相比较,如果不一致,將中止数据传送,card返回到Ready状态.如果相一致,该card将认为已被选中,然后转换到Identification状态.
3
SET_RELATIVE_ADDR
本指令会为已转换到Identification状态的card分配一个相对card地址(RCA).当RCA分配后,card将转换到Stand-by状态,对以后的CMD2和CMD3不回应.
4
NOP
这是用来设定DSR(DriveState寄存器)的指令,但是本car不支持DSR.
7
SELECT/DESELECT_CARD
本指令是用来选择一张card,让它在Stand-by状态和Transfer状态之间转换的指令.如果给card设定已分配到的RCA地址,card将从Stand-by状态转换到Transfer状态,并将回应以后的读取指令及其他指令.如果给card设定RCA以外的地址,card将转换到Stand-by状态。
当RCA=0000h时,card将无条件地转换到Stand-by状态.
9
SEND_CSD
接到本指令后,将传送CSD数据.
10
SEND_CID
接到本指令后,将传送CID数据.
11
READ_DAT_UNTIL_STOP
接到本指令后,将从设定的地址传送P2ROM数据,直到接到指令CMD12为止.
12
STOP_TRANSMISSION
本指令强行终止CMD11和CMD18的处理
13
SEND_STATUS
接到本指令后,将传送状态寄存器的信息.
15
GO_INACTIVE_STATE
接到本指令后,将转换到休止(inactive)状态.
16
SET_BLOCKLEN
本指令用来设定Block长度.对象是以后的指令CMD17和CMD18.
17
READ_SINGLE_BLOCK
接到本指令后,将从自变量设定的地址传送1个block长度的数据.(block长度由指令CMD16设定).
18
READ_MULTIPLE_BLOCK
接到本指令后,将从自变量设定的地址连续传送block长度的数据,直到接到指令CMD12为止.(block长度由指令CMD16设定).
23
SET_BLOCK_COUNT
本指令是给紧跟的指令CMD18设定要传送的block数量.
24
WRITE_BLOCK
接到本指令后,将写1个block长度的数据到自变量设定的地址.(block长度由指令CMD16设定).
25
WRITE_MULTIPLE_
BLOCK
接到本指令后,将连续写block长度的数据到自变量设定的地址,直到接到指令CMD12为止.(block长度由指令CMD16设定).
58
READ_OCR
接到本指令后,Card将传送OCR数据.
59
CRC_ON_OFF
本指令是用来设定CRC选项为ON或OFF.在SPI模式下,CRC的初始值设定为OFF.[CRC选项[bit=1]表示CRCON;[CRC选项[bit=0]表示CRCOFF.
SD卡有两个可选的通讯协议:
SD模式和SPI模式。
SD模式下传输速度比SPI模式快,由于我们采用的处理器S3C2440A带有SD卡控制组件,因此我们使用SD卡模式。
下面列出读写流程图。
图2.9SD卡读写流程图
2.3.2FAT32文件系统读写函数模块
SD卡读写部分最终是完成SD卡的扇区读写进而为FAT32文件系统服务,FAT32文件系统包含四个部分。
1、保留扇区
位于最开始的位置。
第一个保留扇区是引导区(分区启动记录)。
它包括一个称为基本输入输出参数块的区域(包括一些基本的文件系统信息尤其是它的类型和其它指向其它扇区的指针),通常包括操作系统的启动调用代码。
保留扇区的总数记录在引导扇区中的一个参数中。
引导扇区中的重要信息可以被DOS和OS/2中称为驱动器参数块的操作系统结构访问。
2、FAT区域
它包含有两份文件分配表,这是出于系统冗余考虑,尽管它很少使用,即使是磁盘修复工具也很少使用它。
它是分区信息的映射表,指示簇是如何存储的。
3、根目录区域
它是在根目录中存储文件和目录信息的目录表。
在FAT32下它可以存在分区中的任何位置,但是在早期的版本中它永远紧随FAT区域之后。
4、数据区域
这是实际的文件和目录数据存储的区域,它占据了分区的绝大部分。
通过简单地在FAT中添加文件链接的个数可以任意增加文件大小和子目录个数(只要有空簇存在)。
然而需要注意的是每个簇只能被一个文件占有,这样的话如果在32KB大小的簇中有一个1KB大小的文件,那么31KB的空间就浪费掉了。
保留扇区在FAT32文件系统中非常重要,其主要信息如下表
表2.4保留扇区结构表
介绍了保留扇区后接下来就是FAT表区了,FAT表与存储器各簇一一对应,即该存储器有多少扇区则FAT表就有多少项,对于FAT32文件系统每个表项为32Bit。
对于大文件,需要分配多个簇。
同一个文件的数据并不一定完整地存放在磁盘中一个连续区域内,而往往会分成若干段,像链子一样存放。
这种存储方式称为文件的链式存储。
为了实现文件的链式存储,文件系统必须准备地记录哪些簇已经被文件占用,还必须为每个已经点用的簇指明存储后继内容的下一个簇的簇号,对文件的最后一簇,则要指明本簇无后继簇。
这些都是由FAT表来保存的,FAT表的对应表项中记录着它所代表的簇的有关信息:
诸如是否空,是否坏簇,是否已经是某个文件的尾簇等。
以下为FAT16文件系统的FAT表结构
表2.4保留扇区结构表
图3.0FAT32文件读写流程图
2.3.3WAV文件解码模块
IIS接口只接受PCM数据,因此我们必需从WAV文件中解码出PCM数据出来,这就需要要了解WAV文件的格式。
WAV全称是WAVE, WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文ResourceInterchangeFileFormat的缩写,每个WAVE文件的头四个字节便是“RIFF”。
WAVE文件是由若干个Chunk组成的。
按照在文件中的出现位置包括:
RIFFWAVEChunk,FormatChunk,FactChunk(可选),DataChunk。
具体见下图:
图3.1WAVE格式框图
每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。
并且紧跟在ID后面的是Chunk大小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节表示数值低位,高字节表示数值高位。
下面具体介绍各个Chunk内容,在编程中可根据下表建立相应的结构体。
表2.4RIFFWAVEChunk结构
项目
所占字节数
内容
ID
4字节
‘RIFF’
SIZE
4字节
根据文件大小而定
TYPE
4字节
‘WAVE’
表2.5FormatChunk结构
项目
所占字节数
内容
ID
4字节
‘fmt’
SIZE
4字节
数值为16或18,18则最后又附加信息
FormatTag
2字节
编码方式,一般为0x0001
Channels
2字节
声道数目,1--单声道;2--双声道
SamplesPerSec
4字节
采样频率
AvgBytesPerSec
4字节
每秒所需字节数
BlockAlign
2字节
数据块对齐单位(每个采样需要的字节数)
BitsPerSample
2字节
每个采样需要的bit数
2字节
附加信息(可选,通过Size来判断有无)
表2.6FactChunk结构
项目
所占字节数
内容
ID
4字节
‘fact’
SIZE
4字节
数值为4
Data
4字节
根据软件而定
表2.7DataChunk结构
项目
所占字节数
内容
ID
4字节
‘data’
SIZE
4字节
根据文件大小而定
Data
根据文件大小而定
PCM数据
表2.8PCM数据存放结构
声道
样本1
样本2
8位单声道
0声道
0声道
8位立体声
0声道(左)
1声道(右)
0声道(左)
1声道(右)
16位单声道
0声道低字节
0声道高字节
0声道低字节
0声道高字节
16位立体声
0声道(左)低字节
0声道(左)高字节
1声道(右)低字节
1声道(右)高字节
根据上表各个Chunk的结构就可取出WAV文件的PCM数据,但是又有一个问题出现了WAV音乐文件一分钟大约10M左右,一般的音乐都有3-4分钟长的甚至上十分钟,如果一次性解码一个文件那就需要很大的运行内存,同时文件越大预解码时间就会越长,这显然不是我们想要的结果,因此在这里我们采用双缓冲区解码方式。
我们设立两个缓冲区,每个缓冲区有不同的状态,分别为解码状态、播放状态、解码完毕状态、播放完毕状态。
刚开始将缓冲区初始化为播放完成状态,开始对WAV文件进行解码,当一个缓冲区放满之后转向下一个缓冲区解码,解码完成后等待播放,同时不断的查询有无播放完毕,如播放完毕则继续解码WAV文件至缓冲区。
同时播放时也会查询数据有无解码完毕,如没有解码完毕则等待解码。
2.3.4IIS音频驱动函数模块
S3C2440A处理器自带有IIS组件,再加上DMA可以很容易的将音乐数据送入外围器件,流程图如下:
图3.2音频驱动流程图
2.3.5TFT显示及触摸屏读取模块
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WAV 播放 设计 制作