打印

基于DSP的最小图像采集处理系统设计

[复制链接]
2685|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
相见欢喜|  楼主 | 2011-9-14 20:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以DSP为核心的视频处理系统中,视频采集的方法通常可以分为两大类:自动的视频采集和基于DSP的视频采集。前者通常采用CPLD/FPGA控制视频解码芯片,通过FIFO或者双口RAM向DSP传送数据,特点是数据采集模块独立运行,占用DSP资源少,但实现相对复杂,成本偏高;后者通常由DSP控制视频解码芯片并同步各种时序,将视频数据读入。其特点是实现相对简单,成本有所降低,但对视频解码芯片的控制较为复杂,占用DSP处理时间。相关内容:http://gydz2012.blog.china.alibaba.com/如果通过适当的逻辑电路让数字图像传感器芯片直接接入DSP,则可省去视频控制解码芯片、CPLD/FPGA、FIFO或双口RAM,在不增加DSP软件开销的情况下,大大降低系统的复杂程度和成本,缩短开发周期。

硬件系统设计

相关帖子

沙发
相见欢喜|  楼主 | 2011-9-14 20:44 | 只看该作者
系统总体结构

系统结构框图如图1所示。DSP采用TI公司发布的C6000系列高速浮点型信号处理器TMS320C6713,其峰值处理速度达1350MFLOPS(百万次浮点每秒)。其外部存储器接口EMIF(External Memory Interface)包括4个CE空间,其中CE0被配置为16位同步空间,接SDRAM;CE1为16位异步空间,接Flash;CE2为16位异步空间,经过地址译码和总线缓冲将数字图像传感器OV7620接入;CE3为8位异步空间,经过数据锁存和总线隔离将LCD显示模块接入。

OV7620的配置和硬件连接

OV7620是OmniVision公司生产的CMOS彩色/黑白图像传感器,在本系统中被配置为16位逐行扫描QVGA方式,RGB原始数据输出,分辨率为320×240,SCCB总线,内部默认的行曝光方式;同时使能HREF信号对PCLK进行门控,即只有当HREF有效时像素时钟信号才被输出到PCLK引脚上,否则该引脚保持无效。这样EDMA可以始终处在使能状态,从而简化采集过程。

使用特权

评论回复
板凳
相见欢喜|  楼主 | 2011-9-14 20:45 | 只看该作者
图2 OV7620与DSP的硬件连接框图

OV7620与DSP的硬件连接框图如图2所示。在对OV7620复位结束后,DSP通过GPIO模拟SCCB总线完成对OV7620

内部功能寄存器的配置,之后数帧内图像数据和同步信号将逐渐稳定。Y通道和U/V通道在分别经过74HC244总线缓冲器之后接入EMIF低16位数据总线。CE2与地址线EA20、EA21经过译码产生2片74HC244的选通信号,此时OV7620的读地址为0xA0000000。

使用特权

评论回复
地板
相见欢喜|  楼主 | 2011-9-14 20:45 | 只看该作者
EDMA数据采集

在16位逐行扫描方式中,图像的每行RGB原始数据均被OV7620先后输出两次,因此,只须读取其偶数次HREF信号对应的数据即可获得整个图像信息。这样可以减少图像采集所占用的存储空间和总线资源。

OV7620同步和控制信号与GPIO的对应关系如表1所列。

表1 OV7620同步和控制信号与GPIO的对应关系

使用特权

评论回复
5
相见欢喜|  楼主 | 2011-9-14 20:45 | 只看该作者
本系统采用EDMA的第12个通道(EDMA12)进行图像数据采集。该通道被配置为16位一维传输方式,中断禁止,PCLK的上升沿触发EDMA12搬移一个16位数据存入到SDRAM中,每次EDMA任务搬移一个HREF(320个16位)的图像数据。帧同步信号VSYNC上升沿触发DSP中断,对EDMA通道进行初始化,使能水平参考信号HREF中断并关闭EDMA通道(放弃第1个HREF的数据),开始一帧的数据传输。HREF下降沿触发DSP产生中断,标志OV7620一次HREF数据输出的结束。如果接下来一次HREF数据需要被读入,则中断服务程序会对EDMA12参数进行修正,使能EDMA12通道,开始下一行数据的传输;否则,就禁止EDMA12,放弃下一次HREF数据。每接收1帧图像数据共产生240次HREF中断和120次EDMA数据传输。以下是OV7620数据采集的部分源代码: interruptvoidINT6_EXT6(void){

/*VSYNCGPIO6帧同步中断*/

EDMA_OpenCha(PCLK_EDMA_CHANL);

/*打开EDMA通道,准备OV7620数据搬移*/

EER=~(1< /*关EDMA使能,放弃第1个HREF的数据*/

ICR="HREF"_INT_CHANL;

/*清HREF(GPIO7)INT7中断标志*/

IER|=HREF_INT_CHANL;

/*使能HREF(GPIO7)INT7中断*/

}

使用特权

评论回复
6
相见欢喜|  楼主 | 2011-9-14 20:45 | 只看该作者
interruptvoidINT7_EXT7(void){

/*HREFGPIO7水平参考中断*/

if(!HREF_Data_Switch){

HREF_Data_Switch=TRUE;

/*接下来的HREF数据有效*/

(*(EDMA_PARAM_POINTER+PCLK_EDMA_

CHANL)).CNT=IMAGESIZE_WIDTH;

/*修正EDMA传输参数计数值*/

ECR|=1< /*清上周期遗留的PCLK触发事件*/

EER|=1< /*使能EDMA,开始读下一行数据*/

}

else{

HREF_Data_Switch=FALSE;

/*接下来的HREF数据无效*/

EER&=~(1< /*禁止EDMA,接下来HREF数据不读*/

}

}

LCD模块的驱动

采用液晶显示模块可以使图像处理结果实时显示出来,方便调试和演示,成本也较低。本系统选用北京宁和电子科技发展有限公司开发的NHC_34彩色液晶显示控制模块。该模块支持256色彩色显示,每个像素点用1个字节表示,分辨率为320×234;支持标准Intel8位异步总线时序,有2页显示缓存,可任意设定显示页和操作页。

使用特权

评论回复
7
相见欢喜|  楼主 | 2011-9-14 20:46 | 只看该作者
LCD模块读写周期最短为350ns,而DSP外部总线接口时钟频率一般在100MHz以上,即小于10ns。通过配置EMIFCE3空间控制寄存器CECTL3(地址为0x01800014),可以将CE3空间的读写周期延长,与LCD模块无缝连接。但这样液晶模块的读写操作会过长地占用系统总线,降低对其他存储空间(尤其是对SDRAM)的访问效率,进而影响系统的整体速度。

本系统采用了数据锁存和总线缓冲的方法,通过377锁存器模拟低速总线控制信号时序,利用244数据缓冲器对低速总线数据进行隔离。图3给出了DSP与LCD模块硬件连接图。系统有2片74HC377(简称为“377”),一片用来锁存模拟LCD模块的读写控制信号(控制377),另一片用来锁存写入数据(数据377),由异步写使能控制线AWE作为377的触发沿输入;CE3和EA20、EA21经过译码产生2个377的使能信号,DSP写数据377的地址为0xB0000000,写控制377的地址为0xB0040000。数据377的输出经一片总线缓冲器HC244(写出244,HC244简称为“244”)连接到LCD模块总线上,该244输出使能信号来自控制377。另有一片HC244(读入244)用来将LCD模块总线接到DSP低8位总线上,其输出使能信号同样由CE3和EA20、EA21经过译码产生,地址为0xB0080000,是DSP对LCD模块的读地址。





图3 LCD模块与DSP的硬件连接

DSP根据LCD模块总线时序,通过定时器延时中断来间隔地写入数据到控制377,以模拟相应低速总线的控制信号,并适时从读入244读取数据(读周期),或者写入数据到数据377(写周期),就可以完成对LCD模块的读/写操作。LCD写周期驱动例程如下(该程序通过延时来控制时间间隔):

#defineSET_CS_LCD() ctrl377valu|=0X01;ctrl377reg=ctrl377valu

/*向液晶模块写入数据子程序。subaddress:0~3为A1、A0的值;writevalu:待写入LCD的数据*/

voidWrite2LCD(unsignedcharsubaddress,unsignedchar

使用特权

评论回复
8
相见欢喜|  楼主 | 2011-9-14 20:46 | 只看该作者
writevalu){

ctrl377valu|=subaddress<<3;

ctrl377valu&=(subaddress<<3)|0XE7;

/*根据A0、A1的值更新ctrl377valu的对应位*/

ctrl377valu&=~0x23;/*使能CS、WR和LCD_wren*/

ctrl377reg=ctrl377valu;

/*输出控制数据到377控制锁存器*/

LCD_wr_ reg="writevalu";

/*输出待写数据到377数据锁存器*/

DELAY(WR_LCD_DELAYTIME310);

/*延时T420ns×6=120ns*/

SET_WR_LCD();

/*置位WR信号,上升沿将数据写入LCD*/

& DELAY(WR_LCD_DELAYTIME); /*延时20ns*/

SET_CS_LCD();

/*置位CS,使地址信号无效*/

DELAY(WR_LCD_DELAYTIME35);/*延时100ns*/

SET_WREN_LCD();

/*写出244输出禁止,数据无效*/

DELAY(WR_LCD_DELAYTIME32);

/*延时40ns,周期结束*/

}

使用特权

评论回复
9
相见欢喜|  楼主 | 2011-9-14 20:46 | 只看该作者
writevalu){

ctrl377valu|=subaddress<<3;

ctrl377valu&=(subaddress<<3)|0XE7;

/*根据A0、A1的值更新ctrl377valu的对应位*/

ctrl377valu&=~0x23;/*使能CS、WR和LCD_wren*/

ctrl377reg=ctrl377valu;

/*输出控制数据到377控制锁存器*/

LCD_wr_ reg="writevalu";

/*输出待写数据到377数据锁存器*/

DELAY(WR_LCD_DELAYTIME310);

/*延时T420ns×6=120ns*/

SET_WR_LCD();

/*置位WR信号,上升沿将数据写入LCD*/

& DELAY(WR_LCD_DELAYTIME); /*延时20ns*/

SET_CS_LCD();

/*置位CS,使地址信号无效*/

DELAY(WR_LCD_DELAYTIME35);/*延时100ns*/

SET_WREN_LCD();

/*写出244输出禁止,数据无效*/

DELAY(WR_LCD_DELAYTIME32);

/*延时40ns,周期结束*/

}

使用特权

评论回复
10
相见欢喜|  楼主 | 2011-9-14 20:46 | 只看该作者
软件系统设计

软件系统流程如图4所示。DSP在复位完成之后首先进行系统的初始化,配置锁相环、EMIF和GPIO,并硬件复位OV7620,通过GPIO模拟SCCB总线配置其内部功能寄存器,之后对LCD模块清屏。当EDMA没有被使能时,OV7620的同步信号仍能被EDMA事件寄存器捕获并保持,所以把EDMA的初始化放在OV7620和LCD模块的初始化之后,并在使能之前清事件标志。在中断被使能之后,OV7620的帧同步信号会触发系统中断,开始进行数据的循环采集,并在每帧数据采集完成之后置位相应标志,通知主程序进行处理。主程序在接到通知后对OV7620的原始数据进行插值和平滑,生成待处理的RGB24位色图像数据。图像处理和运算的结果被送到LCD模块进行动态显示,LCD的显示任务主要由中断服务程序完成,而此时主程序已开始等待和处理下一帧图像。





图4 DSP视频采集系统软件流程

使用特权

评论回复
11
aass1| | 2011-9-15 07:29 | 只看该作者
EDMA数据采集 赞

使用特权

评论回复
12
Lxn77| | 2011-9-19 13:08 | 只看该作者
经典啊,基本上把DSP的特性都发挥出来了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

517

帖子

1

粉丝