版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-5"\h\z\o"CurrentDocument"绪论 1\o"CurrentDocument"第1章语音录放器的技术方案及硬件电路设计 2\o"CurrentDocument"硬件设计方案 2\o"CurrentDocument"芯片简介 2TMS320C5416 2TLV320AIC23 2NANDFLASH 3\o"CurrentDocument"第2章语音录放器的应用软件设计 3\o"CurrentDocument"2.1主程序模块 3\o"CurrentDocument"2.2录音子程序 4\o"CurrentDocument"放音子程序 5\o"CurrentDocument"按键处理程序 6\o"CurrentDocument"小结和谢辞 9\o"CurrentDocument"参考文献 10附录 11绪论DSP技术在音频处理领域的应用越来越广。目前,在很多语音处理系统中都用到了语音录放模块,采集现场的声音并存储起来供以后回放。语音处理系统的实时性、功耗、体积、以及对语音信号的保真度都是很影响系统性能的关键因素。因此,语音录放器的设计是非常必要的。本设计在我们的试验箱上完成,试验箱中采用的高速TMS320C5416DSP芯片,最高频率能达到160MIPS,能够很好的解决系统的实时性;采用的数字编解码芯片TLV320AIC23(以下简称AIC23)具有16~32位采样精度,录音回放模式下仅23mW的功耗。因此,该音频编解码芯片与TMS320C5416DSP的结合是可移动数字音频录放系统、现场语音采集系统的理想解决方案。本文首先介绍了基于TMS320C5416DSP芯片的语音录放系统的工作原理,给出了整体设计方案和工作框图,然后介绍了基于TMS320C5416DSP芯片的语音录放系统的软件设计。在整个设计过程中,我们采用了TLV320AIC23DSP芯片为核心音频录放接口器件,结合TMS320C5416DSP芯片,语音数据存储NANDFLASH存储器等进行了硬件设计。软件部分则采用模块化的设计方法,用C语言来实现。该语音录放器的设计本应能够完成语音采集,播放,存储,回放,基本实现了语音录放功能,但本次设计只完成了语音的采集,播放和回放,而没有完成存储。关键词:TMS320C5416,TLV320AIC23,DSP,语音录放第1章语音录放器的技术方案及硬件电路设计1.1硬件设计方案DSP技术在音频处理领域的应用越来越广。目前,在很多语音处理系统中都用到了语音录放模块,采集现场的声音并存储起来供以后回放。语音处理系统的实时性、功耗、体积、以及对语音信号的保真度都是很影响系统性能的关键因素。本系统用DSP芯片TMS320C5416与音频编解码芯片TLV320AIC23实现硬件接口和软件设计,并在此硬件基础上实现语音信号的采集、播放、存储、回放。本系统包括音频采集、DSP对语音信号的处理、Flash存储三部分。系统结构如图1-1所示:MCBSP0MCBSP1控制接口图1-1总体设计图1.2芯片简介本设计中的主要芯片有TMS320C5416、TLV320AIC23和NANDFALSH。TMS320C5416C5416的CPU的基本组成如下:40位算术逻辑运算单元(ALU);2个40位累加器(ACCA,ACCB);1个支持16—30位移位的桶形移位寄存器;乘法器一加法器单元(MAC);比较选择和存储单元(CSSU);指数编码器;CPU状态和控制寄存器。TMS320C5416DSP芯片共有192千字的可寻址存储空间。这192千字的存储空间分为3个独立的可选择空间,分别为:64千字的程序存储空间;64千字的数据存储空间;64千字的I/O空间。所有的TMS320C5416DSP芯片都包括内部随机存储器(RAM)和只读存储器(ROM)。TLV320AIC23从适应语音信号频率、满足实时性、降低成本、简化设计的要求出发,本系统选择TLV320AIC23。AIC23是一种高性能的立体声音频Codec芯片作为从设备,主要完成输入语音信号的A/D转换,语音采样编解码及滤波处理,该芯片构成简单,功能强大。AIC23工作电压3.3伏特,能在数字和模拟电压下工作,与TMS320C5416的I/O电压相兼容,其控制接口和数字接口与DSP的MCBSP端口能够无缝连接。AIC23的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术(Sigma-delta—般用于ADC中,是高精度的A/D转换器,该转换器的特点是将绝大多数的噪声从动态转移到阻态),可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和1OOdB。NANDFLASHNANDFlash以容量大价格低的优势被广泛应用在便携式设备中,同时Flash存储器在写入时需要复杂的操作命令,这样确保了数据写入的正确性。Flash有8位I/O端口,地址、命令字以及数据复用这8位I/O端口。它采用复杂的操作顺序来区分地址、命令、数据信息。DSP采集到的32位语音数据通过外部数据总线的低8位分4次,从左声道的高8位到右声道的低8位依次写入Flash。第2章语音录放器的应用软件设计本语音录放系统的软件开发环境是TI公司的DSP集成开发环境CCS2.0。CCS提供了软件开发、程序调试和系统仿真环境。CCS不但能支持汇编语言,而且还支持C/C++语言进行软件开发,因此本语音录放系统的软件采用C语言和汇编语言混合编写,主程序和一部分子程序用C语言编写,其中也嵌套了部分汇编语句。这样,既容易进行调试,又可以提高软件的执行效率,可达到最佳利用DSP芯片的软硬件资源。本系统有两种工作方式,一种是现场采集并播放,即系统采集现场的线路输入信号或麦克语音信号,并存储在Flash中,在采集的过程中,同时通过耳机播出。另一种是播放录制的语音数据,即不采集现场语音信号,直接播放已经存储在Flash中的语音数据。这两种工作方式可以在系统初始化工程时通过按键选择。程序清单见附录。2.1主程序模块主程序模块语音录放工作过程是:首先对系统进行初始化,显示待机状态,然后判断是否有按键按下?如果没有按键按下就继续等待,如果有按键按下看是否显示录音状态?如果显示录音状态就开始录音,如果不是显示录音状态,看是否显示放音状态?如果是显示放音状态就开始放音,如果不是显示放音状态,就返回等待显示待机状态。主程序流程如图2-1所示。
图2-1主程流程图2.2录音子程序语音录放系统的子程序模块录音工作过程是:首先初始化TLV320AIC23为录音状态,然后读取语音录音数据放入数据缓冲区,判断录音数据缓冲区是否为满?如果录音缓冲区为满就把录音数据存入FLASH存储器,如果录音数据缓冲区不满就判断是否录音结束?如果录音结束那么该子程序结束,如果录音未结束就返回上面,继续读取语音数据放入缓冲区,进行下一个循环。该录音系统子程序模块如图2-2所示。
2.3放音子程序语音录放系统的子程序模块放音工作过程是:首先初始化TLV320AIC23为放音状态,然后从FLASH读取语音录音数据放入放音数据缓冲区,放音数据开始输出,判断放音数据缓冲区是否为空?如果放音数据缓冲区不空继续输出放音数据,如果放音数据缓冲区为空就判断是否放音结束?如果放音结束那么该子程序结束,如果放音未结束就返回上面,继续从FLASH读取语音录音数据放入放音数据缓冲区,进行下一个循环。该放音系统子程序模块如图2-3所示。
*30CODEC库嗥裁一McbspO袒更吐Mchsp]押端化»■ *30CODEC库嗥裁一McbspO袒更吐Mchsp]押端化»■ ik$KH逊扒到产'■:Buffer威KKB数嶠到冃*H-ufler曲皆程序|图2-3放音系统子程序模块2.4按键处理程序while(1){i=Get_Key();waitloop(0x04000);j=Get_Key();if(i==j){flag=0xffff;key_val=j;/*Savekey_val*/switch(key_val){default:break;case1:cur_row=4;cur_col=10;LCD_pr_chars("Mic_Bypass",17)cur_row=5;cur_col=15;LCD_pr_chars("",17)mic_bypass();break;case2:cur_row=4;cur_col=10;LCD_pr_chars("Line_In_Bypass",17);cur_row=5;cur_col=15;LCD_pr_chars("",17);line_in_bypass();break;case3:cur_row=4;cur_col=10;LCD_pr_chars("Mic_Rec_Loopback",17);cur_row=5;cur_col=15;LCD_pr_chars("",17);mic_record();break;case4:cur_row=4;cur_col=10;LCD_pr_chars("Line_Rec_Loopback",17);cur_row=5;cur_col=15;LCD_pr_chars("",17);line_in_record();break;case6:cur_row=4;cur_col=10;LCD_pr_chars("codec_play",17);cur_row=5;cur_col=15;",17);LCD_pr_chars("codec_play();break;",17);}小结和谢辞本次课设我和本组同学共同完成了这次DSP的语音录放实验,通过这次的设计使我认识到本人对DSP方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得没有完成基本要求,本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的实时时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。最后,感谢老师一个学期来对我们的教育,正是由于老师的精彩的课程和对我们严格的要求,使得我的课程设计能够顺利的完成,同时在课程设计过程中,我们巩固和学习了我们的单片机知识。相信这对我以后的课程设计和毕业设计乃至今后的工作将会有很大的帮助!参考文献邹彦.DSP原理及应用.北京:电子工业出版社.2001卢官明、宗肪.数字音频原理及应用.北京:机械工业出版社.2001宋瑜.数字音频及多媒体广播接收系统.北京:世界广播电视出版社.2003张韶高.数字声频技术原理及应用.北京:国防工业出版社.2001林福宗.多媒体技术基础.北京:清华大学出版社.2001陈有卿.实用语音与音效及集成电路.北京:中国电力出版社.2003赵训威.基于TMS320系列DSP芯片的应用与开发.北京:人民邮电出版社.2001附录程序清单#include<stdio.h>#include"mmdrv.h"#include"mcbsp.h"#include"cpu_reg.h"#include"lcd_86.h"#include"led.h"#include"Codeccfg.h"#include"NANDREAD.h"#include"nandwrite.h"ioportunsignedportefff;#defineIO_374portefffvoidinit_exint1_interrupt();voidinit_GPIO(void);voidmic_bypass(void);voidline_in_bypass(void);voidmic_record(void);voidline_in_record(void);voidcodec_play(void);voidDEAL_RX(unsignedinti);unsignedintDEAL_TX(void);voidstop_interrupt();//stopreceive&tranmitinterruptunsignedintflag=0xffff;unsignedlongsecter_num;unsignedintping_buf1[0x2000];unsignedintping_buf2[0x2000];unsignedintenc_flag=0;unsignedintinput_flag=0;unsignedintrl_flag=0;unsignedintcount1=0;#definemax_secter_num33#defineinit_secter_num0voidmain(void){unsignedinti,j;unsignedintkey_val;
SWWSR=0x7fff;SWCR=0x0001;BSCR=0x8006;CLKMD=PLL_DIV_INIT;waitloop(0x0400);CLKMD=PLL_LOCK_INIT_X(9);waitloop(0x0400);PMST=0x0168;Init_MCBSP_codec();init_codec_linein();init_exint1_interrupt();init_GPIO();init_lcd();LCD_clear(0);cur_row=2;cur_col=20;LCD_pr_chars("RECORD_PLAYTEST",16);cur_row=3;cur_col=1;
LCD_pr_chars("=======================",23);cur_row=4;cur_col=10;IO_374=0xffff;//374IO_374=0xffff;//374enableClose_LED_Data();Close_LED_Traf();Close_LED_sign();waitloop(0x0400Close_LED_Data();Close_LED_Traf();Close_LED_sign();waitloop(0x0400);while(1){i=Get_Key();waitloop(0x04000);j=Get_Key();if(i==j){flag=0xffff;key_val=j;/*Savekey_val*/switch(key_val){default:break;case1:LCD_pr_chars("Mic_Bypass"cur_row=5;cur_col=15;LCD_pr_chars(""mic_bypass();break;case2:cur_row=4;cur_col=10;LCD_pr_chars("Line_In_Bypass"cur_row=5;cur_col=15;LCD_pr_chars(""line_in_bypass();break;case3:cur_row=4;cur_col=10;LCD_pr_chars("Mic_Rec_Loopback"cur_row=5;cur_col=15;LCD_pr_chars(""mic_record();break;case4:cur_row=4;cur_col=10;LCD_pr_chars("Line_Rec_Loopback"cur_row=5;cur_col=15;LCD_pr_chars(""line_in_record();break;case6:cur_row=4;cur_col=10;LCD_pr_chars("codec_play"cur_row=5;cur_col=15;LCD_pr_chars(""codec_play();break;,17);17);,17);17);,17);17);,17);17);,17);17);,17);voidinit_exint1_interrupt(){IFR=0xffff;IMR=0x0002;//EXINT1=IMR.1asm("\trsbx\tintm");}voidinit_tx_interrupt()//transmitinterrupt{IFR=0xffff;IMR=0x22;//BXINT0=IMR.5=1,BXINT0=IMR.4=0,EXINT1=IMR.1=1asm("\trsbx\tintm");}voidinit_re_interrupt()//receiveinterrupt{IFR=0xffff;IMR=0x12;//BXINT0=IMR.5=0,BXINT0=IMR.4=1,EXINT1=IMR.1=1asm("\trsbx\tintm");}voidstop_interrupt()//stopreceive&tranmitinterrupt{IFR=0xffff;IMR=0x0002;//EXINT1=IMR.1asm("\trsbx\tintm");}interruptvoidBRINT0_isr(void){unsignedinti;i=MCBSP0_DRR1;/*DRR1=txdata*/MCBSP0_DXR1=i;DEAL_RX(i);}interruptvoidBXINT0_isr(){MCBSP0_DXR1=DEAL_TX();}interruptvoidEXINT1_isr(){unsignedinti;IO_374=0xffff;//374enableClose_LED_Data();Close_LED_Traf();Close_LED_sign();IFR=0xffff;//while(!(GPIOSR&0x01)){asm("\tnop");asm("\tnop");}flag=0;//~flag;cur_row=5;cur_col=15;LCD_pr_chars("Codecr_Stop_play",17);for(i=0;i<8;i++){Disp_LED_sign(0,i);}}voidinit_GPIO(void){GPIOCR=0xfffe;//EXINT1=GPIO.0=input=0,nand_cs=GPIO.6=output=1GPIOSR=0x0040;//GPIO.6=output=1}voidmic_bypass(void){unsignedintdata;Init_MCBSP_codec();init_codec_mic();while(flag){data=mcbsp0_codec_rx_data();mcbsp0_codec_tx_data(data);}init_codec_linein();}voidline_in_bypass(void){unsignedintsign_bit=0;unsignedintsign_state=1;//1unsignedintdata;Init_MCBSP_codec();init_codec_linein();while(flag){data=mcbsp0_codec_rx_data();mcbsp0_codec_tx_data(data);Disp_LED_sign((sign_state&0x01),sign_bit);sign_bit++;if(sign_bit==0x7f0){sign_bit=0;sign_state=~sign_state;}}init_codec_mic();}voidmic_record(void){unsignedintsign_bit=0;unsignedintsign_state=1;Init_MCBSP_codec();init_codec_mic();init_re_interrupt();//receiveinterruptenc_flag=0;secter_num=init_secter_num;count1=0;MCBSP0_DXR1=MCBSP0_DRR1;/*DRR1=txdata*/while(flag){if(enc_flag){Disp_LED_sign((sign_state&0x01),sign_bit);sign_bit++;if(sign_bit==8){sign_bit=0;sign_state=~sign_state;}enc_flag=0;if(input_flag){erase_nand_flash(secter_num);Write_nand_flash_block(secter_num,ping_buf2,0);}else{erase_nand_flash(secter_num);Write_nand_flash_block(secter_num,ping_buf1,0);cur_row=5;cur_col=15;LCD_pr_chars("Codecr_Stop_play",17);}secter_num+=32;if(secter_num>32*max_secter_num){asm("\tnop");asm("\tnop");asm("\tnop");secter_num=init_secter_num;break;}}}Close_LED_Data();Close_LED_Traf();Close_LED_sign();cur_row=5;cur_col=15;LCD_pr_chars("Codecr_Stop_play",17);stop_interrupt();//stopreceive&tranmitinterruptinit_codec_linein();}voidline_in_record(void){unsignedintsign_bit=0;unsignedintsign_state=1;enc_flag=0;secter_num=init_secter_num;count1=0;Init_MCBSP_codec();//init_codec_linein();init_re_interrupt();//receiveinterruptMCBSP0_DXR1=MCBSP0_DRR1;/*DRR1=txdata*/while(flag){if(enc_flag){Disp_LED_sign((sign_state&0x01),sign_bit);sign_bit++;if(sign_bit==8){sign_bit=0;sign_state=~sign_state;}enc_flag=0;if(input_flag){erase_nand_flash(secter_num);Write_nand_flash_block(secter_num,ping_buf2,0);}else{erase_nand_flash(secter_num);Write_nand_flash_block(secter_num,ping_buf1,0);}secter_num+=32;if(secter_num>32*max_secter_num){asm("\tnop");asm("\tnop");asm("\tnop");secter_num=init_secter_num;break;}}}Close_LED_Data();Close_LED_Traf();Close_LED_sign();cur_row=5;cur_col=15;LCD_pr_chars("Codecr_Stop_play",17);stop_interrupt();//stopreceive&tranmitinterrupt}voidcodec_play(void){unsignedintsign_bit=0;unsignedintsign_state=1;enc_flag=0;secter_num=init_secter_num+32;input_flag=1;count1=0;Init_MCBSP_codec();read_nand_flash_block(secter_num,ping_buf2,0);secter_num+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《喜迎中秋模板》课件
- 三年级下册科学教科版课件第1课时 仰望天空
- 增值税及其会计处理教学课件
- 制作课件心得范文
- 土地招商协议书(2篇)
- 《市场机制原理》课件
- 《秘书长办》课件
- 2021年安徽省宿州市公开招聘警务辅助人员(辅警)笔试必刷测试卷(1)含答案
- 2022年山西省临汾市公开招聘警务辅助人员(辅警)笔试摸底测试(2)卷含答案
- 2024年安徽省淮南市公开招聘警务辅助人员(辅警)笔试冲刺自测题二卷含答案
- 高层建筑用电安全管理制度
- 2024-2030年中国化工设计市场发展前景调研及投资战略分析报告
- 2024年低压电工复审模拟考试题库及答案(共230题)
- 2024-2025学年语文二年级上册统编版期末测试卷(含答案)
- 教育机构课程顾问咨询流程
- 2024年学校意识形态工作总结模版(5篇)
- 葡萄酒文化与鉴赏学习通超星期末考试答案章节答案2024年
- 人教版(2024新版)七年级上册数学第六章《几何图形初步》测试卷(含答案)
- 劳动教育学习通超星期末考试答案章节答案2024年
- 科斯的学术性著作:社会成本问题
- 海南劳模休养活动心得体会
评论
0/150
提交评论