[讨论] 毕业设计论文-单片机在语音播放与图片显示中的应用

呱呱   2008-1-4 14:01 楼主
摘 要:凌阳科技公司推出的SPCE061A芯片具有语音播放的硬件条件,在软件算法上凌阳科技公司提供了大量的语音函数库可供使用,这使得语音播放很容易实现。但是SPCE061A片内的FLASH存储器只有32K,在播放大量语音资源时需要外扩存储器。本论文讨论使用凌阳科技公司的SPR4096作为外扩存储器,与SPCE061A结合播放语音。在使用SPR4096时我们通过凌阳教育推广中心新推出的ResWriter对SPR4096进行读写操作。另外,扩展SPLC501液晶作为图片显示,实现有声有色。本文详细论述了整个功能的实现,包括硬件电路与软件算法。 关键词:SPCE061A;凌阳单片机;语音播放;SPR4096;ResWriter;1 引言   凌阳科技公司推出的SPCE061A芯片具有语音播放的硬件条件,而且还提供了大量的语音播放的函数可供调用。但是由于SPCE061A片内的FLASH存储器只有32K,在播放大量语音资源时需要外扩存储器。本文使用SPCE061A与SPR4096实现大量语音播放。在操作SPR4096时使用凌阳教育推广中心最新推出的可视化工具ResWriter进行对SPR4096的读写操作,使得在播放大量语音资源时也变得很容易。本文详细论述了实现过程。 2 芯片与模组简介 2.1 SPCE061A特性简介   SPCE061A是凌阳科技研发生产的性价比很高的一款十六位单片机,使用它可以非常方便灵活的实现语音的录放系统,该芯片拥有8路10位精度的ADC,其中一路为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。两路10精度的DAC,只需要外接功放(SPY0030A)即可完成语音的播放。另外凌阳十六位单片机具有易学易用的效率较高的一套指令系统和集成开发环境。在此环境中,支持标准C语言,可以实现C语言与凌阳汇编语言的互相调用,并且,提供了语音录放的库函数,只要了解库函数的使用,就会很容易完成语音录放,这些都为软件开发提供了方便的条件:   特性:   ● 16位μ'nSP微处理器;   ● 工作电压:内核工作电压VDD为3.0~3.6V(CPU),I/O口工作电压VDDH为VDD~5.5V(I/O);   ● CPU时钟:0.32MHz~49.152MHz;   ● 内置2K字SRAM;   ● 内置32K闪存ROM;   ● 可编程音频处理;   ● 晶体振荡器;   ● 系统处于备用状态下(时钟处于停止状态),耗电小于[email=2μA@3.6V]2μA@3.6V[/email];   ● 2个16位可编程定时器/计数器(可自动预置初始计数值);   ● 2个10位DAC(数-模转换)输出通道;   ● 32位通用可编程输入/输出端口;   ● 14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒;   ● 具备触键唤醒的功能;   ● 使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据;   ● 锁相环PLL振荡器提供系统时钟信号;   ● 32768Hz实时时钟;   ● 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器;   ● 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;   ● 具备串行设备接口;   ● 低电压复位(LVR)功和低电压监测(LVD)功能;   ● 内置在线仿真板(ICE,In- Circuit Emulator)接口。 2.2 SPR4096简介   SPR4096是凌阳科技公司研发生产的性价比很高的512K*8位的高性能FLASH存储器,同时内嵌4K*8位的SRAM。具有BMI(Bus Memory Interface)接口与SIO(Serial Interface)接口。SPR4096提供两种电源供电VDDI与VDDQ。VDDI供电范围在2.25V到2.75V,是对内部的FLASH与逻辑控制器供电。VDDQ供电范围在2.25V到3.6V,只对I/O口供电。SPR4096的最大工作频率为5.0MHz,最大读取电流为2mA最大擦除、烧录电流为6mA。   特性:   ● 512K*8位的FLASH,256个扇区,每个扇区为2K字节   ● 可重复擦写20000次   ● 在自然条件下数据保存10年   ● 4K*8位的SRAM   ● 供电要求:     VDDI: 2.25V-2.75V     VDDQ:2.25V-3.6V   ● 最大工作频率:5.0MHz   ● 最大擦除、烧录电流:6.0mA   ● 最大读取电流:2.0mA 2.3 SPR模组介绍 2.3.1 基本特性与参数指标   产品型号:SPR MODULE V1.0   SPR模组工作电压:3.3V   SPR模组外形尺寸:50mm×50mm 2.3.2 主要功能   针对凌阳科技公司的存储器芯片SPR4096/SPR1024,开发的简易烧写器。该烧写器配合PC机ResWriter工具(凌阳科技教育推广中心提供,下文叙述),通过EZ-probe下载线,完成对SPR4096/1024存储器芯片的擦除、写入、校验等功能。并且在SPR模组上留有与SPCE061A单片机的接口,可以实现SPR模组与SPCE061A单片机组成的系统。 2.3.3 结构框图 图 2.1 SPR模组结构框图   SPR模组预留两个接口,一个接口是EZ-probe,这是在使用ResWriter工具对SPR4096/1024进行烧写时连接使用的,另一个是10PIN的排线,主要提供电源以及与SPCE061A连接使用。用户请注意,SPR模组电路支持SPR4096和SPR1024,但只能同时对其中一种芯片进行使用。SPR模组有两种基本配置,一种为电路板加SPR4096芯片,另一种为电路板加SPR1024芯片,而且在使用时必须配备下载线使用。用户在选购时请您注意确认是SPR模组_4096还是SPR模组_1024。 2.3.4 实物图 图 2.2 SPR模组_4096实物图 图 2.3 SPR模组_1024实物图 2.3.5 注意事项   ● SPR模组使用3.3V电源供电,注意不要使电源接反   ● 模组必需配合下载线使用   ● 在使用ResWriter工具对SPR4096/SPR1024芯片进行烧写时也需要对SPR模组供电   ● 不能同时对SPR4096与SPR1024进行烧写

回复评论 (3)

回复: 毕业设计论文-单片机在语音播放与图片显示中的应用

2.4 ResWriter工具简介 2.4.1 主要功能   ResWriter工具的主要功能:   ● SPR1024/4096 Flash Memory 烧录器:用PC printer port通过Easy Probe 烧录SPR1024/4096,基本操作内容包括Blank      Check(空白检查),Erase(删除数据),Read(读数据),Program(烧录,写入数据),Verify(校验,检查写入是否正确);   ● 文檔整合:把多个小文檔整合成一个大文檔,作为烧录Flash的数据资料。 2.4.2 ResWriter工具的界面: 图 2.4 Res Writer用户界面 2.4.3 菜单介绍   ● 界面:包括标题栏、Menu Bar、ToolBar、Resource View Bar、View、Status Bar等。   ● 标题栏:<文檔名> Sunplus Res Writer;   ● Menu Bar:见表一;   ● ToolBar:包括Load Bin、Load Con、Save、Blank Check、Erase、Read、Program、Verify、Auto Operation、Help等;   ● Resource View Bar:在开始的地址空间显示文檔索引表,接下来显示读进来的小文档的标题,每个标题对应一段地址空间, Double Click某个小文档标题可以定位到对应数据的起始地址,可以删除某个小文档标题(以Popup Menu方式实现,对应的删除本段数据),Index List不可删除;   ● View:左边一列显示地址,右边十六列显示数据(十六进制);   ● Status Bar:显示Flash Type、Start Address、 End Address(由菜单"设置/操作地址"指定) 、Check Sum显示烧录数据的校验和(在Read和Program之后)、命令提示。 表 2.1菜单
Menu Item功能描述
文件/载入二进制文件以Append的方式读入多个要整合的*.bin文档,作为Flash烧录的数据资料。
文件/载入以整合文件读入已经整合后的*.con文檔,作为Flash烧录的数据资料。限制:一次只能读入一个,且读入前关闭已有的文件
文件/存储以*.con方式保存整合后的文档
文件/退出退出本软件
查看显示或者隐藏Tool Bar/Status Bar/Resource View Bar等
设置/芯片型号设置要烧录的芯片(SPR1024或SPR4096)
设置/操作地址设置对Flash操作的地址空间(Start & End Address)
操作/Erase擦除整个Flash 中的数据
操作/Blank Check检查地址空间Start & End Address之间的数据是否为空白,即是否为0xFF
操作/Read从Flash读取地址空间Start & End Address中的数据
操作/Program把文件Start & End Address地址间的数据写到Flash相应的地址空间中
操作/Verify检查Flash地址空间Start & End Address中的数据与文档中对应空间的数据是否一致
操作/Auto根据"烧录选项"的设置,执行相应的烧录过程
烧录选项选择烧录过程:Erase -> Program -> Verify;Erase -> Program;Program -> Verify;Program Only选择后由"操作/Auto"实现
帮助
  对文件(资源)的操作说明:   ● Resource View包括索引表和读进的各个小文档标题,索引表纪录整合后文档的长度(total_file_length)、小文档的个数、各个小文档长度和某个文档段的起始地址等信息,把索引表放在开始的一段地址空间,作为烧录数据的一部分。小文档标题纪录本文档名称、起始地址和长度;   ● 索引表格式:   在整合后的文件中,在正式的文件前面有索引表,方便用户使用SPR4096中的资源。索引表的开头4个字节为"SPRW"特定校验字。然后是整合后文档存放的起始地址与结束地址,分别用双字数据类型标志。接下来存放的为整合前文件的个数,用1个字来存放。然后依次为整合前文件的长度,起始地址,结束地址。具体参考2.4.4索引表。   ● 在Load文档前提示用户保存当前的文档,在Load文档时检查每个文档的长度,若这些文档长度之和+索引表的长度(即整合后的文档长度:total_file_length)大于Flash的容量MaxLength(SPR1024/4096:128k/512k Bytes), 给出提示,超过MaxLength后将不能再Load文檔;   ● 在Load Bin时如果文件名字与已有的文档名字冲突,不能载入;   ● 在烧录操作之前需要检查硬件是否正常连接;(此条不做)   ● Blank Check后给出空白的信息,检查过程中一旦踫到一个非空数据,立即结束检查,给出不是空白的信息;(空白数据:0xFF)   ● Read后给出信息提示用户是否保存这段数据到*.bin文檔中,然后在Status Bar显示Check Sum;   ● Program之后给出是否成功的信息,在Status Bar显示Check Sum;   ● Verify后给出一致信息,校验过程中一旦踫到一个数据不一致立即结束校验,给出不一致的信息;   ● 执行烧录操作功能(Blank Check、Erase、Read、Program、Verify、Auto Operation)时,有进度显示;   ● 操作地址:   ● Start Address默认为00000H,End Address为total_file_length (整合后的文档长度:索引表的长度+所有文档的长度),   ● End Address删除某个小文档后,如果End Address < total_file_length,自动更新为total_file_length,删除某个小文档后,若total_file_length < Start Address,自动更新Start Address为00000H,   ● 设置时,如果Start Address < 00000H或 Start Address > End Address时给出提示,此时不修改,End Addressss < Start Address 或 End Address > total_file_length时给出提示,此时不修改;   ● 文檔中在total_file_length与MaxLength之间数据以0xFF填充,Save时不保存这部分数据;   ● 关闭本软件时提示用户保存整合后的文档,以*.con方式保存。 2.4.4 索引表   为了便于使用数据,在烧录的时候要对数据文件进行索引,这样在使用的时候就可以知道数据存放在哪些地址,可以对文件进行操作。   资源索引表格式:   考虑到存储语音资源的实际使用情况,索引表包括4个字节的特定码,整合后文档的起始地址、结束地址、整合前文件的总个数、整合前每个文件的起始地址、结束地址。这些项目依次排列。4个字节的特定码为SPRW(Sunplus Read Write)的ASCII码。特定码的作用主要是从芯片读回的数据保存成文件后,在使用ResWriter工具打开时进行检测。如果文件中存在特定码说明芯片中的数据是使用ResWriter工具烧录的,这样的文件可以在ResWriter工具中正确显示,如图 2.5所示: 图 2.5 打开整合后文件图   如果没有特定码,那么芯片中的数据就不是通过ResWriter进行烧录的(SPR1024/SPR4096可以通过SPCE061A等单片机进行读写操作,也可以使用AllWriter工具进行读写操作),那么数据文件在ResWriter工具中显示是没有意义的。整合后文件的起始地址便于引用,结束地址便于检查资源是否超出存储范围。整合前文件的起始、结束地址便于直接访问整合前的文件。考虑到文件名实际用处不大,整合后资源长度可以通过结束地址与起始地址计算得出,在索引表中没有保留。   索引表格式如下:      #define DWORD long int      #define WORD unsigned int      typedef struct //整合后的文件      {       DWORD StartAddress;       DWORD EndAddress;      }CONFLILE;            typedef struct //整合前的小文件      {       DWORD length;       DWORD StartAddress;       DWORD EndAddress;      }UNCONFILE;            typedef struct //索引表      {       "SPRW" ; //特定码SPRW       CONFLILE Index1;       WORD unconfilenumber; //所有整合前小文件的个数       UNCONFILE Index2[unconfilenumber];      }INDEX;   如图 2.6所示:在地址0x00000-0x00003为4字节的特定码,在地址0x00004-0x00007为4字节的整合后文件的起始地址,在地址0x00008-0x0000B为4字节的整合后文件的结束地址,在地址0x0000C-0x0000D为2字节的整合前文件总数。然后每4字节分别为整合前第一个文件的长度、起始地址、结束地址,一直到最后一个整合前文件的长度、起始地址、结束地址。索引表结束,然后是文件的数据。 图 2.6 索引表图示   举例说明:如图 2.7所示:53、50、52、57为特征码SPRW的ASCII码。00 00 00 3E为整合后文件的起始地址,00 00 A2 CF 为整合后文件的结束地址,00 04 为整合前文件的总个数,本例中为4个文件,再接下来每4个字节为一组分别为整合前第一个文件的长度、起始地址、结束地址,整合前第二个文件的长度、起始地址、结束地址……索引表结束,然后是文件的数据,如图蓝色部分为文件数据的开始。 图 2.7 举例说明索引表图
点赞  2008-1-4 14:02

回复: 毕业设计论文-单片机在语音播放与图片显示中的应用

2.5 SPLC501模组简介   由于SPLC501模组是大学计划推出的较早的模组,如果读者对这个模组的使用存在问题可以到凌阳大学计划网站www.unsp.com.cn下载相关资料参考。 3 系统总体方案介绍   系统的结构框图如图 3.1所示。 图 3.1 系统的结构框图   在声音的处理上主要采用凌阳科技的语音压缩格式,将需要播放的声音压缩存在SPR模组里面,然后通过61板将语音资源取出播放出来。在图片的处理上,采用SPLC501液晶模组,使用配套的DM Tool工具将需要显示的图片实现提取出图片资源烧写到SPCE061A中,然后通过61板控制SPLC501A播放出来。 4 系统硬件设计 4.1 电源板电路模块分析   图 4.1是电源部分的电路,4.5V直流电压经过SPY0029后产生3.3V给整个系统供电。   SPY0029是凌阳公司设计的电压调整IC,采用CMOS工艺。SPY0029具有静态电流低、驱动能力强、线性调整出色等特点。   图 4.1图中的VDDH3为SPCE061A的I/O电平参考,接SPCE061A的51脚,这种接法使得I/O输出高电平为3.3V;VDDP为PLL锁相环电源,接SPCE061A的7脚;VDD和VDDA分别为数字电源与模拟电源,分别接SPCE061A的15脚和36脚;AVSS1是模拟地,接SPCE061A的24脚;VSS是数字地,接SPCE061A的38脚; AVSS2接音频输出电路的AVSS2。 图 4.1电源电路图 4.2 CPU语音输出电路   SPCE061A内置2路10位精度的DAC,只需要外接功放电路即可完成语音的播放。   图 4.2是音频输出电路图。可以直接听喇叭输出的声音。图中的SPY0030也是凌阳公司的产品。它的详细说明可以参见SPY0030 data sheet。和LM386相比,SPY0030还具有下述优势,比如LM386工作电压需在4V以上, SPY0030仅需2.4V即可工作(两颗电池即可工作);LM386输出功率100mW以下, SPY0030约700mW。其他特性请参考data sheet。 图 4.2 CPU语音输出电路 4.3 SPR模组电路   原理图如图 4.3所示: 图 4.3 SPR模组硬件原理图   SPR模组的硬件电路主要分成3大部分,下面分别介绍:   第一部分:ResWriter工具对SPR4096/SPR1024进行烧写的下载缓冲电路如图 4.4所示: 图 4.4 烧写SPR4096/SPR1024硬件电路   此部分电路主要是控制SCK、SDA信号的作用,通过74HC244可以控制SDA信号的高低电平,这样可以使用ResWriter工具发出符合烧写芯片的时序信号,完成对芯片的擦除、写入与校验功能。   第二部分:SPR4096的工作电路,如图 4.5所示: 图 4.5 SPR4096工作电路   此部分工作电路是为了使SPR4096存储器工作的外围电路,通过SCK、SDA与控制芯片/电路相连。   第三部分:SPR1024的工作电路,如图 4.6所示: 图 4.6 SPR1024工作电路   此部分工作电路是为了使SPR1024存储器工作的外围电路,通过SCK、SDA与控制芯片/电路相连。   另外,SPR模组还有跳线、接口电路,如图 4.7所示: 图 4.7 SPR模组的接口跳线电路
点赞  2008-1-4 14:03

回复: 毕业设计论文-单片机在语音播放与图片显示中的应用

5 系统软件设计   在软件设计上,由于语音资源存放在外部的存储器上,只能采用手动的方式播放语音。另外,需要对图片的显示,在播放语音的同时需要刷新图片,这样采用在中断中填充语音队列的方法来实现。   下面是主函数流程图: 图 5.1 主函数流程图   在主函数中首先初始化SIO,这样可以获得存储在SPR4096上的语音资源的起始地址与结束地址,这样便于语音控制。 A2000语音播放函数设计,由于语音资源存储在外扩存储器SPR4096上,语音播放采用手动播放方式。手动语音播放,关键在于语音资源的取得,需要得到语音资源的地址。下面分析一下刚刚烧录文件的数据格式,如图: 图 5.2 语音文件的数据格式   在上图的前4个字节为"SPRW"的ASCII码,主要的目的在于读取Flash中的文件作为特征码使用(请参考2.4.4节索引表部分),在接下来的4个字节为整合后文件的起始地址00 00 00 56(由于SPR4096的最大地址为0x7ffff,所以使用4个字节标识,即两个字的长度),然后是整合后文件的结束地址。整合的概念,就是将多个资源小文件通过特定的数据格式编成一个索引表加在资源文件的开始,然后是资源文件1,资源文件2……ResWriter工具在用户打开文件时自动的完成上述过程,称为整合。ResWriter工具是对整合后的文件进行烧录。在接下来2个字节(00 01)的数据表示整合的文件有1个资源。   以上是整合后文件的一些信息,再接下来分别是添加的语音资源的长度信息,文件起始存储地址,文件结束存储地址。在本例编程中主要关心的就是语音资源文件起始地址、结束地址。由图 5.2可见第一个文件(未整合的)的起始地址存放在0x0012、0x0013(第13、14个字节),在程序中可以依次求得语音资源。参考下面手动播放语音的函数。    ulCon_AddrHighest = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12); // 第一个播放文件地址    ulCon_AddrHighest = ulCon_AddrHighest << 24;    ulCon_AddrHigh =SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+1);    ulCon_AddrHigh = ulCon_AddrHigh << 16;    ulCon_AddrLow = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+2);    ulCon_AddrLow = ulCon_AddrLow << 8;    ulCon_AddrLowest = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+3);    ulCon_StartAddr = ulCon_AddrHighest | ulCon_AddrHigh // 开始地址    | ulCon_AddrLow | ulCon_AddrLowest;   其中BASE_START_ADDRESS定义为0x0012,每个地址采用4个字节存储,在分别取得地址后通过移位然后或操作得到地址。参数SndIndex是由调用函数传递过来的,意义在于使用第几段语音资源。比如使用第一段语音资源,那么传过来0就可以了,与采用自动方式播放语音类似。BASE_START_ADDRESS 是整合后文件的信息长度,在取得整合前文件的信息的时候要跳过这一段数据,即BASE_START_ADDRESS + SndIndex*12为第一段整合前数据文件的起始地址的最高字节(地址采用4个字节表示)。 SPCE061A播放语音的原理如图 5.3所示: 图 5.3 使用SPCE061A实现播放语音 手动播放语音的实现,如图 5.4所示:   图 5.4 手动播放语音   语音播放的解码部分放在1KHz的中断中进行,这样可以在播放语音的时候不影响图片的显示。   在中断中的函数代码如下:    void BMP_Play_IRQ_Service(void)    {     IRQ1KHz_Couter++; //Counter自加1,用于计时,在主函数中判断时间到     while(SACM_A2000_TestQueue() != 1)     {     if(ulCon_StartAddr >= ulCon_EndAddr)     {     ulCon_StartAddr = ulStart_Save;     SACM_A2000_Initial(0); //放音初始化     SACM_A2000_InitQueue();     SACM_A2000_InitDecoder(3);     }     uiRet = SP_SIOReadAWord(ulCon_StartAddr);     SACM_A2000_FillQueue(uiRet);     ulCon_StartAddr++;     ulCon_StartAddr++;     }     SACM_A2000_Decoder();     *(unsigned int *)0x7012 = 0x0001;    }   如果解码队列为空,那么进行填充队列操作,否则只进行解码操作,然后请看门狗退出中断。    6 验证方案   步骤一:使用10Pin排线将SPR模组与61板的正电源、IOB0、IOB1、负电源对应相连,61板I/O口选择3.3V。   步骤二:使用EZ-probe与SPR模组EZ-probe接口相连。   步骤三:按照下图设置SPR模组跳线: 图 6.1 跳线设置   步骤四:启动ResWriter工具,打开语音文件想大声说爱你.16K(SPR Module配套资料\SPR Module Demo\SLAMDUNK\voice路径下),点击自动烧写按钮。如图: 图 6.2 打开语音文件 图 6.3 打开语音文件后ResWriter工具视图 图 6.4 点击自动烧写工具按钮 图 6.5 自动烧录过程 图 6.6 自动校验过程 图 6.7 完成自动烧录   注意:如果没有正确烧录,那么主要的原因是电源没有接入或者跳线选择错误。   步骤五:按照下图选择跳线: 图 6.8 跳线选择   步骤六:将液晶模组、SPR模组与61板按照下图连接起来,如图: 图 6.9 硬件连接图   步骤七:使用IDE将工程文件(SPR Module配套资料\SPR Module Demo\SLAMDUNK路径下)下载到61板上运行,现象是同时播放声音与图片(无需任何操作)。   注意:如果没能听见语音播放,请注意硬件连线喇叭是否接好,跳线是否设置好。 7 结语   通过上面的应用方案可以看到,在需要存储大量资源包括语音资源可以采用凌阳科技有限公司的存储器来解决。凌阳科技推出的存储器保存资料安全可靠,配备可视化工具使用方便。在与单片机相连时采用并行串行可选的方式传递数据,给用户带来了极大的方便。在方案中看到通过工具烧录的资源可以通过索引表来使用语音资源,而且可以播放语音资源,进行语音的录放,在不同的压缩格式中都可以较长时间的播放语音。在需要显示图片的时候可以考虑使用凌阳科技提供的SPLC501液晶,而且已经有了底层驱动程序,用户只需要直接调用显示函数即可完成显示。 8 参考文献 [1] 罗亚非.凌阳16位单片机应用基础[M]. 北京:北京航空航天大学出版社,2003 [2] 凌阳大学计划网站www.unsp.com.cn
点赞  2008-1-4 14:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复