1、1.自举列表的生成选用hex500.exe程序,根据DSK板级的flashROM,以及flashburn根据要求,合理设置转换选项,生成自举列表2.利用flashburn焼写DSPflashburn工具可以通过FBTC5416.out程序,将按转换生成的自举列表文件规定,将DSP程序写进DSK板级flashROM中四 实验设备1.PC机一台2.TMS320C5416 DSK一套3.话筒,扬声器五 实验步骤1.建立一个工程,建立源代码文件,编写DSP应用程序源代码。保存源文件到当前工程所在的文件夹,选择add files to projects命令,打开一个文件选择对话框,选择刚保存的源文件加入
2、到工程中。此处工程文件选用第五次CODEC实验时的工程文件,由于第五次实验已经实现用dip开关控制程序是否进入语音回放模式,且利用LED灯的亮灭显示当前程序运行的状态,所以本次实验需要实现利用dip开关控制是否启用滤波器,实现按下按键2时出现流水灯效果和按下按键3时出现输出一固定频率的音频三项实验要求。2.修改工程的编译链接选项特别注意当在DSP/BIOS配置文件全局设置中函数调用选择为“far”时,必须在build options对话框的compiler选项卡的advanced选项页中选择使用远调用,即设置编译选项使用远调用-mf,basic选项中输入-V548,linker选项卡中map
3、filename文本框中输入map文件的地址和名称。3.选择ccs安装目录加入到工程,即可调用板级支持库函数,访问PCM3002,DIP开关,LED指示灯。也可以选择在编译链接选项中的linker选项卡加入。4.对当前工程进行编译链接生成可执行程序5.下载该DSP程序,按不同的dip开关键,检查是否实现需要的功能,如达到要求,DSP程序设计即完成。实现用dip开关1控制程序是否进入语音回放模式且利用第一个LED灯的亮灭显示当前程序运行的状态首先在main函数之外定义函数taskfun1:设置循环体,判断键值是否发生改变,键值改变时开启语音回放并开启第一个LED灯,键值未发生改变时,保持原来状态
4、:主函数中实现对语音信号的采集,采集完毕后再一次判断跳出循环:实现利用dip开关控制是否启用滤波器是否启用滤波器函数时使用MATLAB软件通过FDATool设计滤波系数,点击design filters生成头文件,复制粘贴进入Fir_oef.h文件并保存本次实验未重复实验,所以实验报告中只给出相关实验原理及相应程序,具体见FIR滤波实验。实现利用dip开关2控制四个LED灯是否出现流水灯效果首先在main函数之外定义函数taskfun2:主函数中将port0端口循环左移实现流水灯效果:实现利用dip开关3控制是否输出一固定频率的音频首先在main函数之外定义函数taskfun3:并调用sine
5、table函数:主函数中实现对音频信号的采集:6.复制hex500.exe文件到工程文件夹。创建转换用CMD文件,修改其中对应选项的值符合当前工程设置,特别之一-e选项中,入口点地址需要打开奔工程链接是生成的map文件查找_c_int00的地址。7.在开始菜单运行命令中输入cmd命令,调用命令提示符窗口,切换到当前工程文件夹后,输入转换命令,例如hex500burnn_hex.cmd,生成DSP程序的自举列表。8.在ccsfor DSK中调用flash burn软件,下载out文件,实现与DSK连接后,可以选择生成的自举列表文件,进行焼写。注意焼写前应先擦除flashROM中的内容。9.对DS
6、K重新上电复位,按dip开关键,观察DSK功能,体会系统自举功能完成程序自举后,程序在DSP上电复位之后,BootLoader程序将读取flashROM中的代码到指定的程序空间,实现系统自举。此时,分别按DSP上dip的各个键,将执行工程设计中设计的功能。六 总结与体会1.实现多个程序功能时可以在函数中定义多个函数。通过循环扫描判断状态并跳转到相关函数中实现相应功能。2.主函数中有多个函数时,每个函数执行完之后都要使用return语句跳出该函数,否则程序永远在该函数中循环,无法正常实现其他函数的功能。3.编写函数要勇于尝试,发现问题并解决问题。4.使用BootLoader自举功能可以在一定程度
7、上解决应用程序永久存储和高速运行之间的矛盾,使程序在DSP上电复位之后将DSP应用程序从外部慢速设备搬移进入片内映射到程序空间的高速存储设备,从而使DSP程序得以高速运行。附录:可自举的音频信号处理实验程序如下:/* Copyright (c) 2015 SoochowUniversity DSP Tech. Center. All Rights Reserved.* History:* Date Authors Changes* 2015/12/30 HL Cao Created.*/#include csl.hcsl_mcbsp.hcsl_irq.hint sinetable40=0x00
8、00,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;/*-*/#define N 20 /*
9、In this example, the MCBSP is configured in digital loopback */* mode, with 2-16 bit data transfer, */* MCBSP setup is performed in a TSK function that executes on */* exit from main */* Create a MCBSP configuration structure */ static MCBSP_Config ConfigLoopBack16= MCBSP_SPCR1_RMK( MCBSP_SPCR1_DLB_
10、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_N
11、O, /* 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 /* R
12、WDLEN1 = 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_XCR
13、1_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_XF
14、IG_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
15、= 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_
16、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 /*
17、 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, /* X
18、CERF */ 0x0000u, /* XCERG */ 0x0000u /* XCERH */;/* Create data buffers for transfer */Uint16 xmt_L,xmt_R, rcv_L,rcv_R;Uint16 Flag_working;ioport Uint16 port7;ioport int port0;int keyvalue,oldkeyvalue,flag,flag1;int value_port0=0x1;MCBSP_Handle mhMcbsp;void DSP_init(void);void taskFunc1(void);void t
19、askFunc2(void);void taskFunc3(void);/*-*/void main() /* Initialize CSL library, this step is required */ CSL_init(); /* Initialize DSP*/ DSP_init(); /* initial xmt_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_wor
20、king=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(); /* Call example function to perform task */* Initial DSP */void DSP_init(void) Uint16 Temp ; Temp = port7 ; Temp = Temp | 0x4 ; p
21、ort7 = Temp; Temp = (Temp & 0x03)| 0x02 ; port7 = Temp ; Temp = Temp & (0x04) ; Temp = Temp | 0x08 ; /*initialize PMST and set IPTR,mc/mp,ovly and DROM*/ asm( STM #0xA8, PMST); /* Open MCBSP Port 2, this will return a MCBSP handle that will */ /* be used in calls to other CSl functions. */ mhMcbsp =
22、 MCBSP_open(MCBSP_PORT2, MCBSP_OPEN_RESET); /* Write configuration structure values to MCBSP control */ /* registers */ MCBSP_config(mhMcbsp, &ConfigLoopBack16);/*-audio processing-*/void taskFunc1(void) Uint16 err = 0; printf(n) /* Take MCBSP receive and transmit out of reset */ MCBSP_start(mhMcbsp
23、, 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) /* Wait for RRDY signal to read data from DRR */ while (!MCBSP_rrdy(mhMcbsp) ; /* Read 16 bit value from DRR */ rcv_L = MCBSP_read16(mhMcbsp); rcv_R = MCBSP_read16(mhMcbsp); /* Loopback . The sampled received can be processed by digital signal processing, and outputed to DXR*/ xmt_L = rcv_L; xmt_R = rcv_R;