《探测实验南航版剖析》由会员分享,可在线阅读,更多相关《探测实验南航版剖析(8页珍藏版)》请在金锄头文库上搜索。
1、探测与识别实验 DSP图像处理实验报告探测与识别实验DSP图像处理实验报告姓 名:蔡慧敏学 号:031150204指导老师:薛雅丽第三章 基础实验实验一 Code Composer Studio的使用【实验目的】1、 熟悉Code Composer Studio开发环境2、 熟悉DSP软件开发流程3、 熟悉几种主要的调试方法4、 熟悉在调试环境下观察指令执行结果的方法【实验内容与步骤】本实验相关程序参见安装光盘的imagelab_vdplab_ccs。在实验之前先确定你的微机中安装了完整版本的CCS6000。 1在CCS中创建和测试一个工程项目在这个实验中,你将创建并测试一个简单的程序hell
2、o,运行该程序可以在CCS的输出窗口显示“hello world!”1.1 创建一个新的工程1) 在c:imagelab_vdp下用你的学号新建一个子目录,并在其中再建立一个“hello”的子目录。2) 把c:imagelab_vdplab_ccshello目录下的文件(不包括debug目录下的文件),都copy到这个新建的“hello”文件夹中。3) 从菜单或者快捷方式中打开CCS。4) 选择ProjectNew 菜单5) 在弹出的窗口中,在最上端第一行填“myhello”作为文件名,下一行选择你新建的文件夹“hello”,然后点击“完成”。这样CCS就新建了一个名为“myhello.pjt
3、”的工程文件。这个文件能保存你的工程的设置并且包括了你的工程用到的各种文件。1.2 向工程中添加文件1) 选择ProjectAdd Files to Project,将hello.c添加至工程。如果在选择窗口中没有看到hello.c程序,请在文件类型中选择C Source Files (*.c, *.ccc)。2) 选择ProjectAdd Files to Project,选择汇编源文件(*.asm)类型的文件,打开“vector.asm”。这个文件包含了一些汇编指令,这些指令是用来设置RESET中断进入程序中的C的入口地址c_int00。3) 选择ProjectAdd Files to P
4、roject,添加“hello.cmd”文件。4) 选择ProjectAdd Files to Project,进入c:tic6000c6000cgtoolslib,文件类型选择目标文件和库文件(*.o*,*.lib),打开“rts6400.lib”。这个库对运行中的DSP板提供支持。5) 在Project View中展开文件夹“myhello.pjt”。6) 你可以看见在你的“myhello.pjt”中,include下没有文件,你不必自己向你的工程中添加Include文件,因为CCS在编译过程中寻找附件文件的时候可以自动地找到它们,Include中的h文件的路径在ProjectBuild
5、OptionsCompilerPreprocessor中指定。在编译完你的工程以后,你就可以在你的Project View中找到Include文件。如果你要从你的工程中删除一个文件,在Project View中右击文件,在弹出的菜单中选择“Remove from Project”。在编译一个程序时,CCS按照下列顺序在工程文件中查找文件:包含源文件的文件夹在Include搜索路径中列出的文件夹在C64X_C_DIR(编译器)和C64X_A_DIR(汇编器)环境变量的定义中列出的文件夹。1.3 查看源代码双击hello.c,观察源代码。1.4 编译和运行程序按以下步骤编译运行程序:1) 选择Pr
6、ojectRebuild All,CCS将再一次编译、汇编、连接工程中的文件。这个工程的消息将在窗口底部的一个窗口显示。2) 选择FileLoad Program,在hellomyhellodebug目录下打开刚刚生成的myhello.out文件。CCS把程序载入到DSP板上,然后系统会自动打开一个反汇编(Disassembly)窗口显示组成程序的反汇编过的指令。3) 选择DebugRun4) 运行完这个程序后,你可以在Stdout窗口中看到一条“hello world!”的信息。l 特殊技巧:在反汇编窗口中点击一个汇编指令。(在指令上点击,而不是在指令对应的地址)按下F1,CCS可以提供关于
7、这条指令的帮助。这是一个得到一条你不熟悉的汇编指令的帮助信息的好办法。1.5 实验结果CCS的输出窗口显示“hello world!”,程序运行成功。实验二 指示灯闪亮【实验目的】1. 掌握CCS编程的基本方法2. 熟悉DSP软件开发流程3. 了解程序指令执行结果和硬件之间的关系【实验内容与步骤】此实验不需要摄像头、显示器等视频输入输出设备。实验内容是让音视频开发平台上的LED灯亮或灭,大家可以自己修改程序让LED闪烁。 实验项目为C:imagelab_vdpimage_vdp_ledimage_vdp_led.pjt,可执行文件在C:imagelab_vdpimage_vdp_leddebu
8、g目录中。用户可参考第二章的2.4节介绍的实验步骤完成实验。打开主文件led.c可以看到实验的源程序如下: void main() EVMDM642_init(); EVMDM642_LED_init(); while(1) EVMDM642_LED_on(3); 修改EVMDM642_LED_on()函数的中的参数值可看到不同的指示灯被点亮。参数范围为0-4。实验四 视频采集与回放【实验目的】理解视频采集与回放的原理【实验内容与步骤】 实验项目为C:imagelab_vdplab_flash VP_loopback_P pal.pjt,OUT文件为C:imagelab_vdplab_flas
9、h VP_loopback_P debugvideo_pal.out。用户可以参考第二章的2.4节中介绍的步骤进行实验。实验源程序为video_ntsc_pal.c,其中的处理函数为tskVideoLoopback(),下面具体阐述了程序各部分的功能:void tskVideoLoopback() /设置显示的行数 numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1; /设置采集的行数numLinesCap = EVMDM642_vCapParamsChan.fldYStop1 EVMDM642_vCapParamsChan.fldYStrt1
10、+1; /取二者中较小的为程序处理的行数numLines = (numLinesDis numLinesCap) ? numLinesCap : numLinesDis;#ifdef _LOOPBACK/设置每行显示的像素 numPixels = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1; /采集图像一行的总像素 capLinePitch = EVMDM642_vCapParamsChan.fldXStop1 - EVMDM642_vCapParamsChan.fldXStrt1+1; /显示
11、图像一行的总像素 disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;#endif numLines *= 2; /* both fields */ /分配采集和显示图像的存放缓冲区 EVMDM642_vCapParamsChan.segId = EXTERNALHEAP; EVMDM642_vDisParamsChan.segId = EXTERNALHEAP; EVMDM642_vDisParamsSAA7104.hI2C = EVMDM642_I2C_hI2C; EVMDM642_vCapParamsTVP5150A.hI2C = EV
12、MDM642_I2C_hI2C;/建立并初始化采集设备对象#ifdef _LOOPBACK#ifdef _VP2 capChan = FVID_create(/VP2CAPTURE/A/1, IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);#else capChan = FVID_create(/VP0CAPTURE/A/0, IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);#endif #endif /建立并初始化显示设备对象 disChan = FVID_cr
13、eate(/VP1DISPLAY, IOM_OUTPUT, &status, (Ptr)&EVMDM642_vDisParamsChan, NULL); /为保证采集和显示设备正常工作,为其设置驱动 FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&EVMDM642_vDisParamsSAA7104);#ifdef _LOOPBACK FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&EVMDM642_vCapParamsTVP5150A);#end
14、if /开始采集和显示操作 FVID_control(disChan, VPORT_CMD_START, NULL);#ifdef _LOOPBACK FVID_control(capChan, VPORT_CMD_START, NULL);#endif /分配采集和显示一帧图像存放的缓冲区 FVID_alloc(disChan, &disFrameBuf);#ifdef _LOOPBACK FVID_alloc(capChan, &capFrameBuf);#endif frames +;while(1)#ifdef _LOOPBACK Int i; /将采集缓冲区的内容复制到显示缓冲区中 for(i = 0; i frame.iFrm.y1 + i * c