《DSP图像采集与传输备课讲稿.doc》由会员分享,可在线阅读,更多相关《DSP图像采集与传输备课讲稿.doc(174页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。DSP图像采集与传输-DSP图像采集与传输一、实验目的通过该实验,掌握模拟图像经采集成为数字图像的方法,以及数字图像在该系统中的传输,掌握系统的资源及DSP系统各硬件资源的功能模块的作用。1了解PAL和NSTC视频格式。2掌握图像采集模块和视频解码器TVP5150A的使用3.掌握图像显示模块和视频编码器SAA7121H的使用4.掌握利用DM642进行图像采集与显示方法。二、实验原理1.数字图像经过数字化转换并可以用数字表示、处理的图像。由象素点组成,其中横向的点数称为水平分辨率,纵向的为垂直分辨率,一幅
2、完整的图分为若干行,称为一帧图像。每个象素根据量化精度不同其取值也不同,例如取三个色彩分量均为8位二进制数的RGB表示方法,用连续的三个8位二进制数表示一个彩色点,如(200,100,64)描述的点的红色分量为200,绿色分量100,蓝色分量64,其中每个分量的取值均为0255表示从最暗到最亮256个等级。静态图像可以通过连续播放产生动态效果,25帧/秒或30帧/秒的帧速可产生较平滑的动态显示效果。2.色彩空间色彩空间(ColorSpace),又称为色域空间,它表示的是一个图像所能够表现的色彩范围。其模型是描述使用一组值(通常使用三个、四个值或者颜色成分)表示颜色方法的抽象数学模型。常用的色彩
3、空间有两种,即RGB和YUV色彩空间。其中RGB色彩空间通常为图像采集和显示设备采用,例如CCD、CMOS摄像头,CRT监视器等。因其色彩分量之间有较大的相关性,不适于做图像处理。YCbCr是YUV色彩空间的使用最广泛的一种色彩编码,其中Y表示亮度,Cb表示蓝色色差色差,Cr表示红色色差。各色彩分量之间相关性小,适于进行处理操作,通常为计算机设备采用。YCbCr采样格式有4:4:4(完全取样)、4:2:2(2:1水平采样,没有垂直下采样)、4:2:0(2:1水平采样,2:1垂直下采样0、4:1:1(4:1水平取样,没有垂直下采样)。RGB和YCbCr色彩空间是可以相互转换的。3视频视频是活动图
4、像。每秒钟播放的图像的张数称为帧,如PAL制式每秒钟25帧,隔行扫描。当每秒钟播放的照片张数不足时会出现动作不连贯现象。常见的电视信号制式是PAL(逐行倒相正交平衡调幅制)和NTSC(正交平衡调幅制),另外还有SECAM等。PAL电视标准,每秒25帧,电视扫描线为625线,奇场在前,偶场在后,标准的数字化PAL电视标准分辨率为720x576、24比特的色彩位。中国、欧洲等国家和地区大多采用PAL电视标准。NTSC电视标准,每秒29.97帧(简化为30帧),电视扫描线为525线,偶场在前,奇场在后,标准的数字化NTSC电视标准分辨率为720x486、24比特的色彩位。美、日等国家和地区采用NTS
5、C电视标准。三、硬件连接SEED-VPM642图像与视频处理设备连接正确,计算机中CCS软件和XDS510或XDS560驱动安装正确,就可以进行图像与视频处理实验了。如图7-1-1所示为SEED-VPM642图像与视频处理设备连线图。实验箱连接按照以下步骤。(1)将SEED-VPM642板卡通过仿真器XDS510连接到计算机的USB口。(2)将实验箱的右下角的5V直流电源接线头连接到板卡的电源端口。(3)将BNC转接头装到Vout端口上。(4)将液晶显示器支起,并将其电源接头连接到一个12V直流电源端口。将摄像头视频输入头连接到Vout上的BNC转接头上。(5)取出摄像头并用三角架支好,将摄像
6、头连接到12V直流电源端口。(6)用BNC连接线连接摄像头的VIDEOOUT和实验箱上的in,将实验箱电源连接到220V电源。(7)开启电源,如连接正确,则电源端口右方的指示灯为亮,仿真器上指示灯也为亮。(8)如果液晶显示屏不亮,请按其上的POWER键。图7-1-1SEED-VPM642图像与视频处理设备连线图四DSP图像采集与PAL格式显示程序设计在视频采集与显示任务中,程序首先将摄像头捕捉到的视频数据通过EDMA读入FIFO中,然后再将数据从FIFO中读到输入数据缓冲区,最后将输入缓冲区的数据放入显示缓冲区,通过液晶屏显示。DSP图像采集与PAL格式显示程序设计流程框图如图7-1-2所示。
7、图7-1-2DSP图像采集与处理的一般流程图对DSP片上资源的使用,一般通过调用CSLAPI库函数来完成的,CSL模块是顶层API模块,使用CSLAPI前必须调用此函数。下面是主程序用到的一些CSLAPI和函数。CSL_init():芯片运行支持库CSL初始化,使用CSLAPI前必须调用此函数。CHIP_config():调用CSL库中CHIP模块,向配置地址中写设备配置值。CHIP模块是驻留着指定芯片和芯片相关代码,如器件的大小端、CPU和REVID等。EMIFA_Config():调用CSL库中EMIFA模块。外设EMIFA的配置结构,初始化外设EMIFA的寄存器来初始化EMIFA。IRQ
8、_setVecs()、IRQ_nmiEnable()、IRQ_globalEnable()、IRQ_map()、IRQ_map()、IRQ_reset()、IRQ_reset():调用CSL库中IRQ模块,初始化中断向量表。I2C_Config():调用CSL库中I2C模块,动态配置外设I2C,初始化外设I2C的寄存器。I2C_open():调用CSL库中I2C模块,打开一个I2C设备。DAT_open():调用CSL库中DAT模块,打开一个DMA或EDMA通道。DAT_copy():调用CSL库中DAT模块,使用DMA或EDMA将数据从存储器一个地方移到另一个地方。SEEDDM642_rse
9、t():读CPLD寄存器值(函数体在seeddm642_cpld.c中)GPIO_RSET():初始化GPIO的输出值(csl_stdinchal.h和csl_chiphal.h中预定义)_IIC_read():从I2C总线中读(函数体在iic.c中)。_IIC_write():向I2C总线中写(函数体在iic.c中)。bt656_8bit_ncfc():配置给定视频端口通道A不连续帧捕捉8位BT.656视频采集,打开一个视频端口VP,输入VP端口号,输出VP句柄(函数体在vportcap.c中)。bt656_capture_start():配置给定视频端口通道A不连续帧捕捉8位BT.656视
10、频采集,输入VP句柄,进行视频采集(函数体在vportcap.c中)。bt656_display_start():配置给定视频端口不连续帧捕捉8位BT.656视频显示,输入VP句柄,进行视频显示(函数体在vportdis.c中)。DSP图像采集与PAL显示工程文件管理器如图7-1-3所示。工程由下列文件组成:主程序dm642main.c、TVP5150A初始化文件_tvp51xx.c、SA7121H初始化文件_sa7121h.c、SEEDDM642的I2C结构设置iic.c、CPLD逻辑模块seed_cpld.c、图像采集参数定义程序vportcap.c、图像显示参数定义程序vportdis.
11、c、中断向量表ves_dm642.asm、连接命令文件文件seeddm642video.cmd、库文件cslDM642.lib和rts6400.lib以及相关的头文件。图7-1-3DSP图像采集与PAL显示工程文件管理器双击DSP图像采集与PAL显示工程的相应文件名,查看具体源程序。以下是各源程序代码及其详细分析。1. 主程序dm642main.c代码及其分析主程序的功能如7-1-2DSP图像采集与处理的一般流程图所示,具体代码及其详细分析如下。/*/*dm642main.c*/*/*包含头文件*/#include/函数申明,调用CSL库必须包含相应的头文件。#include#include#
12、include#include#include#include#includeiic.h/读IIC与写IIC程序的申明文件,函数体在iic.c中。#includevportcap.h/通过EDMA视频捕捉程序的申明文件,函数体在vportcap.c中。#includevportdis.h/通过EDMA视频显示程序的申明文件,函数体在vportdis.c中。#includesa7121h.h/定义SAA7112H寄存器#includeTVP51xx.h/定义TVP5150A寄存器#includeseeddm642.h/定义seeddm642板上CPLD和其它片上外设的地址/*SEEDDM642的
13、emifa的设置结构*/EMIFA_ConfigSeeddm642ConfigA=0x00052078,/*gblctl寄存器:EMIFA(B)全局控制寄存器值*/*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/0xffffffd3,/*cectl0寄存器:CE0空间控制寄存器值,将CE0空间设为SDRAM*/0x73a28e01,/*cectl1寄存器:CE1空间控制寄存器值。读保持1个时钟,MTYPE=0000,选择8位的异步接口;读选通01110,即14个时钟宽度。TA:2个时钟;读建立2个时钟,写保持2个时钟,写选通14个时钟,写建立7个时钟*/0x22
14、a28a22,/*cectl2寄存器:CE2空间控制寄存器值*/0x22a28a42,/*cectl3寄存器:CE3空间控制寄存器值*/0x57115000,/*sdctl寄存器:SDRAM控制寄存器值*/0x0000081b,/*sdtim寄存器:SDRAM时序寄存器值*/0x001faf4d,/*sdext寄存器:SDRAM扩展寄存器值*/0x00000002,/*cesec0寄存器:CE0空间次控制寄存器值*/0x00000002,/*cesec1寄存器:CE1空间次控制寄存器值*/0x00000002,/*cesec2寄存器:CE2空间次控制寄存器值*/0x00000073/*cese
15、c3寄存器:CE3空间次控制寄存器值*/;/*SEEDDM642的IIC设置结构*/I2C_ConfigSEEDDM642IIC_Config=0,/*i2coar寄存器,采用主模式*/0,/*i2cimr寄存器,采用无中断方式只写、不读*/(20-5),/*i2cclkl寄存器,scllowtime*/(20-5),/*i2cclkh寄存器,sclhightime*/1,/*i2ccnt寄存器,configurelater*/0,/*i2csar寄存器,configurelater*/0x4ea0,/*i2cmdr寄存器,主机发送模式,i2crunsfree,8-bitdata+NACK,不
16、重复模式*/(75-1),/*i2cpsc寄存器,4MHz时钟*/;I2C_HandlehSeeddm642i2c;intportNumber;externSA7121H_ConfParamssa7121hPAL45;externSA7121H_ConfParamssa7121hNTSC45;Uint8vFromat=0;Uint8misc_ctrl=0x6D;Uint8output_format=0x47;/*地址为0forcvbsport1,选择复合信号做为输入*/Uint8input_sel=0x00;/*地址为0xf,将Pin27设置成为CAPEN功能*/Uint8pin_cfg=0x
17、02;/*地址为1B*/Uint8chro_ctrl_2=0x14;/*图像句柄的声明*/VP_HandlevpHchannel0;VP_HandlevpHchannel1;VP_HandlevpHchannel2;/*确定图像的参数*/intnumPixels=720;/每行720个像素intnumLines=576;/每帧576行(PAL)/*采集与显示缓冲区的首址,可参见seeddm642video.cmd*/Uint32capYbuffer=0x80000000;/*采集到的Y分量数据存放在存储器中的起始地址*/Uint32capCbbuffer=0x800675c0;/*采集到的Cb
18、分量数据存放在存储器中的起始地址*/Uint32capCrbuffer=0x8009b0a0;/*采集到的Cr量数据存放在存储器中的起始地址*/Uint32disYbuffer=0x80100000;/*Y分量显示数据存放在存储器中的起始地址*/Uint32disCbbuffer=0x801675c0;/*Cb分量显示数据存放在存储器中的起始地址*/Uint32disCrbuffer=0x8019b0a0;/*Cr分量显示数据存放在存储器中的起始地址*/*图像格式标志*/Uint8NTSCorPAL=0;externfarvoidvectors();externvolatileUint32ca
19、pNewFrame;externvolatileUint32disNewFrame;/*-*/*main()*/*-*/*此程序可将四个采集口的数据经过VideoPort0送出*/voidmain()Uint8addrI2C;inti;/*-*/*执行所有的初始化*/*-*/*初始化CSL库*/CSL_init();/CSL模块是顶层API模块,使用CSLAPI前必须调用此函数CHIP_config(&SEEDDM642percfg);/向配置地址中写设备配置值/*-*/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间注意DM642支持EMIFA,不支持EMIF*/EMIF
20、A_config(&Seeddm642ConfigA);/*-*/*中断向量表的初始化*/IRQ_setVecs(vectors);IRQ_nmiEnable();IRQ_globalEnable();IRQ_map(IRQ_EVT_VINT1,11);/*将VP1通道中断对应为CPU中断11*/IRQ_map(IRQ_EVT_VINT0,12);/*将VP0通道中断对应为CPU中断12*/IRQ_reset(IRQ_EVT_VINT1);IRQ_reset(IRQ_EVT_VINT1);/*打开一个数据拷贝的数据通路,Uint32DAT_open(intchaNum,intpriority,
21、Uint32flags);*/DAT_open(DAT_CHAANY,DAT_PRI_LOW,DAT_OPEN_2D);/*-*/*进行IIC的初始化*/hSeeddm642i2c=I2C_open(I2C_PORT0,I2C_OPEN_RESET);I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);/*-*/*进行解码器TVP5150pbs的初始化*/SEEDDM642_rset(0x15,2);/*选择TVP5150,设置第三通路*/GPIO_RSET(GPGC,0x0);/*将GPIO0不作为GPINT使用*/GPIO_RSET(GPDIR,0
22、x1);/*将GPIO0作为输出*/GPIO_RSET(GPVAL,0x0);/*GPIO0输出为高,选择IIC1总线,配置第二路,即为U21*/addrI2C=0xBA1;/*TVP5150AIIC写地址(I2CSEL=1)*/*I2C地址分为10位模式或7位模式,DSP支持7位I2C模式,则要按7位模式使用,取后8位地址右移1位即是7位的I2C地址。TVP5150写地址为0xBA或0xB8,读地址为0xBB或0xB9,因此与TVP5150进行通信,须将I2C的地址向右移一位。*/_IIC_write(hSeeddm642i2c,addrI2C,0x00,input_sel);/*四个参数依
23、次为I2CHandle(I2C_open函数返回值)、从器件地址、寄存器地址和需要配置的寄存器值*/_IIC_write(hSeeddm642i2c,addrI2C,0x03,misc_ctrl);_IIC_write(hSeeddm642i2c,addrI2C,0x0D,output_format);_IIC_write(hSeeddm642i2c,addrI2C,0x0F,pin_cfg);_IIC_write(hSeeddm642i2c,addrI2C,0x1B,chro_ctrl_2);/*回读当前摄像设备的格式*/_IIC_read(hSeeddm642i2c,addrI2C,0x8
24、c,&vFromat);vFromat=vFromat&0xff;switch(vFromat)caseTVP51XX_NTSCM:caseTVP51XX_NTSC443:NTSCorPAL=1;/*系统为NTSC的模式*/break;caseTVP51XX_PALBGHIN:caseTVP51XX_PALM:NTSCorPAL=0;/*系统为PAL的模式*/break;default:NTSCorPAL=2;/*系统为不支持的模式*/break;if(NTSCorPAL=2)/*系统不支持的模式,重新配置*/for(;)/*-*/*进行SAA7121H的初始化*/GPIO_RSET(GPVA
25、L,0x0);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/addrI2C=0xB81;/*选择第0路的I2C的地址,TVP5150AIIC写地址(I2CSEL=0)*/*将第0路的视频输入口的数据口设为高阻状态,使能SCLK,将第27脚设为输入*/_IIC_write(hSeeddm642i2c,addrI2C,0x03,0x1);/*配置SAA7121H*/GPIO_RSET(GPVAL,0x1);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/*初始化VideoPort0*/*将VideoPort1设为视频编码器SAA7121H的输出*/portNumber=0;v
26、pHchannel0=bt656_8bit_ncfd(portNumber);addrI2C=0x881;/SAA7121IIC地址(因SAA7121的21管脚SA接低电平)for(i=0;i43;i+)if(NTSCorPAL=1)_IIC_write(hSeeddm642i2c,addrI2C,(sa7121hNTSCi.regsubaddr),(sa7121hNTSCi.regvule);else_IIC_write(hSeeddm642i2c,addrI2C,(sa7121hPALi.regsubaddr),(sa7121hPALi.regvule);/写SAA7121寄存器值/*-*
27、/*初始化VideoPort1*/*将VideoPort1设为采集输入*/portNumber=1;vpHchannel1=bt656_8bit_ncfc(portNumber);/打开一个VP口,进行采集bt656_capture_start(vpHchannel1);/*等待第一帧数据采集完成*/while(capNewFrame=0)/*将数据存入显示缓冲区,并清采集完成的标志*/capNewFrame=0;for(i=0;i1),/*YCrCb=4:2:2,因此将numPixels减少一半,即右移一位*/(void*)(disCbbuffer+i*(numPixels1),numPix
28、els1);/*传送Cr缓冲区*/DAT_copy(void*)(capCrbuffer+i*(numPixels1),(void*)(disCrbuffer+i*(numPixels1),numPixels1);/*启动显示模块*/bt656_display_start(vpHchannel0);/*建立显示的实时循环*/for(;)/*当采集区的数据已经采集好,而显示缓冲区的数据已空*/if(capNewFrame=1)&(disNewFrame=1)/*将数据装入显示缓冲区,并清采集完成的标志*/capNewFrame=0;disNewFrame=0;for(i=0;i1),(void*
29、)(disCbbuffer+i*(numPixels1),numPixels1);/*传送Cr缓冲区*/DAT_copy(void*)(capCrbuffer+i*(numPixels1),(void*)(disCrbuffer+i*(numPixels1),numPixels1);for(;)/-/*采集与回放*/dm642main.c结束/*/2TVP5150A视频解码器初始化(tvp51xx.h、_tvp51xx.h和_tvp51xx.c)TVP5150A视频解码器可以将NTSC、PAL和SECAM视频信号转换为8位ITU-RBT.656格式信号。TVP5150A将基带模拟视频信号转换为
30、YCbCr4:2:2分量视频,两个模拟输入端口可接收两个可选的复合视频输入,或一个S视频输入。此芯片内含一个9位模数转换器,抽样频率符合ITU-RBT.601标准(为27.0MHz)。输出信号格式可以是8位4:2:2或8位ITU-RBT.656格式。TVP5150A只用作IIC从设备(IIC地址为0xBA或0xB8)。对TVP5150A视频解码器的初始化,即对其各寄存器进行赋值。根据TVP5150A手册,其各寄存器地址和位定义如表所示,具体位说明可参考手册。表7-1-1TVP5150A各寄存器地址及其位定义寄存器功能地址缺省值读/写视频输入源选择#100h00hR/W模拟通道控制01h15hR
31、/W操作模式控制02h00hR/W各类控制03h01hR/W自动开关掩码:TVP5150A04hFChR/WTVP5150AM104hDChR/W保留05h00hR/W彩色抑制管门限控制06h10hR/W亮度(luminance)处理控制#107h60hR/W亮度(luminance)处理控制#208h00hR/W亮度(brightness)控制09h80hR/W色彩饱和度控制0Ah80hR/W色度(hue)控制0Bh00hR/W对比度控制0Ch80hR/W输出和数据速率选择0Dh47hR/W亮度(luminance)处理控制#30Eh00hR/W配置共用管脚0Fh08hR/W保留10h活动视
32、频剪辑开始高位11h00hR/W活动视频剪辑开始低位12h00hR/W活动视频剪辑停止高位13h00hR/W活动视频剪辑停止低位14h00hR/W同步锁相/实时时钟(Genlock/RTC)15h01hR/W水平同步开始16h80hR/W保留17h垂直消隐开始18h00hR/W垂直消隐结束19h00hR/W色度(chrominance)处理控制#11Ah0ChR/W色度(chrominance)处理控制#21Bh14hR/W中断复位寄存器B1Ch00hR/W中断使能寄存器B1Dh00hR/W中断配置寄存器B1Eh00hR/W保留1Fh27h视频标准28h00hR/W保留29h2BhCb增益因子
33、2ChRCr增益因子2DhR复制保护(macrovision)开计数器2Eh0FhR/W复制保护(macrovision)关计数器2Fh01hR/W656修正选择(只TVP5150AM1)30h00hR/W保留31h7Fh设备ID高位80h51hR设备ID低位81h50hRROM主要版本:TVP5150A82h03hRTVP5150AM182h04hRROM次要版本:TVP5150A83h21hRTVP5150AM183h00hR垂直行计数高位84hR垂直行计数低位85hR中断状态寄存器B86hR中断活动寄存器B87hR状态寄存器#188hR状态寄存器#289hR状态寄存器#38AhR状态寄存
34、器#48BhR状态寄存器#58ChR保留8Dh8Fh隐藏字幕数据寄存器90h93hRWSS数据寄存器94h99hRVPS数据寄存器9AhA6hRVITC数据寄存器A7hAFhRVBIFIFO读数据B0hR文字电视广播滤波器1B1hB5h00hR/W文字电视广播滤波器2B6hBAh00hR/W文字电视广播滤波器使能BBh00hR/W保留BChBFh中断状态寄存器AC0h00hR/W中断使能寄存器AC1h00hR/W中断配置C2h04hR/WVDP配置RAM数据C3hDChR/W配置RAM地址低字节C4h0FhR/W配置RAM地址高字节C5h00hR/WVDP状态寄存器C6hRFIFO字计数C7h
35、RFIFO中断门限C8h80hR/WFIFO复位C9h00hW行数中断CAh00hR/W像素对齐寄存器低字节CBh4EhR/W像素对齐寄存器高字节CCh00hR/WFIFO输出控制CDh01hR/W保留CEh全部场使能CFh00hR/W行模式寄存器D0hD1hFBh00hFFhR/W全部场模式寄存器FCh7FhR/W保留FDhFFh头文件tvp51xx.h和_tvp51xx.h对TVP5150A给出了定义寄存器地址和及其赋值方法。具体代码及其详细分析如下。/*/*tvp51xx.hfile*/*/#ifndef_TVP51XX_H#define_TVP51XX_H#include#includ
36、e#includetypedefenumTVP51XX_AnalogFormatTVP51XX_AFMT_COMPOSITE,TVP51XX_AFMT_SVIDEO,TVP51XX_AFMT_RGB,TVP51XX_AFMT_YPBPRTVP51XX_AnalogFormat;typedefenumTVP51XX_ModeTVP51XX_MODE_NTSC601,TVP51XX_MODE_NTSCSqp,TVP51XX_MODE_PAL601,TVP51XX_MODE_PALSqp,TVP51XX_MODE_USERTVP51XX_Mode;typedefunsignedintTVP51XX_
37、Cmd;#defineTVP51XX_POWERDOWNEDC_USER+1#defineTVP51XX_POWERUPEDC_USER+2#defineTVP51XX_SET_AMUXMODEEDC_USER+3#defineTVP51XX_NTSCM0x81#defineTVP51XX_PALBGHIN0x83#defineTVP51XX_PALM0x85#defineTVP51XX_COMBINATION-N0x87#defineTVP51XX_NTSC4430x89typedefstructTVP51XX_ModevideoMode;TVP51XX_AnalogFormataFmt;B
38、oolenableBT656Sync;intinputPort;I2C_HandlehI2C;TVP51XX_ConfParams;#endif/tvp51xx.h结束/*/*/*_tvp51xx.hfile*/*/#ifndef_TVP51XX_H#define_TVP51XX_H#ifdef_cplusplusexternC#endif#include#define_TVP5150_IIC_ADDR(0xB81)/#define_TVP5146_IIC_ADDR(0xBA1)/typedefunsignedUns;/32位无符号整型数Uint8NTSC601_EXEC82,NTSCSGP_EXEC82,PAL601_EXEC82,PALSGP_EXEC82;