基于DM6437的图像采集和显示系统Word下载.docx
- 文档编号:16747417
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:19
- 大小:863.33KB
基于DM6437的图像采集和显示系统Word下载.docx
《基于DM6437的图像采集和显示系统Word下载.docx》由会员分享,可在线阅读,更多相关《基于DM6437的图像采集和显示系统Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
系统主要包括图像采集和图像显示两个部分。
图像采集模块由CCD传感器、视频解码芯片TVP5146和DM6437的视频处理前端(VPFE)构成。
图像显示模块由视频处理后端(VPBE)和视频图形阵列(VGA)显示器构成。
DM6437通过
总线对TVP5146芯片进行配置,例如输入时钟频率、视频制式及视频输入格式等。
TVP5146芯片在同步信号的控制下,通过8位数据线将采集的图像数据,以YCbCr视频数据流的格式传输至VPFE;
然后,由VPFE的CCDC模块对图像进行预处理,并存入DDR2中。
此外,DM6437的视频处理后端(VPBE)读取存储在DDR2中的视频图像信号,将数字信号转换成模拟信号在行同步和场同步信号下完成VGA的显示。
视频采集及显示系统
Videoacquisitionanddisplaysystem
3.3、环境设置:
1、打开CCS3.3的设置程序
,出现如下界面:
如果左边栏SystemConfiguration有其他配置,请选中,并点击下方的Remove删除掉。
2、中间栏里选项太多,我们通过3个属性进行筛选:
Family、Platform、Endian,如下:
3、然后把DM6437EVMXDS510USBEMULATOR拖到左边栏即可:
4、还需要替换GEL文件以适合我们的开发板,在CPU_0点击鼠标右键-》
:
Gel文件位于光盘目录“EL_DM6437Sample_Code”下的EL_dm6437.gel。
4、点击Save&
Quit,会询问是否开启CCS。
3.4、实习仿真:
(1)连接CCS和EL_DM6437开发板
1、连接好仿真器和EL_DM6437的JTAG口,插入EL_DM6437电源,打开CCS:
2、点击菜单Debug-》Connect,或者快捷键Alt+C进行连接:
3、连接成功后显示信息,如下所示,连接时CCS会根据Gel文件自动初始化CPU。
(2)编译构建程序
创建了一个功能程序后,你就可以构建(build)它。
构建主要完成编译(compile)与连接(link)。
第一次使用全构建(BuildAll)功能便可以构建工程,以后可以使用增量构建(Buildtheprojectincrementaly)。
一个输出窗口将会显示构建过程和状态。
当构建完成后,输出窗口将会显示Buildcomplete0errors,0warnings。
当工程选项或文所有件发生改变后,执行RebuildAll命令重建工程。
(3)加载程序
程序成功构建后,执行File->
LoadProgram加载程序。
加载过程是将上述构建成功,生成的可执行文件加载到目标板,目标板可以是软件仿真环境,也可以是硬件目标板。
默认情况下,CCS集成开发环境将会在你的工程路径下创建一个Debug子目录,把生成的.out文件放在里面。
点击Open加载程序。
注意:
如果你修改并且重新构建了工程,切记通过file->
Reload重新加载程序。
(4)设置断点(UsingBreakpoints)
把光标置于所需行上,按F9设置一个断点。
此外,你还可以通过选择ToggleBreakpoint工具条按钮创建断点。
设置断点后,一个红色图标将出现在选择空白区。
再按F9或ToggleBreakpoint按钮将除去断点。
当程序暂停在Main函数处时,通过按F5,选择Debug->
Run,或者选择Run工具条来运行程序。
一旦程序运行到断点出,程序将挂起。
3.5、硬件电路设计
硬件电路设计需要了解DM6437芯片的结构组成以及整个系统的设计原理,再次给出设计原理图
可见系统流程为:
显示器显示
把原理图分成模块,用ProtelDXP2004绘制出原理图。
原理图分为如下五个部分:
图像输入输出部分,TVP5146图像A/DD/A转换部分,DDR2存储部分,JTAG下载部分,电源复位部分。
(1)图像输入输出部分DM6437:
(2)TVP5146部分:
(3)DDR2存储部分:
(4)JTAG下载部分
(5)电源复位部分
3.6、程序运行过程及结果
1、连接好电脑和仿真器、EL_DM6437和仿真器;
2、用视频线一头连接板卡的P3或者P5,另一头连接显示器的AV输入,并调到AV模式;
3、用视频线连接摄像头输出和板卡的P9插座,注意摄像头输出制式为PAL;
4、给EL_DM6437和摄像头上电,打开CCS并连接;
5、打开13_video_loopback文件夹的工程video_loopback.pjt,此工程功能为:
把摄像头捕捉到的图象进行处理,并将之输出到显示器;
6、下载程序out文件,如果没有就先编译一下Project-》Build(
);
7、把摄像头对准需要捕捉的图象场地;
8、设置第一个断点,在main.c的438行处:
9、点击运行
,稍等片刻后程序停止在断点,此时可以从显示器看到彩色源图象:
3.7、程序:
#include"
stdio.h"
evmdm6437.h"
voidTEST_execute(Int16(*funchandle)(),char*testname,Int16testid)
{
Int16status;
/*DisplaytestID*/
printf("
%02dTesting%s...\n"
testid,testname);
/*Calltestfunction*/
status=funchandle();
/*Checkfortestfail*/
if(status!
=0)
{
/*Printerrormessage*/
FAIL...errorcode%d...quitting\n"
status,testname);
/*SoftwareBreakpointtoCodeComposer*/
SW_BREAKPOINT;
}
else
PASS\n"
testname);
}
externInt16video_loopback_test();
externvoidSetup_PLL1_DDR_108_MHz_OscIn();
externvoidSetup_PLL1_DDR_121_5_MHz_OscIn();
externvoidSetup_PLL1_DDR_135_MHz_OscIn();
externvoidSetup_PLL1_DDR_148_5_MHz_OscIn();
externvoidSetup_PLL1_DDR_162_MHz_OscIn();
voidmain(void)
/*InitializeBSL*/
EVMDM6437_init();
//Setup_PLL1_DDR_148_5_MHz_OscIn();
TEST_execute(video_loopback_test,"
VideoLoopback"
1);
\n***ALLTestsPassed***\n"
);
evmdm6437_dip.h"
tvp5146.h"
#defineCOLORBARS1
#defineLOOPBACK0
#defineSVIDEO_OUT1
#defineCOMPONENT_OUT0
voidvpfe_init(Uint32buffer,Uint32width,Uint32height)
VPFE_CCDC_SYN_MODE=0x00032F84;
//interlaced,withVDporityasnegative
VPFE_CCDC_HD_VD_WID=0;
VPFE_CCDC_PIX_LINES=0x02CF020D;
VPFE_CCDC_HORZ_INFO=width<
<
1;
//Horizontallines
VPFE_CCDC_HSIZE_OFF=width<
//Horizontallineoffset
VPFE_CCDC_VERT_START=0;
//Verticalstartline
VPFE_CCDC_VERT_LINES=height>
>
//Verticallines
VPFE_CCDC_CULLING=0xFFFF00FF;
//Disablecullng
VPFE_CCDC_SDOFST=0x00000249;
VPFE_CCDC_SDR_ADDR=buffer;
VPFE_CCDC_CLAMP=0;
VPFE_CCDC_DCSUB=0;
VPFE_CCDC_COLPTN=0xEE44EE44;
VPFE_CCDC_BLKCMP=0;
VPFE_CCDC_FPC_ADDR=0x86800000;
VPFE_CCDC_FPC=0;
VPFE_CCDC_VDINT=0;
VPFE_CCDC_ALAW=0;
VPFE_CCDC_REC656IF=0x00000003;
/*
*InputformatisCb:
Y:
Cr:
Y,w/Yinodd-pixelposition
*/
VPFE_CCDC_CCDCFG=0x00000800;
VPFE_CCDC_FMTCFG=0;
VPFE_CCDC_FMT_HORZ=0x000002D0;
VPFE_CCDC_FMT_VERT=0x0000020E;
VPFE_CCDC_FMT_ADDR0=0;
VPFE_CCDC_FMT_ADDR1=0;
VPFE_CCDC_FMT_ADDR2=0;
VPFE_CCDC_FMT_ADDR3=0;
VPFE_CCDC_FMT_ADDR4=0;
VPFE_CCDC_FMT_ADDR5=0;
VPFE_CCDC_FMT_ADDR6=0;
VPFE_CCDC_FMT_ADDR7=0;
VPFE_CCDC_PRGEVEN_0=0;
VPFE_CCDC_PRGEVEN_1=0;
VPFE_CCDC_PRGODD_0=0;
VPFE_CCDC_PRGODD_1=0;
VPFE_CCDC_VP_OUT=0x041A2D00;
VPFE_CCDC_PCR=0x00000001;
//EnableCCDC
voidvpbe_init(Uint32buffer,Uint32width,Uint32height,Uint32colorbar_loopback_mode,Uint32ntsc_pal_mode,Uint32output_mode)
Int16basep_x;
Int16basep_y;
if(ntsc_pal_mode==NTSC)
basep_x=0x7A;
//122
basep_y=0x12;
//18
basep_x=0x84;
//132
basep_y=0x16;
//22
*SetupVPBE
VPSS_CLK_CTRL=0x00000018;
//EnableDACandVENCclock,bothat27MHz
VPBE_PCR=0;
//Noclockdiv,clockenable
*SetupOSD
VPBE_OSD_MODE=0x000000fc;
//BlackgroundcolorblueusingclutinROM0
VPBE_OSD_OSDWIN0MD=0;
//Disablebothosdwindowsandcursorwindow
VPBE_OSD_OSDWIN1MD=0;
VPBE_OSD_RECTCUR=0;
VPBE_OSD_VIDWIN0OFST=width>
4;
VPBE_OSD_VIDWIN0ADR=buffer;
VPBE_OSD_BASEPX=basep_x;
VPBE_OSD_BASEPY=basep_y;
VPBE_OSD_VIDWIN0XP=0;
VPBE_OSD_VIDWIN0YP=0;
VPBE_OSD_VIDWIN0XL=width;
VPBE_OSD_VIDWIN0YL=height>
VPBE_OSD_MISCCTL=0;
VPBE_OSD_VIDWINMD=0x00000003;
//Disablevwindow1andenablevwindow0
//Framemodewithnoup-scaling
VPBE_VENC_VMOD=0x00000003;
//StandardNTSCinterlacedoutput
VPBE_VENC_VMOD=0x00000043;
//StandardPALinterlacedoutput
VPBE_VENC_VDPRO=colorbar_loopback_mode<
8;
VPBE_VENC_DACTST=0;
VPBE_VENC_DACSEL=0x00004210;
if(output_mode==COMPONENT_OUT)
VPBE_VENC_DACSEL=0x00000000;
elseif(output_mode==SVIDEO_OUT)
#definetvpaddr0x5d
Int16video_loopback_test()
Int16ntsc_pal_mode;
Uint8buff[4],getval=0;
//先写这些:
/*
tvp5146_rset(0xE8,0x02);
//InitalizeTVP5146,mustdoafterpoweron
tvp5146_rset(0xE9,0x00);
//SkipifusingTVP5146-M2
tvp5146_rset(0xEA,0x80);
tvp5146_rset(0xE0,0x01);
tvp5146_rset(0xE8,0x60);
tvp5146_rset(0xEA,0xB0);
tvp5146_rset(0xE0,0x00);
tvp5146_rset(0x03,0x01);
tvp5146_rset(0x03,0x00);
//---------测试tvp5146开始--------
//while
(1){
buff[0]=0x80;
//先指定一个地址,读取tvp5146的id=0x51
getval=1;
getval=EVMDM6437_I2C_write(tvpaddr,buff,1);
buff[0]=0;
buff[1]=0;
getval=EVMDM6437_I2C_read(tvpaddr,buff,2);
getval++;
//断点观察buff[0]=0x51,buff[1]=0x46
//}
//---------测试tvp5146结束--------
/**/
//EVMDM6437_DIP_init();
//ntsc_pal_mode=EVMDM6437_DIP_get(JP1_JUMPER);
ntsc_pal_mode=PAL;
//NTSC;
//自己加的
//tvp5146_init(ntsc_pal_mode,SVIDEO_IN);
//SVIDEO模式
vpfe_init(0x81000000,720,480);
//SetupFront-End
//vpbe_init(0x81000000,720,480,LOOPBACK,ntsc_pal_mode,SVIDEO_OUT);
//SetupBack-End
//SW_BREAKPOINT;
tvp5146_init(ntsc_pal_mode,COMPONENT_IN);
//复合视频模式,用VI_2_B
//断点
vpbe_init(0x81000000,720,480,LOOPBACK,ntsc_pal_mode,COMPONENT_OUT);
return0;
四、实习心得:
两周的DSP实习结束了,我从中学到了很多知识。
我一直都对图像处理非常感兴趣,更巧的是本次实习过程中还有与之相关的题目,所以我毫无犹豫的选择了图像系统采集的设计,我通过上图书馆和上网等方式掌握了一些基于DSP图像采集的基本知识,经过两周的编程和调试,最终成功地完成了整个系统的设计。
在设计的过程中编程部分是个难点,编程的过程中我们遇到了很多的问题,比如说当我把之前设计出的基本模块整合在一起的时候,出现了很多错误,但是在经过细致的分析整个程序后,通过进一步的修正,程序才运行正常。
这个问题也提醒我们在编程的时候需要细心和耐心,要具有整体设计的思想,考虑要周全,这样才不会出现一些因为马虎而出现的错误。
本次实习使我把学到的理论知识运用到了实际上,虽然做出来的东西都是一些很基础的东西,但加深了我们对理论知识的理解和掌握。
知道了一些处理图像的方法,以及提取图像的方法,对DSP这门课程也有了新的理解和认识,这对于我今后的学习也会有事半功倍的效果。
过去在自己的心里,老是有一种恐惧的心理在作祟,怀疑自己的能力,认为自己不能胜任某件事情就连尝试的胆量都没有,通过这次的实习,我也明白了只有抛弃心中的恐惧,丢掉不可能,不断培养自己,锻炼自己,才能在社会中立足。
本次实习使我把学到的理论知识和实际的硬件相结合,对DSP这门课程有了新的理解和认识,这对于我今后的学习会有事半功倍的效果。
非常感谢本次实习给了我这样一个锻炼我的机会,在此也感谢老师对我的指导!
参考文献
《DSP技术及应用》刘柏生董胜北京大学出版社
《数字图像处理》(第三版)冈萨雷斯科学出版社
《图像处理与分析:
变分、PDE、小波及随机方法》陈繁昌科学出版社
《C/C++程序设计》谭浩强清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DM6437 图像 采集 显示 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)