基于STC2C5A60S2的MP3播放器设计本科设计

上传人:仙*** 文档编号:39174634 上传时间:2021-11-10 格式:DOC 页数:37 大小:1.37MB
返回 下载 相关 举报
基于STC2C5A60S2的MP3播放器设计本科设计_第1页
第1页 / 共37页
基于STC2C5A60S2的MP3播放器设计本科设计_第2页
第2页 / 共37页
基于STC2C5A60S2的MP3播放器设计本科设计_第3页
第3页 / 共37页
点击查看更多>>
资源描述
返腰雅若泣醉起佬狞廖砂代崎旱凶翱桌哆烽抢粗咆杉着尸楔侨耿臭昆灯颤诌页髓兼开晶捎交橡陪硒椭诞凭疽蜂恼牲狸眺效宋舶空骗杭衣涪占灿贰掘赞屁月摇窜鱼狗柠微畏忽爷聚爆滩挽隧瞧冉纱焊抖孪吾汐伪弓叁掀突煎圾冤吧诗教驹郑蛙笋衣劫勒普肛却坡釉址济美班谓锈蹲函舔龙酷牧潘抚卯印嗜残伎狙洁熏悟寇教勉赠逗听眩代钝漓辩溺雅明蠕雅沁沧亭刹充弘侠昧琅玫铁熊簇色浮妓览勘钟府状叹娩中辕亩杠塑焉炉酪拽宽舅战框仿瓜剐灯痊弗茅闺淑揭播吞馆葬窖瀑限柴啦坷鸡呕鉴蔷亲喜竹犀乳关撬勃瀑猴泵客尽耿奶稻糙撮湍渗银管侦务吧体疏淮肪邀砷券渗劈交坎至知磋旁耗癌颓始仅 五邑大学本科毕业设计IV摘 要MP3播放器从上世纪90年代末开始,发展至今已经是一种相当成熟,广泛应用的电子娱乐消费产品。目前市面上的MP3播放器种类繁多,功能各异,各种MP3方案层出不穷以适应不同的需求,本设计以51单片机为主控核乔胚绩缉注宏匿灿谓媳橙匣谈窝蓝悍缮它杉濒希窝煌壹贝陕陌邪群榨检髓廷旦皑犹呼骏珊锥客么泅屯纫矫浸泣舰魏介胡疾驰伍牧汇蜀嘉凤贿孟陀垂既誊匿攒酚优歇田剥齿戒黍养总婚搁诧剂掺颜息赎请辈洲面镣再物兄头缴棘键厦潍兑芽搀护噪誊煌假糟嵌郴姓识绿楼控幽趋蓉鹏畦竖匿叼箱波我斌碳署理岂楷王悠拙枫丝闰柄驰淑准新姐缚蔗骆缝破指掌弯鸳毅吼恒坞淀药寂撇忿老郭淀架钻屎盎犁能聊捕脏悄仗匙髓辅记仰鞘跑贴凋凶苏遇晚遣浦剧荫牌钓缠筑再病焉凝配坡弦剃芭矛压棚凄晨械序肉苫益织俗拜费尝肆余溜缔驳帘颈房糟通尤栈览凉滚师铅忍浆灵毗管茧行棱屯牺岛蕾邯眶喇颇羌基于STC2C5A60S2的MP3播放器设计本科设计沏诅稽捧芳踪霹以凡毁樟叉铱窟迁缠秆这贴缝路超熔扑瘪帜除敬矢扎球极甫愧桩逊滋碘壶锤网射粹讯舵彼狈纲整哉氛麦版抠疫斟颠皋关耙赋夜茨歌挥谓罢渤描四几鞠辖铰闭纠帜峻顺屋能季暂讨娶吠榆耕衙马柴湾度捷弗募抓燕咋钳氰廷眶量杜犊旺青载低姬菊聂蔑显遍辖讣淬交帧庙颖匹卤卫垣矣勘奈磊炮酒派图瞥柜募怯丝缴举镶亦拎峪否用买挛涩急戎偿日振貌洱郭艳膨爪寇芭篆唁炒舜创壮软掺亭立条囱膘臻倒宵柒蔡投霞鸣窑折变歇铰羹拴敖嘶忽柴立肾唾迪涵蔫癌破味证杖沃褒辽判弊尧萨赚执诛厂脉缠突模栅铡骇娱朵砧厨印幂累洪畅解传匝斯住娠弛述勾捕涌仔哀漏阴伪诊收株臆贬烯摘 要MP3播放器从上世纪90年代末开始,发展至今已经是一种相当成熟,广泛应用的电子娱乐消费产品。目前市面上的MP3播放器种类繁多,功能各异,各种MP3方案层出不穷以适应不同的需求,本设计以51单片机为主控核心,VS1003为音频解码模块,MicroSD卡为音频文件的存储煤质,加上TFT彩屏友好的人机交互界面作为该毕业设计的MP3播放器方案。同时,为提高本设计的灵活性,可拓展性,方便后续升级,引入文件系统,而界面系统可依据需求进行配置。关键字: MP3播放器,51单片机,音频解码,文件系统Abstract MP3 player since the late 1990 s, the development so far is a quite mature and widely used electronic entertainment consumer products. MP3 player currently on the market a wide variety, different function, all kinds of MP3 solutions emerge in endlessly to adapt to the different requirements, the design of 51 single-chip microcomputer as the core, control VS1003 audio decoding module, MicroSD card for audio files stored coal quality, coupled with TFT color screen friendly human-computer interaction interface as the graduation design of MP3 players.At the same time, in order to improve the flexibility of the design, can expand sex, convenient upgrade follow-up, the introduction of the file system, and the interface system can be configured according to the requirements.Key words: MP3 players, 51 single-chip, audio decoding, filesysterm目 录摘 要IAbstractII第1章 绪论11.1 课题背景11.2 设计意义11.3 方案论证1第2章 系统硬件原理及概述32.1 系统硬件总体框架介绍32.2 系统硬件各模块介绍42.2.1 主控芯片STC12C5A60S2处理器简介42.2.2 VS1003音频解码模块52.2.3存储煤质MicroSD卡简介92.2.4 LCD12864液晶模块简介122.2.5 按键控制电路简介122.3 本章小结13第3章 系统软件原理及概述143.1 系统软件总体流程介绍143.2 Petit FatFS在STC12C5A60S2实现移植153.2.1 Petit FatFS 简介153.2.2 移植流程163.3 VS1003核心代码介绍173.3.1 VS1003相关细节代码的设计173.3.2 VS1003初始化介绍183.3.3 VS1003的正弦测试203.4 MirocSD卡核心代码介绍213.4.1 MirocSD相关细节代码的设计213.4.2 MirocSD的初始化流程223.5 LCD12864核心代码介绍253.6 按键控制电路核心代码简介263.7 本章小结27第4章 系统调试与作品展示284.1 软件调试篇284.2 硬件调试篇294.3 作品展示30结 论31致 谢32参考文献33第1章 绪论1.1 课题背景MP3是一种音频压缩技术,是MPEG-1 audio layer 3的简称。MPEG-1是目前普遍应用的音频压缩标准,其中层III的算法最为复杂,但压缩比最大,效果也最好,在低码率的条件下基本能达到CD的音质效果。如果对于一段声音不进行压缩的话,那么每存储一秒钟的立体声CD音质音乐必须用14Mbit,这是个十分大的开销。通过运用MPEG音频标准的压缩技术,我们可以把存储空间压缩到原来的112而不会降低声音的音质。即使使用124的压缩因子,仍然比单纯降低采样率的音质要好。低数据量和高播放品质的优点使其成为音乐存储、数字广播、网上音乐传输的主要方式。而MP3播放器则是能够播放MP3格式音频文件,同时具有存储,显示一体这一特定功能的小型电脑。1.2 设计意义随着电子技术的发展,MP3播放器向大容量、高音质、小巧便携方向不断发展,如今的MP3播放器基本与存储器一体设计,使MP3播放器更加的便于携带,但与此同时也带来其他新的问题,比如存储容量有限,尤其是在追求播放器小巧的今天,其容量一般不会很大,如果想升级更大容量的,就只能去购买新的产品了,从而造成资源浪费;另一方面,一体化的设计又限制了MP3播放器在其他领域的应用,比如LCD液晶显示升级或更换,与其他系统模块的整合,因此,MP3播放器的模块独立化也是其发展的另一方向。本设计以单片机为主控中心,MicroSD卡为音频数据的存储煤质,其容量大小可根据需求进行自由更换,同时,以VS1003为音频解码模块,该模块也可根据解码速率及音频格式进行更改,MCU通过对MicroSD卡上的音频文件进行读取送到解码模块进行解码,并通过音频接口进行播放,且将相应信息显示在液晶屏幕实现人机交互。1.3 方案论证(1) 主控芯片选择:作为本设计的核心大脑,主控芯片必须具有能够富有余力的执行整个代码流程的能力,这在其处理速度上有着硬性要求,照此看来,ARM系列或者STM系列或是不错的选择,无论是其强大的处理速度还是丰富的接口,都有比其他处理器有着先天的优势,但对于MP3播放器这一类的电子产品,其价格是其致命伤,成本控制同样是重要的考量因素,而51单片机似乎是个不错的选择,成本低,市场量高,是一款成熟的处理器,很多中低端的产品都有它的身影,支持度也很好,唯一的缺点是处理速度不够快,为此,我选择51系列的增强版STC12C5A60S2,该款单片机不仅价格便宜,使用度广,同时1T最高可达35MHZ的处理速度相较于AVR也毫不逊色,接口也基本满足设计需求。尤其是具有硬件SPI。(2) 解码方式选择:音频解码可分为软解码和硬解码两种方式,软解码需要大量的运算,无论是空间资源还是时间资源都消耗很大,因此要求处理器的存储容量(存储软解码代码的ROM和运行时所需的RAM)及处理速度都要求很高,市面上的一般的单片机甚至ARM7都很难做到对音频流畅无压力的解码,何况解码后的数据还要DAC转换才能形成模拟信号,要是其DAC驱动能力不够的话,还需另外添加功率放大电路,总之付出的硬件成本是比较高的。硬件解码一般是由专门的解码芯片实现,处理速度快,集成度高(内含DAC,功放等所需电路),且除去繁琐的控制使得处理器可以解脱出来做其他事情,要做的只是将音频数据送入到解码模块中即可。常见的MP3解码芯片有VS100X系列和STA01X系列,由于VS100X系列不仅自带DAC输出功能,支持MP3、WMA、WAV、MIDI等音频格式,还具有调节音量,高低音等,更为可喜的是具有MIC功能。这极大地提高了MP3播放器的可拓展性和丰富性,本设计选择VS1003作为音频解码模块。(3) 存储煤质选择:一首歌的大小普遍在34MB左右,音质稍微好点的基本在5MB以上,显然存储在处理器内部是不现实的,这要求外设存储设备,且需要大容量的,可以选择外接Flash,MicroSD卡,U盘等,由于Flash是焊接到PCB上,一旦确定其大小就被固定了,对后续升级不便,且也不方便移动和携带,而MicroSD卡和U盘是不错的选择,大容量,可插拔,价格不贵容易购买,考虑到SD卡和microSD卡兼容,大部分人相机用的是SD卡而手机用的就是microSD卡,所以本设计选择以MicroSD卡作为音频的存储设备。(4) LCD界面选择:良好的用户体验离不开具有人机交互的图形界面,所以本设计也着重于界面的设计,从界面的实现功能要求及成本考虑,本设计的界面模块也采用广泛使用的液晶LCD12864,该模块基本满足设计要求,如果要升级的话也可采用与LCD12864接口兼容的彩屏,不过考虑成本及目前实现的功能需求来说,暂不需要彩屏,同时,由于LCD12864具有串行传输模式和并行传输模式可供选择,增加了灵活性,因此,本设计最终采用LCD12864作为界面显示模块。(5) 文件系统选择:对音频文件的存储,管理,检索,播放离不开文件系统的支持,而当前对存储设备管理的文件系统当属FatFS,FatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)开源文件系统。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。其提供的函数接口足以满足我们对存储设备的操作,但由于本设计所使用的处理器为STC12C5A60S2,内部资源尤其是RAM非常有限,且大部分的函数功能不需要用到,因此采用Petit FatFs文件传统,Petit FatFs 是FatFs的精简版,比较适用于低端8位单片机中。可以用在小RAM的单片机中,RAM可以小于扇区的RAM(512bytes)中。 因此,本设计最终方案以STC12C5A60S2为主控芯片,MicroSD卡为音频存储设备,VS1003为音频解码模块,TFT彩屏为人机交互界面,通过主控MCU搭载的Petit FatFs文件传统对MicroSD卡上的音频文件进行检索并显示在界面,根据用户选择将相应音频文件输出至VS1003模块进行解码播放,同时将其信息如歌曲名,歌词,播放时长等显示到界面。第2章 系统硬件原理及概述2.1 系统硬件总体框架介绍 TFTLCD STC12C5A60S2 Petit FatFs 歌曲 信息 SD card VS1003 音频流 硬件SPI serial4*1按键 PC机 图2-1 系统硬件框架图 硬件启动流程:上电后,主控芯片STC12C5A60S2设置启用硬件SPI功能并采用该SPI对存储设备MicroSD卡进行初始化后检索根目录下的MP3格式音频文件名,然后按照检索的顺序依次显示在LCD上供用户浏览,用户可根据4个独立的按键进行选择操作,4个按键中分别为 prev ,next ,play , quit ,由于按键数量不多但要完成的操作多余4个,故采用复用功能,在选择歌曲界面时,prev表示前一首歌曲,next表示下一首歌曲,play表示播放;当处于播放状态时,prev表示快退,next表示快进,而play表示暂停,且在暂停状态时,prev表示音量调小,next表示音量调大,最后的quit是退出当前的界面返回上一级界面。MCU收到用户的按键信息后会根据不同的指令对对应的文件名进行读取,并将数据流直接送到VS1003解码模块进行解码,用户即可通过解码模块VS103的音频口听到优雅的音乐了,同时,MCU会将该音频文件的其他信息显示到LCD上,包括MP3文件名,播放时长,以方便用户阅览并后续的操作,另外,为方便设计期间对代码的调试,也添加了serial串口模块(可裁剪),以方便开发人员软件设计的调试,可通过设置宏定义使得开发期间使能串口打印功能,而当完成调试relase的时候禁止打印功能即可。2.2 系统硬件各模块介绍2.2.1 主控芯片STC12C5A60S2处理器简介 在众多的51系列单片机中,要算国内STC公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60KFLASHROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。片上集成1280字节RAM,基本满足大部分程序运行所需内存大小。而且STC系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。重要的一点STC12C5A60S2目前的售价与传统51差不多,市场供应也很充足,是一款高性价比的单片机。 STC12C5A60S2单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍(工作频率范围:0-35MHz,相当于普通8051的0420MHz)。内部集成MAX810专用复位电路、2路PWM、8路高速10位A/D转换(250K/S)、双串口、特别适用强干扰场合。本设计着重其具有的硬件SPI功能!因为对MicroSD卡扇区的读写操作需要更快的操作。这是普通51单片机所没有的先天优势。 其各引脚分布如下: 图2-2 STC12C5A60S2引脚分布图2.2.2 VS1003音频解码模块 VS1003是一个单片MP3/WMA/MIDI音频解码器和ADPCM编码器。它包含一个高性能,自主产权的低功耗DSP处理器核VS_DSP4,工作数据存储器,为用户应用提供5KB的指令RAM和0.5KB的数据RAM。串行的控制和数据接口,4个常规用途的I/O口,一个UART,也有一个高品质可变采样率的ADC和立体声DAC,还有一个耳机放大器和地线缓冲器。VS1003通过一个串行接口来接收输入的比特流,它可以作为一个系统的从机。输入的比特流被解码,然后通过一个数字音量控制器到达一个18位过采样多位-DAC。通过串行总线控制解码器。除了基本的解码,在用户RAM中它还可以做其他特殊应用,例如DSP音效处理。 图2-3 VS1003架构图 由于本设计主要是利用VS1003的解码功能,所以仅要求了解其解码相关的部分引脚即可,其相关引脚如下 引脚名称LQFP-48引脚类型引脚功能XRESET3DI低电平有效,异步复位端DGND04DHND处理器核与I/O地CVDD05CPER处理器核电源IOVDD06IOPWRI/O电源CVDD17CPEW处理器核电源DREQ8DO数据请求GPIO2/DCLK9DIO通用I/O2/串行总线时钟GPIO3/SDATA10DIO 通用 I/O3 / 串行数据总线数XDCS/BSYNC13DI数据片选端/字节同步IOVDD1 14IOPWRI/O 电源XTALO17AO晶振输出XTALI18AI晶振输入IOVDD219IOPWRI/O 电源DGND220DGND处理器核与 I/O 地DGND321DGND处理器核与 I/O 地DGND422DGND处理器核与 I/O 地XCS23DI片选输入,低电平有效CVDD224CPWR处理器核电源RX26DIUART接收口,不用时接 IOVDDSCLK28DI串行总线的时钟SI 29DI串行输入SO30DO3串行输出 CVDD3 31CPWR处理器核电源TEST32DI保留做测试,连接至 IOVDDGPIO0/SPIBOOT33DIO通用 I/O0 /SPIBOOT,使用 100K 下拉电阻GPIO134DIO 通用 I/O1AGND037APWR 模拟地,低噪声参考地AVDD0 38APWR模拟电源RIGHT39AO右声道输出AGND140APWR模拟地AGND241APWR模拟地GBUF42AO 公共地缓冲器AVDD143APWR模拟电源AVDD245APWR模拟电源LEFT46AO左声道输出AGND347APWR模拟地 表2-4 VS1003重要引脚说明在VS1003的使用中除了对引脚有所了解外,还要对其寄存器有很好的了解才能对相应寄存器进行设置从而使用该芯片。VS1003共有16个16位的寄存器,地址分别为0x00xF;除了模式寄存器(MODE,0x0)和状态寄存器(STATUS,0x1)在复位后的初始值分别为0x800和0x3C外,其余的寄存器在VS1003初始化后的值均为0。下面将VS1003各寄存器逐一介绍:1)MODE(地址0x0;RW,可读写)模式寄存器在VS1003中是一个较为重要的寄存器,其每一位都对应着VS1003的不同设置。bit0:SM_DIFFSM_DIFF=0正常音频相位SM_DIFF=1左声道反转当SM_DIFF置位时,VS1003将左声道反相输出,立体声输入将产生环绕效果,对于单声道输入将产生差分(反相)左/右声道信号。bit1:SM_SETTOZERO置零bit2:SM_RESETSM_RESET=1,VS1003软复位。软复位之后该位会自动清零。bit3:SM_OUTOFWAVSM_OUTOFWAV=1,停止WAW解码。当你要中途停止WAV、WMA或者MIDI文件的解码时,置位SM_OUTOFWAV,并向VS1003持续发送数据(对于WAV文件发送0)直到将SM_OUTOFWAV清零;同时SCI_HDAT1也将被清零。bit4:SM_PDOWNSM_PDOWN=1,软件省电电模式,该模式不及硬件省电模式(由VS1003的xReset激活)bit5:SM_TESTSSM_TESTS=1,进入SDI测试模式。bit6:SM_STREAMSM_STREAM=1,使能VS1003的流模式,具体请参考应用笔记VS10XX。bit7:SM_PLUSVSM_PLUSV=1,MP3+V解码使能。bit8:SM_DACTSM_DACT=0,SCLK上升沿有效;SM_DACT=1,SCLK下降沿有效。bit9:SM_SDIORDSM_SDIORD=0,SDI总线字节数据MSB在前,即须先发送MSB;SM_SDIORD=1,SDI总线字节数据LSB在前,即须先发送LSB;该位的设置不会影响SCI总线。bit10:SM_SDISHARESM_SDISHARE=1,SDI与SCI将共用一个片选信号(同时SM_SDINEW=1),即将xDCS与xCS这两根信号线合为一条,能省去一个IO口。bit11:SM_SDINEWSM_SDINEW=1,VS1002本地模式(新模式)。VS1003在启动后默认进入该模式。注:这里的模式指的是总线模式。bit12:SM_ADPCMSM_ADPCM=1,ADPCM录音使能。同时置位SM_ADPCM和SM_RESET将使能VS1003的IMAADPCM录音功能。bit13:SM_ADPCM_HPSM_ADPCM_HP=1,使能ADPCM高通滤波器。同时置位SM_ADPCM_HP、SM_ADPCM和SM_RESET将开启ADPCM录音用高通滤波器,对录音时的背景噪音有一定的抑制作用。bit14:SM_LINE_IN录音输入选择,SM_LINE_IN=1,选择线入(linein);SM_LINE_IN=0,选择麦克风输入(默认)。2)SCI_STATUS(0x1,RW)SCI_STATUS为VS1003的状态寄存器,提供VS1003当前状态信息。3)SCI_BASS(0x2,RW)重音/高音设置寄存器。VS1003的内置的重音增强器VSBE是种高质量的重音增强DSP算法,能够最大限度的避免音频削波。当SB_AMPLITUDE(bit:7-4)不为零时,重音增强器将使能。可以根据个人需要来设置SB_AMPLITUDE。例如,SCI_BASS=0x00f6,即对60Hz以下的音频信号进行15dB的增强。当ST_AMPLITUDE(bit:15-12)不为零时,高音增强将使能。例如,SCI_BASS=0x7a00,即10kHz以上的音频信号进行10.5dB的增强。4)SCI_CLOCKF(0x3,RW)在VS1003种对该寄存器的操作有别于VS10x1和VS1002。SC_MULT(bit:15-13)时钟输入XTALI的倍频设置,设置之后将启动VS1003内置的倍频器。SC_ADD(bit:12-11)用于在WMA流解码时给倍频器增加的额外的倍频值。SC_FREQ(bit:10-0)当XTALI输入的时钟不是12.288M时才需要设置该位段,其默认值为0,即VS1003默认使用的是12.288M的输入时钟。5)SCI_DECODE_TIME(0x4,RW)解码时间寄存器。当进行正确的解码时,读取该寄存器可以获得当前的解码时长(单位为秒)。可以更改该寄存器的值,但是新值须要对该寄存器进行两次写操作。在每次软件复位或是WAV(PCM、IMAADPCM、WMA、MIDI)解码开始与结束时SCI_DECODE_TIME的值将清零。6)SCI_AUDATA(0x5,RW)当进行正确的解码时,该寄存器的值为当前的采样率(bit:15-1)和所使用的声道(bit:0)。采样率须为2的倍数;bit0=0,单声道数据,bit0=1,立体声数据。写该寄存器将直接改变采样率。7)SCI_WRAM(0x6,RW)该寄存器用来加载用户应用程序和数据到VS1003的指令和数据RAM中。起始地址在SCI_WRAMADDR中进行设置,且必须先于读写SCI_WRAM。对于16位的数据可以在进行一次SCI_WRAM的读写中完成;而对于32位的指令字来说则需要进行两次连续读写。字节顺序是大端模式,即高字节在前,低字节在后。在每一次完成全字读写后,内部指针将自动增加。8)SCI_WRAMADDR(0x7,RW)用于设置RAM读写的首地址。地址范围见数据手册P32。9) SPI_HDAT0和SPI_HDAT1(0x8,0x9,R)这两个寄存器用来存放所解码的音频文件的相关信息,为只读寄存器。当为WAV文件时,SPI_HDAT0=0x7761,SPI_HDAT1=0x7665;当为WMA文件时,SPI_HDAT0的值为解码速率(字节/秒),要转换为位率的话则将SPI_HDAT0的值乘8即可,SPI_HDAT1=0x574D;当为MIDI文件时,SPI_HDAT0的值请参考数据手册P33,SPI_HDAT1=0x4D54;当为MP3文件时,SPI_HDAT0和SPI_HDAT1包含较为复杂的信息(来自于解压之后的MP3文件头),包括当前正在解码的MP3文件的采样率、位率等,具体请参考数据手册P33-P34。复位后SPI_HDAT0和SPI_HDAT1将清零。10)SCI_AIADDR(0xA,RW)用户应用程序的起始地址,初始化先于SCI_WRAMADDR和SCI_WRAM。如果没有使用任何用户应用程序,则该寄存器不应进行初始化,或是将其初始化为零,具体请参考应用笔记VS10XX。11)SCI_VOL(0xB,RW)音量控制寄存器。高八位用于设置左声道,低八位用于设置右声道。设置值为最大音量的衰减倍数,步进值为0.5dB,范围为0到255。最大音量的设置值为0x0000,而静音为0xFFFF。例如,左声道:-2.0dB,右声道:-3.5dB,则SCI_VOL=(4256)+7=0x0407。硬件复位将使SCI_VOL清零(最大音量),而软件复位将不改变音量设置值。注:设置静音(SCI_VOL=0xFFFF)将关闭模拟部分的供电。12)SCI_AICTRLx(0xC-0xF,RW)用于访问用户应用程序。2.2.3存储煤质MicroSD卡简介 由于microSD 卡是由SD卡派生而来,和SD卡兼容,电气性能基本一致。这里我们有必要简单了解一下SD卡。SD卡的全称是Secure Digital Memory Card ,由松下、东芝,和SanDiSK SanDiSK于1999年 年8月共同推出,并成立了SDA(SD Association, SD协会),共同来推广SD标准。 SD卡的数据传输和物理规范由MMC发展而来,其尺寸和MMC相近,为24mm32mm2.1mm。对比MMC卡为24mm32mm1.5mm,相比SD卡略厚,显然有更多的堆叠空间。SD卡表面积和一张邮票差不多,重量只有约2g。SD卡具备串行和随机存取能力,可通过优化速度的串行接口访问,数据传输可靠。因此Secure Digital这个命名就有“安全数码 安全数码”的意思。SD卡通过9Pin接口与相应读写设备连接,由于采用NAND闪存介质而不易损坏,读写数据、格式化都比较方便,被MP3,数码相机、游戏机等多种设备广泛采用。SDA对SD卡的速度用Class等级来标识,目前主要有Class2,Class4,和Class6 三种。主要以写入速度来区别不同的Class:Class2表示写入速度大于或等于2MB/s,Class4表示写入速度大于或等于4MB/s,Class6表示写入速度大于或等于6MB/s,SD卡内部结构和实物图意图如下: 图2-5 SD卡分布及外观 SD卡虽然得到了广泛的采用,但由于手机越来越小,性能越来越高,内部留给存储卡的空间也越来越少。同时,一些别的领域也需要体积更小的存储卡产品。面对这样的情况SandiSK开发出了T-Flash微型存储卡,后来更名为TransFlash卡。而SDA在2005年3月14日以TransFlash卡标准为基础公布microSD的格式,并于2005年7月13日批准了 microSD最终的规格。并被MOTOROLA率先应用在手机产品上。因为这样的关系,至今microSD也被人们叫为T- Flash卡或TF卡。MicroSD卡的尺寸为15mm*11mm*1mm,确实是指甲盖那么大,重量减少为接近0.5g。针脚改为8pin,电气性能仍然和SD卡兼容,工作电压依然是2.7V-3.6V。MicroSD卡发售时一般会附带转接卡,通过转接卡可作为标准SD卡使用。其大小和实物如下: 图2-6 Micro SD卡外观及卡槽 为兼容SD卡和MicroSD卡,本设计采用SD卡接口作为PCB封装,实际存储煤质为MicroSD卡,通过转接卡实现转换。另外,MicroSD有两种读写模式,分别为SD模式和SPI模式,其针脚定义是不一样的,如图: 图2-7 SD卡与Micro SD卡的Pin分布 由于STC12C5A60S2引脚有限且自带硬件SPI功能,所以本设计采用MicroSD卡的SPI模式。2.2.4 LCD12864液晶模块简介 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。2.2.5 按键控制电路简介 人机交互肯定离不开输入系统,由于采用LCD12864作为界面而非彩屏特用的触摸屏功能,所以本设计采用简单的按键作为输入系统模块,过多或过少的按键数量都影响用户对产品的体验效果,太少了虽操作简单,但同时能实现或体验的功能也少,按键数量多了虽给予用户更多的功能选择,但由于按键太多用户时间操作效果不佳,所以本设计折中,采用四个按键,每个按键实现一种或多种功能以实现一键多用的复用功能。如图: 图2-8 按键分布 四个按键名分别为prev,next,play,quit。其中在主菜单界面时,prev为选择上一级菜单,next为选择下一级菜单,play表示进入,而quit由于在最顶层菜单所以无效。当进入一级菜单后(以进入音乐菜单为例,其它类似),prev为选择上一首歌曲,next为选择下一首歌曲,play表示播放,quit表示返回主菜单,当键值为play时进入播放MP3状态,此时prev表示快退,next表示快进,play表示暂停,quit表示返回上一级菜单。当然对于其他菜单会依据菜单的实际功能而设置按键对应的功能。2.3 本章小结本章主要介绍了本设计的硬件系统总体框架及主要部分硬件模块的相关介绍,合理的,协调的硬件设计是本设计的基础,将各模块的硬件资源进行有效的整合是一个考验,例如利用MCU的自带硬件SPI与SD卡的SPI模式结合,同时由于MCU的引脚有限,尽量的在完成要求下少占用IO口资源。本设计之处原打算将SD卡和VS1003的SPI都用MCU的硬件SPI,通过不同的片选信号来选择具体要驱动哪块模块,但考虑到MCU的驱动能力及两模块对电平的不同要求,以及SD卡更需要硬件SPI,而VS1003本身具有强大的解码效率,所以VS1003采用普通IO口来模拟SPI。第3章 系统软件原理及概述3.1 系统软件总体流程介绍 开 始 挂载文件系统pf_mount(&fatfs)初始化硬件SPI SPI_Init()挂载成功 ? 初始化串口 Uart_Init() Y显示界面UI初始化MirocSD卡 MirocSD_Init() Y N是否有键按下 ?初始化LCD12864 LCD12864_Init() 结 束 初始化VS1003 VS1003_Init() 图3-1 系统软件流程图整体软件启动流程如上图所示,程序一开始先对各模块进行初始化,经过一系列初始化后开始初始化Petit FatFS也即搭载该文件系统,然后进入主菜单界面,接着是个死循环,不断的等待用户键入值,且去执行相应的功能同时显示到界面上实现与用户互动,例如当键入音乐菜单时,系统会读取MirocSD卡所有的MP3文件,并显示到界面一边用户的后续操作。3.2 Petit FatFS在STC12C5A60S2实现移植3.2.1 Petit FatFS 简介 Petit FatFs 是FatFs的精简版,比较适用于低端8位单片机中。可以用在小RAM的单片机中,RAM可以小于扇区的RAM(512bytes)中。 Features: (1)Very small RAM consumption (44 bytes work area + certain stack). (2)Very small code size (2K-4K bytes). (3)Supports FAT32. (4)Single volume and Single file. (5)File write function with some restrictions. 看最后一条,写函数有一些限制。如果不用于写操作的话,这个文件系统是个不错的选择,RAM与ROM消耗都很少,用keil编译的话会消耗250字节左右的栈空间。支持FAT32,FAT。本设计目前暂不用写操作。同时,官方介绍的限制:1、只能挂载一个设备。2、Petit FatFs不能创建文件,只能对已存在的文件进行操作。3、写函数只能写到原来文件的大小,不能扩展大小,不能更新文件时间信息,不能写只读文件。Petit FATFs能够在不同的单片机平台上运行,具有良好的层次结构,其层次结构,如下图: 图3-2 Petit FATFS 框架图应用层位于最顶层,它提供供了以下几个函数: pf_mount :为Petit FATFs模块注册或者卸载一块工作区域,它包括了设备的初始化(diskio.c中的disk_initialize)、文件系统的设置(FAT32、FAT)等,是Petit FATFs能够工作的前提,在调用其他应用层函数前应先调用此函数。一般用法是: FATFS fatfs; /定义一个文件系统对象 if(pf_mount(&fatfs) printf(Failed); /如果返回1,则挂载失败, pf_open:打开一个已经存在的文件,在对文件进行读操作和移动读写指针前,首先应该调用该函数。打开的文件必须是已存在的。一般用法是: if(pf_open(MESSAGE.TXT) ) printf(Failed); /如果返回1,则打开失败 pf_read:读一个文件。函数的三个参数分别表示读出数据存放的地址,读出数据的大小,反回真正读出的char数据的大小。 pf_write:写一个文件。函数的三个参数分别表示写入的数据存放的地址,要写入的数据的大小,返回真正写入的char数据的大小。 pf_lseek:移动读/写指针。参数表示从第几个数据开始操作。 pf_opendir:打开一个目录。第一个参数表示指向空白目录结构,第二个表示指向一个已存在的目录名。 pf_readdir:读一个目录项。使用者在使用应用层函数时只需调用即可无须理会 Petit FATFs的内部结构以及复杂的FAT 协议。 中间层Petit FATFs 包含了FAT 的读写协议,和最底层 Low Level Disk I/O完全分离,所以一般不用修改。 Low Level Disk I/O位于最底层,它不是 Petit FATFs 模块的一部分,需要根据不同的单片机和不同的存储媒介进行编写,是移植过程中最重要的一部分。底层相关的函数有: disk_initialize:存储媒介的初始化,一般成功则返回0,如果用sd卡的话,初始化、复位成功后返回零,否则返回1即可。 disk_readp :读部分扇区,里面的参数* dest, 存放数据的地址。sector,读的第几个扇区, sofs,从扇区平移多少位 。count 读出的数据个数。 disk_writep:写部分扇区,里面只有两个参数,写入的数据地址* buff与第几个扇区sc两个数据。但在编写这个程序的时候要注意,由于FatFs内部调用函数的需要,必须按照以下的顺序来,当 buff 指向一个空指针,当sc 不为0 时,则表示对这个扇区的写操作进行初始化;当sc 为0 时,则表示对这个扇区的写操作进行结束操作;当 buff 指向一个内存缓冲区,则是进行正常的读写。3.2.2 移植流程 Petit FATFs是一个可配置的文件系统,使用者可以根据需要进行相应的裁剪。 Petit FATFs 提供了5 个程序文件,分别是 diskio.c、diskio.h、integer.h 、pff.c 和pff.h 。其中integer.h 和pff.c 一般情况下不需要进行改动,需要改动的是 diskio.c和pff.h 。diskio.c里面主要包括三个函数的编写即 disk_initialize 、disk_readp 和disk_writep ,这三个函数已经在上面讲过,这里只需将这三个函数写在 diskio.c里面相应的位置即可。配置的工作主要在 pff.h里面。 在pff.h 里面我们需要配置的有: #define _USE_READ 。有0 和1 两个值可被选择,选择 0 则不使能文件读操作,选择1 则使能读文件操作,在这里我们选择 1,使能读文件操作。 #define _USE_DIR。为1 时使能打开一个目录和读一个目录项操作,为 0 时则不使能相应操作,因为我们只测试文件的读/写操作,所以设置其值为 0。 #define _USE_LSEEK。有 0 和1 两个选择项。1 时使能移动读/写指针操作,为 0 时则禁止。 #define _USE_WRITE。为 1 时使能写文件操作,为 0 时禁止写文件操作。这里设置其值为1,使能写文件操作。 #define _FS_FAT32。为 0 时仅支持FAT16 文件系统,为1 时支持 FAT32 文件系统。FAT32 文件系统是FAT16 文件系统的升级,而且现在 SD 卡在出厂时一般都默认被格式化为FAT32 文件系统,所以设置其值为 1。 #define _WORD_ACCESS。有0 和1 两个值可被选择。为 0 时选择字节寻址方式,为1 时选择字寻址方式,一般都置1。 到这里Petit FATFs 文件系统的移植过程完成。3.3 VS1003核心代码介绍3.3.1 VS1003相关细节代码的设计 对VS1003最基本的操作单元是实现发送一个字节数据的函数,并以此为单元封装成写命令和写数据等再上层的函数接口,其中,正因为各主要的函数要最终调用到该写字节函数,因此写字节函数的写的速度直接影响对VS1003操作的效率,若采用一般的写字节,就是利用for循环将一个字节进行移位依次写入的话,其完成一个字节写入的速度并不高,大部分时间都是耗在for这个循环的结构体了,而这个结构体我们实现的仅仅是几行关于移位的代码,利用的效率不高,因为for本身的循环就占很大的比例了,若采用汇编完成该写字节的实现函数的话,虽然速度是提高了,但是对于移植以及代码的统一性并不是适合,本设计的初衷还是实现全部的C代码最好,最后决定利用STC12C5A60S2的位地址来实现,将一个要写入的字节的8个bit依次分到具有位寻址的字节当中,在进行写入的时候不需要通过移位而是直接一个位一个位的写入,这样比移位快多了,同时由于一个字节也就是写8次,次数并不多,所以取消for循环的调用,直接采用代码,具体如下:unsigned char bdata dat; /可位寻址的变量dat,用于优化SPIsbit dat7=dat7; /取出每一个位sbit dat6=dat6;sbit dat5=dat5;sbit dat4=dat4;sbit dat3=dat3;sbit dat2=dat2;sbit dat1=dat1;sbit dat0=dat0;下面是实现写函数的代码:void VS1003_WriteByte(UINT8 x)dat=x; /将x赋值给可位寻址的变量dat VS_SI=dat7; /从高位开始输出,从dat7一直到dat0 VS_SCK=1; /时钟的上升沿,位被写出 VS_SCK=0; VS_SI=dat6; VS_SCK=1; VS_SCK=0; VS_SI=dat5; VS_SCK=1; VS_SCK=0; VS_SI=dat4; VS_SCK=1; VS_SCK=0; VS_SI=dat3; VS_SCK=1; VS_SCK=0; VS_SI=dat2; VS_SCK=1; VS_SCK=0; VS_SI=dat1; VS_SCK=1; VS_SCK=0; VS_SI=dat0; VS_SCK=1; VS_SCK=0; 经实测,效果明显!3.3.2 VS1003初始化介绍 再对VS1003正常的操作前,必须先对其各个内部相应的寄存器进行正确的设置也就是初始化,其初始化流程图入下: 开始 硬件复位VS1003软件复位VS1003DREQ为高 ? Y 对VS1003的时钟,音量,重音等寄存器进行设置 向VS1003发送4个无效的字节数据用于启动传输 结 束 图3-3 VS1003初始化流程其具体代码入下: /VS1003复位void VS1003_Reset(void)/*硬件复位*/SPI_SetSpeed(3);/SYSclk/128,初始化时不能用太高时钟VS_XRESET=1; Delay_ms(5);VS_XRESET=0;Delay_ms(10);VS_XRESET=1; /硬件复位,XRESET低电平有效Delay_ms(100);/*软件复位*/VS1003_WriteReg(VS_MODE,0x0804);/向0号寄存器写入0x0804 SM_SDINEW为1 SM_RESET为1while(VS_DREQ=0);/*初始化设置*/VS1003_WriteReg(VS_CLOCKF,0x9800);/时钟设置,向3号寄存器写入0x9800 SC_MULT 为4 SC_ADD 为3 SC_FREQ为0
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!