
课程设计论文基于FPGA的音乐播放器设计.doc
21页中国地质大学(武汉) 基于FPGA的音乐播放器设计 专 业 班 级 小组成员 指导老师 2015.06目录一、 实现功能 2二、 成员及任务分工 2三、详细设计及原理 31.系统硬件结构设计 32.程序流程 4四、 具体实现 51.SD卡文件系统的初始化 52.按键选歌模式 63.自动播放模式 74.快进、快退、播放/暂停功能 75.LCD显示歌曲名及歌词模块 86.LED显示功能 107.数码管显示当前曲目、总歌曲数和时间功能 11五、碰到的问题及解决过程 121.问题一 122.问题二 123. 问题三 134. 问题四 13六、运行效果 13七、设计小结 22一、 实现功能 1. 支持SD卡文件读取功能;2. 支持WAV格式音频功能;3. 支持歌词同步显示功能;3. 支持歌曲名称显示功能;4. 支持“播放/暂停”控制功能;5. 支持歌曲选择功能;6. 支持LED灯显示音量功能;7. 支持返回功能;8. 支持硬启动从ROM启动;9.支持数码管显示总歌曲数和第几首歌曲功能;10.支持数码管显示歌曲的播放进度功能;11. 支持LED灯指示拨码开关0~7状态功能;12. 支持前6首歌曲直接选择功能。
二、 成员及任务分工 姓名所做任务熟悉Nios II 系统开发流程,看懂原工程文件了解SD卡FAT文件系统大致的读写流程;格式化SD卡为FAT16格式并将.wav和.lrc文件复制到SD卡根目录下到实验室去测试原工程文件的硬件设置和软件功能测试软件功能,明确各个按键对应的功能一起讨论如何更改原来的功能,并添加新功能完成实验任务,分工书写课程设计报告 三、详细设计及原理1.系统硬件结构设计本设计采用DE2 开发板,充分利用NiosII 软核的特性,结合自定义用户组件、自定义用户外设在FPGA 中使用软核处理器的优势在于灵活高效,硬核实现没有灵活性,通常无法使用最新的技术而应用Nios II 软核处理器,开发者能够完全定制CPU 和外设,获得恰好满足需求的处理器,充分利用了Nios II 处理器灵活和高效的特性通过DE2 开发板上的SD 卡插槽,读取SD 卡上的音频数据后,送到音频编/解码器,对音质进行相关处理后输出,进行音乐的播放. SD 卡音乐播放是由NiosII 处理器通过软件完成的该音乐播放器主要分两种播放模式: 按键选歌模式和自动播放模式根据系统所划分的功能,处理器、音频设备、存储器、输入、输出和交互接口都必须选用硬件设备实现。
其中硬件部分如处理器用Altera公司的Nios II软核来实现,MP3音乐文件存储于外部的SD卡中,DE2开发板上有4个为用户预留的按钮可以用来输入,作为MP3播放器的功能键,输出可以使用开发板上的输出口来接音频设备,用户与开发板的交互可以使用开发板上RS-232串行口和JTAG口整个系统分为四个部分:CPU模块(包括外围配置芯片、扩展芯片等)、存储器(SD卡)模块、LCD显示模块、GPIO接口模块 图1 mp3播放器硬件整体框图2.程序流程 图2 程序流程图 对于MP3播放器来说,它应该在板子加电时自动加载到SRAM,然后到一个约定的地方读取音乐数据就可以了 本系统会播放几个音乐文件,所以MP3播放器就需要通过一个机制来管理或定位这些音乐文件,也就是通过一个文件系统管理功能的程序,让这个文件系统软件和MP3播放器配合使用 音乐文件的存放应该配合MP3音乐的播放,音乐文件的播放和显示通过文件系统获得相应的播放音乐文件的地址和相关信息,存储也应该符合系统文件的定义来存放也就是说文件系统是存放音乐和播放音乐的一个中间层,是音乐文件播放和音乐文件存放的一个默认标准,所以文件系统的结构定义是文件读取和存储的关键。
四、 具体实现1.SD卡文件系统的初始化 调用函数SD_card_init();(1)SD卡简介及FAT16文件系统构成介绍:SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备,不需要额外的电源来保持其上记忆的信息而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等2)FAT16文件系统构成 MBR区装有用于启动系统的代码和有关文件系统的重要信息; 在主引导扇区的末尾处含有分区表,分区表用于标识每个分区开始和结束的表项,最多可以有4个分区, 每个分区可以包含不同的文件系统分区引导扇区记录各个分区启动的引导程序FAT表记录SD存储卡以簇为单位进行记录的存储空间的信息,簇的大小根据实际系统的电子盘特性设定根目录区记录文件名和目录名 用户数据区用于存放用户数据及子目录 SD卡格式化时,系统采用了FAT16文件格式主引导区位于整个SD卡的0柱面0磁头,1扇区存放引导程序用于启动和引导操作系统,同时存放SD卡的主分区表,记录卡的分区信息。
在总共512字节的主引导记录中,MBR 的引导程序占了其中的446个字节(相对于扇区首地址的偏移量0H~1BDH),随后的64字节(偏移量1BEH~1FDH)为DPT(Disk Partition Table,硬盘分区表),最后的两个字节“55 AA”(偏移量1FEH~1FFH)是分区有效的结束标志FAT16文件系统最多支持4个分区项,对应于4个分区表在DPT部分共64字节中,以16字节为分区表项单位描述一个分区的属性在本系统能够SD卡只作为一种存储介质使用,且整个系统作为一个分区处理2.按键选歌模式(1) 进入按键选歌 当swit0为0,即无拨码开关置为‘1’时,LCD提示“Press key3 to choose a song”,按下KEY3 后,LCD先显示歌曲总数和歌词总数,继而显示当前所选歌名 LCD_Init(); LCD_Show_Text(title[0]); lcd_write_cmd(LCD_16207_0_BASE,0xC0); LCD_Show_Text(title[1]); while(1)//检测进入选歌界面 { key=IORD(BUTTON_PIO_BASE,0); key3=~key&0x08; if(key3) break; }(2)歌曲选择功能上一首 / 下一首功能分别由按键KEY2和按键KEY1实现,播放至最后一首歌时按KEY1按键则将播放第一首歌曲;直接选歌功能由拨码开关SW10~15实现,可选择第1~6首歌曲。
a代表当前为第几首歌,num_music为歌曲总数 key=IORD(BUTTON_PIO_BASE,0); key=~key&0x0e; key3=key&0x08; key2=key&0x04; key1=key&0x02; swit2=IORD(SWITCH_PIO_BASE,0); swit2=swit2&0xfc00; switch(swit2) { case 0x0400: a=0; break; case 0x0800: a=1; break; case 0x1000: a=2; break; case 0x2000: a=3; break; case 0x4000: a=4; break; case 0x8000: a=5; break; default: if(key1)a=(a+1)%num_music; else if(key2)a=(a+num_music-1)%num_music; break; }后一首 a=(a+1)%num_music; 前一首 a=(a+num_music-1)%num_music;(3) 确认选歌按下KEY3按键,确认当前所选歌曲,开始播放音乐。
if(key3) break;3.自动播放模式(1) 循环播放模式 else if(swi[0])//连续播放 { a=(a+1)%num_music; time(0,a+1,num_music);}当开关swi[0]拨动到‘1’位置时,为循环播放模式,播放下一首歌曲2) 单曲循环模式 else if(swi[1])//循环播放 { a+=0; time(0,a+1,num_music); //显示时间 }当开关swi[1]拨动到‘1’位置时,为单曲循环模式,循环播放当前歌曲3) 随机播放模式 else if(swi[2])//随机播放 { a=(num_lyrics+Tmp1+Tmp2+music[a].m_name[0])%num_music; time(0,a+1,num_music); //显示时间 } 当开关swi[2]拨动到‘1’位置时,为随机播放模式,随机播放歌曲4.快进、快退、播放/暂停功能(1) 快进 if(swi[4])//快进 { b=(b+4)%cluster_num; time(b*clupsec_num,a+1,num_music); //显示时间 usleep(20000); continue; } 当开关swi[4]拨动到‘1’位置时,b是第几个簇,执行b=(b+4)%cluster_num实现快进。
2) 快退 else if(swi[5])//快退 { b=(b+cluster_num-4)%cluster_num; time(b*cl。












