《基于ARM的语音录放系统的设计(共22页).doc》由会员分享,可在线阅读,更多相关《基于ARM的语音录放系统的设计(共22页).doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 目 录1 引言11.1 课题背景 11.2 课程设计目的11.3课程设计意义21.4 系统功能说明22 系统模块设计32.1系统工作原理32.2系统模块设计33 系统模块介绍 43.1 ARM控制模块43.2语音芯片ISD400464 系统调试94.1硬件调试94.2 软件调试94.3 系统设计流程 115 试验结果 13结束语 14致谢 15参考文献 16附录 17专心-专注-专业1 引言1.1 课题背景开发在生活和生产的各个领域中,凡是有自动控制要求的地方都会有单片机的身影出现;然而随着时代的进步与发展,如今普通的8位单片机已经无法满足需求,因为其资源有限,而且
2、系统时钟速度慢,导致许多问题无法及时解决,加之内部的储存容量很小使得在编写程序时不得不考“精简”。现在ARM的应用已经越来越普及,因为它的高性能使之得到很多人的青睐,因此选用ARM来作为控制器。ARM的应用有利于产品的微型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。但是,对于ARM的应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于ARM的应用正从根本上改变着传统的控制系统设计思想和设计方法。从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用ARM通过软件(编程序)方法实现了。这种以软件取代
3、硬件并提高系统性能的控制系统“软化”技术,称之为微控制技术。微控制技术是一种全新的概念,是对传统控制技术的一次革命。随着ARM应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。高档的ARM芯片还能建立操作系统平台,使之更加强大。具有很强的实时性和完美的人机界面,同时其软硬件可以根据需要进行裁剪,具有很强的灵活性。1.2 课程设计目的传统的语音录放需要经过如下过程:语音信号经过设备接受后转化为模拟电信号,通过前置放大器把语音信号放大,通过带通滤波之后,去掉多余的干扰,再经过自动增益控制和A 压缩电路净化输入的模拟电信号,而后经AI)转换器转换为数字信号,由控制器对其进行处理和存储,之后
4、再由DA转换为模拟信号,达到放音的目的。本文采用了ISD公司的新产品ISD4004语音芯片,该芯片自带A1)转换和压缩功能,直接把声音信号存储在芯片内的闪存寄存器中,无需电源即可保存数据长达100年,重复记录次以上,80kHz采样录音可达8分钟。通过AT89C51对其控制,达到系统的设计目的。在语音芯片的前端加一个前置放大电路,用于声音信号的输入,在输出端加一个LM386的功率放大器增强声音输出信号。1.3 课程设计意义本课题开发意义在于它能用于实时监听、信息提示,会议记录,站名广播等,能够省去听众现场记录,节约笔墨纸张,可使听众专心听讲,可按设定时间功能自动播放提示预警信息。对于消费者,也有
5、较大的吸引力。1.4 系统功能说明 (1)本电路采用S3C44B0X 这款ARM7芯片作为控制器。 (2)ISD4004语音芯片自带存储空间,能录放8 -16分钟。 (3)当按下按键1时进行录音操作,当按下按键2时进行放音操作,按下按键3时进行取消当前操作。(4)该语音电路产品,具有音色自然、使用方便、单片存储、反复录放、扩展容易、功耗低微、不怕断电等许多特点,通过扩展外部设备,基于ISD4004的语音产品在通信导航设计、智能仪器仪表、治安报警系统、自动售货机、电子地图、电子导游机、车载信息终端语音播报、公共汽车语音报站器、电磁报层背景音乐播放系统、语音讲解仪、电话自动应答系统、便携式语音记录
6、装置、电子词典、语言复读机、语言音乐教学仪、智能玩具、高档电子礼品等许多领域,都有着极其广泛的应用。2系统模块设计本系统设计分为系统模块设计、方案选择及论证、系统组成原理。各个模块分别实现了系统的软硬件的搭配。下面分别介绍各个设计及原理论证。2.1系统工作原理系统上电后,按下相应的按键后能实现录音、播放、停止等功能,而且掉电后能保存语音信息不丢失,能够非常真实、自然地再现语音、音乐、音调和效果声,而且操作简易。2.2系统模块设计本系统的设计主要由以下几个模块构成:ARM控制电路,语音芯片,录音电路,语音输出与控制等五个模块。见图2.1所示ARM控制模块录音及控制电路语音芯片播放及控制电路键盘控
7、制电路图2.1系统模块图3系统模块介绍3.1 ARM控制模块Samsung 公司推出的16/32 位RISC 处理器S3C44B0X 为手持设备和一般类型应用提供了高性价比和高性能的微控制器解决方案。为了降低成本,S3C44B0X 提供了丰富的内置部件,包括:8KB cache,内部SRAM,LCD 控制器,带自动握手的2 通道UART,4 通道DMA,系统管理器(片选逻辑,FP/EDO/SDRAM 控制器),代用PWM 功能的5 通道定制器,I/O端口,RTC,8 通道10 位ADC,IIC-BUS 接口,IIS-BUS 接口,同步SIO 接口和PLL 倍频器。S3C44B0X 采用了ARM
8、7TDMI 内核,0.25um 工艺的CMOS 标准宏单元和存储编译器。它的低功耗精简和出色的全静态设计特别适用于对成本和功耗敏感的应用。同样S3C44B0X还采用了一种新的总线结构,即SAMBAII(三星ARM CPU 嵌入式微处理器总线结构)。S3C44B0X的杰出特性是它的CPU核,是由ARM公司设计的16/32 位ARM7TDMI RISC处理器(66MHZ)。ARM7TDMI 体系结构的特点是它集成了Thumb 代码压缩器,片上的ICE断点调试支持,和一个32 位的硬件乘法器。S3C44B0X 通过提供全面的、通用的片上外设,大大减少了系统电路中除处理器以外的元器件配置,从而最小化系
9、统的成本。2.5V ARM7TDMI 内核,带有8K高速缓存器(SAMBA II总线体系结构,主频高至66MHz)。该控制器有如下特点:l 外部存储器控制器(FP/EDO/SDRAM控制,片选逻辑);l LCD控制器(最大支持256色STN,LCD具有专用DMA);l 2通道通用DMA、2通道外设DMA并具有外部请求引脚;l 2通道UART 带有握手协议(支持IrDA1.0, 具有16-byte FIFO)/1通道SIO;l 1通道多主IIC-BUS控制器;l 1通道IIS-BUS控制器;l 5个PWM定时器和1通道内部定时器;l 看门狗定时器;l 71个通用I/O口/8通道外部中断源;l 功
10、耗控制:具有普通,慢速,空闲和停止模式;l 通道10位ADC;l 具有日历功能的RTC;l 具有PLL的片上时钟发生器。S3C44B0X最小系统电路框图如下图3.1所示。ARM控制器复位电路输入输出设备振荡电路路路电源图3.1 S3C44B0X最小系统电路框图电源部分如下图3.2所示。图3.2 电源电路图振荡电路部分如下图3.3所示。图3.3振荡电路复位电路如下图3.4所示。图3.4 复位电路图3.2语音芯片ISD4004ISD4004系列语音芯片工作电压为3V,单片录放时间8至16分钟,音质好,适用于移动电话及其他便携式电子产品中。芯片采用CMOS 技术,内含振荡器、防混淆滤波器、平滑滤波器
11、、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI Microwire)送入。芯片采用多电平直接模拟量存储技术, 每个采样值直接存贮在片内闪烁存贮器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和金属声。采样频率可为4.0,5.3,6.4,8.0kHz,频率越低,而音质则有所下降,片内信息存于闪烁存贮器中,可在断电情况下保存100 年(典型值),反复录音10 万次。ISD4004语音芯片采用CMOS技术,内含晶体振荡器、防混叠滤波器、平滑滤波器、自动静噪、音频
12、功率放大器及高密度多电平闪烁存储阵列等如图1所示。因此只需很少的外围器件就可构成一个完整的声音录放系统。芯片设计是基于所有操作由微控制器控制,操作命令通过串行通信接口(sP1或Micmwire)送入。采样频率可为4.0Hz、5.3Hz、6.4Hz、8.0kHz,频率越低,录放时间越长,而音质则有所下降。器件工作电压3V,工作电流25-30mA,维持电流1 ,单片录放语音时间816min,音质好,适用于移动电话机及其它便携式电子产品中。l 内置微控制器串行通信接口l 3V 单电源工作l 多段信息处理l 工作电流25-30mA,维持电流1Al 不耗电信息保存100 年(典型值)l 高质量、自然的语
13、音还原技术l 10 万次录音周期(典型值)l 片内免调整时钟,可选用外部时钟l 语音芯片ISD4004语音芯片图ISD4004如下图3.5所示。图3.5 ISD4004芯片图键盘控制模块如下图3.6所示。图3.6 键盘控制电路录音&播放电路如下图3.7所示。 图3.7 录音与播放电路4系统调试4.1硬件调试 焊接好所有电路后,先进行硬件电路的调试。下载程序到RAM功能,要使用外接的RAM,需要参照ARM的寄存器说明,设置RAM的基地址,总线宽度,访问速度等等。有的SOC则还需要Remap,才能正常工作。运行Firmware时,这些设置由Firmware的初始化程序完成。但如果使用JTAG接口,
14、相关的寄存器可能还处在上电值,甚至时错误值,RAM不能正常工作,所以下载必然要失败。要正常使用,先要想办法设置RAM。在ADW中,可以在Console窗口通过Let 命令设置,在AXD中可以在Console窗口通过Set命令设置。下面是一个设置S3C44B0X的命令序列,关闭中断,设置CS0-CS3, 并进行Remap,适用于AXD(ADS带的Debug)setmem 0xfffff124,0xFFFFFFFF,32 关闭所有中断setmem 0xffe00000,0xd,32 设置CS0setmem 0xffe00004,0x,32 设置CS1setmem 0xffe00008,0xd,32
15、 设置CS2setmem 0xffe0000C,0xd,32 设置CS3setmem 0xffe00020,1,32 Remap如果要在ADW(SDT带的DEBUG)中使用,则要改为:let 0xfffff124=0xFFFFFFFF 关闭所有中断let 0xffe00000=0xd 设置CS0let 0xffe00004=0x 设置CS1let 0xffe00008=0xd 设置CS2let 0xffe0000C=0xd 设置CS3let 0xffe00020=1 Remap为了方便使用,可以将上述命令保存为一个文件config.ini, 在Console窗口输入 ob config.ini
16、 即可执行。4.2软件调试 (1)系统调试工具ADS1.2ARM ADS全称为ARM Developer Suite。是ARM公司推出的新一代ARM集成开发工具。现在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。它除了可以安装在Windows NT4,Windows 2000,Windows 98和Windows 95操作系统下,还支持Windows XP和Windows Me操作系统。ADS由命令行开发工具,ARM时实库,GUI开发环境(Code Warrior和AXD),实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应
17、用程序.在 ADS 集成开发环境中,点File-New,在显示窗口中选择ARM Excuteable Image,填写所建工程的名字,然后再添加所选择的文件进行编译,在编译前点击,点Edit 菜单,选择“DebugRelSetting”,将RO地址设置为0x0c,输出文件设为二进制文件。 (2)下载程序下载程序可以使用串口、网线、JTAG线等几种方式,但是其中由于串口传送速度比较慢而且操作起来比较复杂,推荐使用网线来下载程序。现在简单介绍这几种下载程序的具体方法。下面先介绍使用串口下载程序:在超级终端下,输入:loadb 0x0c,按下回车,0x0c0x0c6fffff: 用户装载和使用区;0
18、x0c0X0c7fffff: ARMBOOT 的只读区,引导完后可以用。点发送文件,选择 kermit 方式发送要调试的BIN 文件,界面如下图4.1所示。图 4.1 串口下载程序图发送完后会显示起始地址, 再运行 go 0x0c (起始地址)就可以了。下面再介绍用网线来下载程序。先运行TFTPD32 文件出现如下图4.2所示。图 4.2 网线下载程序图选择好要下载的文件所在的目录。注意IP 地址要和 ARM 板上的一样,可以改PC 的,可以改 板子 的,也可以改ARMBOOT 的,怎样改,在参数设置里会说的。文件名称也在参数设置里设置。配置好后把它缩进任务栏(不可关闭!)。运行 TFTP 0
19、x0c (不输入地址就取默认地址 0X0C)装载成功后输入 GO 0X0C 就可以运行。4.3系统设计流程 当硬件调试和软件调试都通过后就可以进行统调了,将程序下载到ARM片子后,按下相应的按键,检查是否能实现相应的功能,并对程序进行进一步的修改和完善使其更有效。程序包括主程序和中断子程序两部分。S3C44B0X提供了按键操作和ISD4004所需接的IO口。它接收击键功作,并将相应指令传给ISD4004,同时监控ISD4004的中断输出。 基于上述硬件原理图和相关分析,软件部分的主要任务是完成对按键进行相应的功能设置,语音服务的软件实现以及适时的语音录放。软件流程如下图4.3 所示。 图 4.
20、3 软件流程图5试验结果由于按键是采用中断方式来进行判断的,因此程序处理过程会复杂些,但是效果却比查询方式要好。在调试过程中,发现由于去抖动处理不太好,会出现按一次建却出现多次触发,后来经过处理后,基本上不会出现类似情况。 经过多次修改程序后,现在基本上能实现语音功能,按下按键后能实现相应的功能。但是需要改成的地方是语音播放处理,使其变得更加清晰,使其功能更加完善能提示录放的时间与日期,能定点播放。 该语音电路产品,具有音色自然、使用方便、单片存储、反复录放、扩展容易、功耗低微、不怕断电等许多特点,通过扩展外部设备,基于ISD4004的语音产品在通信导航设计、智能仪器仪表、治安报警系统、自动售
21、货机、电子地图、电子导游机、车载信息终端语音播报、公共汽车语音报站器、电磁报层背景音乐播放系统、语音讲解仪、电话自动应答系统、便携式语音记录装置、电子词典、语言复读机、语言音乐教学仪、智能玩具、高档电子礼品等许多领域,都有着极其广泛的应用。结束语 本文通过对ISD4004语音芯片在语音报站器中的一个实际应用的简单介绍,使读者熟悉了1SD4004的基本应用。同时本文介绍的报站器电路已经经过上机实验调试,能够可靠稳定工作。通过实验验证该语音录放系统录音和放音效果良好,单片机控制相当准确。结合了微处理器控制技术,实现对语音信息的录入和播放的准确控制,克服了原手工录音的种种弊端,极大地提高录音的质量和
22、效率。在应用方面,将该系统作为一个模块可与其他功能电路集成,实现各种功能复杂的语音系统,如电脑语音钟、手机话费查询系统、排队机、监控系统语音报警及公共汽车报站器等,具有一定的实用价值。致谢我要感谢所有曾经在学习上和生活中给予过我帮助的老师和同学们。尤其要感谢我的指导老师邓斌老师,在本次课程设计中,我从邓斌老师身上学到了很多东西。他认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。无论在理论上还是在实践中,他都给与我很大的帮助,使我学到以前在书本上所学不到的知识,这对于我以后的工作和学习都有一种巨大的帮助。学校在这方面也给我们提供了很大的支持和帮助,学校以及学院领导也比较重视,定
23、期关心设计进展,为设计提供较大的方便,同时为每个设计小组配有专门的指导老师,帮助我们能顺利完成整个设计。对于学校和老师为我的课程设计所提供的极大帮助和关心,在此我表示衷心的感谢!参考文献1杜春雷,ARM体系结构与编程M,清华大学出版社,2003年,6月2R.Rajsuman,SOC设计与测试M,北京航空航天大学出版社,2003年,7月3詹荣开,GCC中文手册M,电力出版社,2001年,3月4何立民,嵌入式系统的定义与发展历史M,机械出版社,2005年,6月5高洪亮、张国忠、杨杰,基于ISD4004的电梯语音系统设计J,电子技术2005,9月6张常年:ISD4004语音芯片的工作原理及智能控制系
24、统中的应用J.电子元件与材料,2001,6月附录:基于ARM的语音录放系统的设计与实现源程序代码 系统的软件和硬件是实现系统功能的两大组成部分。这两部分缺一不可。软件程序使单片机能够很好地控制各个模块中的器件。下面介绍系统中各个模块的程序设计。 该程序实现了语音录放的功能,按下按键一时执行停止操作,按下按键二时执行录音操作,按下按键三时执行播放操作,并且通过串口显示当前操作信息并提供调试信息 。 主程序:#include .incuTypes.h#include .inc44b0x.h#include .incconsole.h#include .incsysUtils.hvoid IoCon
25、fig (void);void KeyLedTest (void);void play (void);void rec (void);void stop (void);void Delay (unsigned int a);U32 addr;U32 pIrqStart = 0;U32 pIrqFinish = 0; U32 pIrqHandler = 0;U32 g_pTopOfROM = 0;U32 g_pBaseOfROM = 0;U32 g_pBaseOfBSS = 0;U32 g_pBaseOfZero = 0;U32 g_pEndOfBSS = 0;extern U32 GetBas
26、eOfROM (void);extern U32 GetEndOfROM (void);extern U32 GetBaseOfBSS (void);extern U32 GetBaseOfZero (void);extern U32 GetEndOfBSS (void);int main(void)addr =0x05; sysUtilsSetPllValue (24, 6, 1); IoConfig ();console_init ();printf (nnITSN - 44B0 board Test programe version 1.0.nn);sysUtilsLightLed (L
27、ED_ALL, FALSE); g_pTopOfROM = GetEndOfROM (); g_pBaseOfROM = GetBaseOfROM (); g_pBaseOfBSS = GetBaseOfBSS (); g_pBaseOfZero = GetBaseOfZero (); g_pEndOfBSS = GetEndOfBSS ();KeyLedTest ();return 0;void IoConfig (void)rPCONA = 0x1ff;rPDATB = 0x04f;rPCONB = 0x3cf; rPDATC = 0x0000;/All IO is lowrPCONC =
28、 0x5f;rPUPC = 0x3000;/PULL UP RESISTOR should be enabled to I/OrPDATD= 0x55;rPCOND= 0xaaaa;rPUPD = 0x00;rPDATE= 0x1cf;/Beep = 10rPCONE= 0x596b;rPUPE= 0x26;rPDATF = 0x0;rPCONF = 0x24900a; rPUPF = 0x1d3;rPDATG = 0xff;rPCONG = 0x0000;rPUPG = 0x00;/should be enabled rSPUCR= 0x4;/0x7; /D15-D0 pull-up dis
29、able/rSPUCR= 0x6; /D15-D0 pull-up enablerSYSCFG = 0x0e; /使用8K字节的指令缓存,write buffer disable rNCACHBE0 = 0xc;/定义非Cache区,从0x到0xbffffff,中断时进入ROM,若不允许CACHE不正常rEXTINT = 0x0; /所有的外部硬件中断为低电平触发void play(void) U32 y; sysUtilsLightLed (LED_ALL,TRUE); rPDATE=(rPDATE&0x2f);/ss=0;mosi=0;sclk=0; Delay(5); for(y=0;y
30、8;y+) rPDATE &=(1y)&0x01) rPDATE |=(16); else rPDATE &=(16); ; ; ; rPDATE |=(14); ; rPDATE |=(17); Delay(50); rPDATE=(rPDATE&0x2f); for(y=0;y16;y+) rPDATE &=(1y)&0x01) rPDATE |=(16); else rPDATE &=(14); ; rPDATE |=(17); ; rPDATE &=0xaf;/MOSI=0;SCLK=0; for(y=0;y8;y+) rPDATE&=(1y)&0x01) rPDATE |=(16);
31、 else rPDATE &=(16); rPDATE |=(14); ; rPDATE |=(17); ; rPDATE=(rPDATE&0x2f); for(y=0;y8;y+) rPDATE&=(1y)&0x01) rPDATE |=(16); else rPDATE &=(16); rPDATE |=(14);printf (rPDATE = 0x%08x.n, rPDATE); printf (play is ok!n);printf (rPDATE = 0x%08x.n, rPDATE); rPDATE |=(17); void KeyLedTest (void) U32 dwVa
32、l; rPCONG |= 0xff00; rINTMOD &= MASK_BIT(21);/INT4.5.6.7 IRQ 模式 rINTCON &= MASK_BIT(1);/IRQ使能 rEXTINT &= 0xffff; /先清除EXTINT4,5,6,7的相应设置bit位 for (;) dwVal = rINTPND; if (dwVal & MASK_BIT(21) = 0) continue; dwVal = rEXTINTPND; if (dwVal & MASK_BIT(EXTINT4) != 0) Delay(50000); rEXTINTPND |= MASK_BIT(EX
33、TINT4); /外部中断4 产生了,点亮LED1 stop(); sysUtilsLightLed (LED1, TRUE); rPDATE |=0xd8; if (dwVal & MASK_BIT(EXTINT5) != 0) Delay(50000); rEXTINTPND |= MASK_BIT(EXTINT5); /外部中断4 产生了,点亮LED2 rec(); sysUtilsLightLed (LED2, TRUE); rPDATE |=0xd8; if (dwVal & MASK_BIT(EXTINT6) != 0) Delay(50000); rEXTINTPND |= MASK_BIT(EXTINT6); /外部中断4 产生了,点亮LED3 play(); sysUtilsLightLed (LED3, TRUE); rPDATE |=0xd8; if (dwVal & MASK_BIT(EXTINT7) != 0) rEXTINTPND |= MASK_BIT(EXTINT7); /外部中断4 产生了,点亮LED1,2,3 sysUtilsLightLed (LED_ALL, FALSE); /最后清除中断位 /rI_ISPC |= MASK_BIT(21); rI_ISPC = dwVal;