实验六 可自举的音频信号处理系统Word文件下载.docx
- 文档编号:16807224
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:22
- 大小:451.45KB
实验六 可自举的音频信号处理系统Word文件下载.docx
《实验六 可自举的音频信号处理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验六 可自举的音频信号处理系统Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
1.自举列表的生成
选用hex500.exe程序,根据DSK板级的flashROM,以及flashburn根据要求,合理设置转换选项,生成自举列表
2.利用flashburn焼写DSP
flashburn工具可以通过FBTC5416.out程序,将按转换生成的自举列表文件规定,将DSP程序写进DSK板级flashROM中
四实验设备
1.PC机一台
2.TMS320C5416DSK一套
3.话筒,扬声器
五实验步骤
1.建立一个工程,建立源代码文件,编写DSP应用程序源代码。
保存源文件到当前工程所在的文件夹,选择addfilestoprojects命令,打开一个文件选择对话框,选择刚保存的源文件加入到工程中。
此处工程文件选用第五次CODEC实验时的工程文件,由于第五次实验已经实现用dip开关控制程序是否进入语音回放模式,且利用LED灯的亮灭显示当前程序运行的状态,所以本次实验需要实现利用dip开关控制是否启用滤波器,实现按下按键2时出现流水灯效果和按下按键3时出现输出一固定频率的音频三项实验要求。
2.修改工程的编译链接选项
特别注意当在DSP/BIOS配置文件全局设置中函数调用选择为“far”时,必须在buildoptions对话框的compiler选项卡的advanced选项页中选择使用远调用,即设置编译选项使用远调用-mf,basic选项中输入-V548,linker选项卡中mapfilename文本框中输入map文件的地址和名称。
3.选择ccs安装目录加入到工程,即可调用板级支持库函数,访问PCM3002,DIP开关,LED指示灯。
也可以选择在编译链接选项中的linker选项卡加入。
4.对当前工程进行编译链接生成可执行程序
5.下载该DSP程序,按不同的dip开关键,检查是否实现需要的功能,如达到要求,DSP程序设计即完成。
①实现用dip开关1控制程序是否进入语音回放模式且利用第一个LED灯的亮灭显示当前程序运行的状态
首先在main函数之外定义函数taskfun1:
设置循环体,判断键值是否发生改变,键值改变时开启语音回放并开启第一个LED灯,键值未发生改变时,保持原来状态:
主函数中实现对语音信号的采集,采集完毕后再一次判断跳出循环:
②实现利用dip开关控制是否启用滤波器
是否启用滤波器函数时使用MATLAB软件通过FDATool设计滤波系数,点击designfilters生成头文件,复制粘贴进入Fir_oef.h文件并保存
本次实验未重复实验,所以实验报告中只给出相关实验原理及相应程序,具体见FIR滤波实验。
③实现利用dip开关2控制四个LED灯是否出现流水灯效果
首先在main函数之外定义函数taskfun2:
主函数中将port0端口循环左移实现流水灯效果:
④实现利用dip开关3控制是否输出一固定频率的音频
首先在main函数之外定义函数taskfun3:
并调用sinetable函数:
主函数中实现对音频信号的采集:
6.复制hex500.exe文件到工程文件夹。
创建转换用CMD文件,修改其中对应选项的值符合当前工程设置,特别之一-e选项中,入口点地址需要打开奔工程链接是生成的map文件查找_c_int00的地址。
7.在开始菜单运行命令中输入cmd命令,调用命令提示符窗口,切换到当前工程文件夹后,输入转换命令,例如hex500burnn_hex.cmd,生成DSP程序的自举列表。
8.在ccsforDSK中调用flashburn软件,下载out文件,实现与DSK连接后,可以选择生成的自举列表文件,进行焼写。
注意焼写前应先擦除flashROM中的内容。
9.对DSK重新上电复位,按dip开关键,观察DSK功能,体会系统自举功能
完成程序自举后,程序在DSP上电复位之后,BootLoader程序将读取flashROM中的代码到指定的程序空间,实现系统自举。
此时,分别按DSP上dip的各个键,将执行工程设计中设计的功能。
六总结与体会
1.实现多个程序功能时可以在函数中定义多个函数。
通过循环扫描判断状态并跳转到相关函数中实现相应功能。
2.主函数中有多个函数时,每个函数执行完之后都要使用return语句跳出该函数,否则程序永远在该函数中循环,无法正常实现其他函数的功能。
3.编写函数要勇于尝试,发现问题并解决问题。
4.使用BootLoader自举功能可以在一定程度上解决应用程序永久存储和高速运行之间的矛盾,使程序在DSP上电复位之后将DSP应用程序从外部慢速设备搬移进入片内映射到程序空间的高速存储设备,从而使DSP程序得以高速运行。
附录:
可自举的音频信号处理实验程序如下:
/******************************************************************************
*Copyright(c)2015SoochowUniversityDSPTech.Center.AllRightsReserved.
*History:
*DateAuthorsChanges
*2015/12/30HLCaoCreated.
******************************************************************************/
#include<
stdio.h>
csl.h>
csl_mcbsp.h>
csl_irq.h>
intsinetable[40]={0x0000,0x000f,0x001e,0x002d,0x003a,0x0046,0x0050,0x0059,0x005f,0x0062
0x0063,0x0062,0x005f,0x0059,0x0050,0x0046,0x003a,0x002d,0x001e,0x000f
0x0000,0xfff1,0xffe2,0xffd3,0xffc6,0xffba,0xffb0,0xffa7,0xffa1,0xff9e,0xff9d
0xff9e,0xffa1,0xffa7,0xffb0,0xffba,0xffc6,0xffd3,0xffe2,0xfff1};
/*---------------------------------------------------------------------------------------------------------------------------*/
#defineN20
/*Inthisexample,theMCBSPisconfiguredindigitalloopback*/
/*mode,with2-16bitdatatransfer,*/
/*MCBSPsetupisperformedinaTSKfunctionthatexecuteson*/
/*exitfrom"
main"
*/
/*CreateaMCBSPconfigurationstructure*/
staticMCBSP_ConfigConfigLoopBack16={
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF,/*DLB=0*/
MCBSP_SPCR1_RJUST_RZF,/*RJUST=0*/
MCBSP_SPCR1_CLKSTP_DISABLE,/*CLKSTP=0*/
MCBSP_SPCR1_DXENA_NA,/*DXENA=0*/
MCBSP_SPCR1_ABIS_DEFAULT,/*ABIS=0*/
MCBSP_SPCR1_RINTM_RRDY,/*RINTM=0*/
MCBSP_SPCR1_RRST_DISABLE/*RRST=0*/
),
MCBSP_SPCR2_RMK(
MCBSP_SPCR2_FREE_NO,/*FREE=0*/
MCBSP_SPCR2_SOFT_NO,/*SOFT=0*/
MCBSP_SPCR2_FRST_RESET,/*FRST=0*/
MCBSP_SPCR2_GRST_RESET,/*GRST=0*/
MCBSP_SPCR2_XINTM_XRDY,/*XINTM=0*/
MCBSP_SPCR2_XRST_DISABLE/*XRST=0*/
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_OF
(1),/*RFRLEN1=1*/
MCBSP_RCR1_RWDLEN1_16BIT/*RWDLEN1=010b*/
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE,/*RPHASE=0*/
MCBSP_RCR2_RFRLEN2_OF(0),/*RFRLEN2=0*/
MCBSP_RCR2_RWDLEN2_DEFAULT,/*RWDLEN2=0*/
MCBSP_RCR2_RCOMPAND_MSB,/*RCOMPAND=0*/
MCBSP_RCR2_RFIG_YES,/*RFIG=0*/
MCBSP_RCR2_RDATDLY_0BIT/*RDATDLY=0*/
),
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_OF
(1),/*XFRLEN1=1*/
MCBSP_XCR1_XWDLEN1_16BIT/*XWDLEN1=2*/
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE,/*XPHASE=0*/
MCBSP_XCR2_XFRLEN2_OF(0),/*XFRLEN2=0*/
MCBSP_XCR2_XWDLEN2_DEFAULT,/*XWDLEN2=0*/
MCBSP_XCR2_XCOMPAND_MSB,/*XCOMPAND=0*/
MCBSP_XCR2_XFIG_YES,/*XFIG=0*/
MCBSP_XCR2_XDATDLY_0BIT/*XDATDLY=0*/
MCBSP_SRGR1_RMK(
MCBSP_SRGR1_FWID_OF(0),/*FWID=0*/
MCBSP_SRGR1_CLKGDV_OF(0)/*CLKGDV=0*/
MCBSP_SRGR2_RMK(
MCBSP_SRGR2_GSYNC_DEFAULT,/*FREE=0*/
MCBSP_SRGR2_CLKSP_RISING,/*CLKSP=0*/
MCBSP_SRGR2_CLKSM_DEFAULT,/*CLKSM=0*/
MCBSP_SRGR2_FSGM_DXR2XSR,/*FSGM=0*/
MCBSP_SRGR2_FPER_OF(0)/*FPER=0*/
MCBSP_MCR1_RMCM_ELDISABLE,/*MCR12=1*/
MCBSP_MCR2_XMCM_DISXP,/*MCR12=1*/
MCBSP_PCR_RMK(
MCBSP_PCR_XIOEN_SP,/*XIOEN=0*/
MCBSP_PCR_RIOEN_SP,/*RIOEN=0*/
MCBSP_PCR_FSXM_EXTERNAL,/*FSXM=0*/
MCBSP_PCR_FSRM_EXTERNAL,/*FSRM=0*/
MCBSP_PCR_SCLKME_NO,/*SCLKME=0*/
MCBSP_PCR_CLKXM_INPUT,/*CLKXM=1*/
MCBSP_PCR_CLKRM_INPUT,/*CLKRM=0*/
MCBSP_PCR_FSXP_ACTIVEHIGH,/*FSXP=0*/
MCBSP_PCR_FSRP_ACTIVEHIGH,/*FSRP=0*/
MCBSP_PCR_CLKXP_FALLING,/*CLKXP=1*/
MCBSP_PCR_CLKRP_RISING/*CLKRP=1*/
0x0005u,/*RCERA*/
0x0000u,/*RCERB*/
0x0000u,/*RCERC*/
0x0000u,/*RCERD*/
0x0000u,/*RCERE*/
0x0000u,/*RCERF*/
0x0000u,/*RCERG*/
0x0000u,/*RCERH*/
0x000au,/*XCERA*/
0x0000u,/*XCERB*/
0x0000u,/*XCERC*/
0x0000u,/*XCERD*/
0x0000u,/*XCERE*/
0x0000u,/*XCERF*/
0x0000u,/*XCERG*/
0x0000u/*XCERH*/
};
/*Createdatabuffersfortransfer*/
Uint16xmt_L,xmt_R,rcv_L,rcv_R;
Uint16Flag_working;
ioportUint16port7;
ioportintport0;
intkeyvalue,oldkeyvalue,flag,flag1;
intvalue_port0=0x1;
MCBSP_HandlemhMcbsp;
voidDSP_init(void);
voidtaskFunc1(void);
voidtaskFunc2(void);
voidtaskFunc3(void);
/*----------------------------------------------------------------------------*/
voidmain(){
/*InitializeCSLlibrary,thisstepisrequired*/
CSL_init();
/*InitializeDSP*/
DSP_init();
/*initialxmt_L,xml_R,rcv_L,rcv_R*/
xmt_L=0;
xmt_R=0;
rcv_L=0;
rcv_R=0;
while
(1)
{
---------------------------------------------------------------------------------------------------------------------------------
keyvalue=port0&
0x10;
if(keyvalue)
oldkeyvalue=keyvalue;
Flag_working=0;
port0=0x0;
}
else
oldkeyvalue=keyvalue;
Flag_working=1;
port0=0x1;
taskFunc1();
keyvalue=port0&
0x20;
flag=0;
flag=1;
taskFunc2();
0x40;
flag1=0;
flag1=1;
taskFunc3();
/*Callexamplefunctiontoperformtask*/
}
/*InitialDSP*/
voidDSP_init(void)
{
Uint16Temp;
Temp=port7;
Temp=Temp|0x4;
port7=Temp;
Temp=(Temp&
~0x03)|0x02;
port7=Temp;
Temp=Temp&
(~0x04);
Temp=Temp|0x08;
/*initializePMSTandsetIPTR,mc/mp,ovlyandDROM*/
asm("
STM#0xA8,PMST"
);
/*OpenMCBSPPort2,thiswillreturnaMCBSPhandlethatwill*/
/*beusedincallstootherCSlfunctions.*/
mhMcbsp=MCBSP_open(MCBSP_PORT2,MCBSP_OPEN_RESET);
/*WriteconfigurationstructurevaluestoMCBSPcontrol*/
/*registers*/
MCBSP_config(mhMcbsp,&
ConfigLoopBack16);
/*--------------audioprocessing---------------------------------*/
voidtaskFunc1(void){
Uint16err=0;
printf("
<
MCBSP>
\n"
)
/*TakeMCBSPreceiveandtransmitoutofreset*/
MCBSP_start(mhMcbsp,MCBSP_RCV_START|MCBSP_XMIT_START,0);
keyvalue=port0&
//现用dip开关1控制程序是否进入语音回放模式且利用第一个LED灯的亮灭显示当前程序运行的状态
if(oldkeyvalue!
=keyvalue)
{
if(keyvalue)
Flag_working=0;
port0=0x0;
}
else
Flag_working=1;
port0=0x1;
while(Flag_working)
/*WaitforRRDYsignaltoreaddatafromDRR*/
while(!
MCBSP_rrdy(mhMcbsp)){;
/*Read16bitvaluefromDRR*/
rcv_L=MCBSP_read16(mhMcbsp);
rcv_R=MCBSP_read16(mhMcbsp);
/*Loopback.
Thesampledreceivedcanbeprocessedbydigitalsignalprocessing,andoutputedtoDXR*/
xmt_L=rcv_L;
xmt_R=rcv_R;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 可自举的音频信号处理系统 实验 音频 信号 处理 系统