2 系统总体设计
TMS320C6211是TI公司的TMS320系列产品中的新一代高性能定点DSPs芯片,芯片的工作频率可达200MHz。芯片内有8个并行处理单元,分为相同的两组;其体系结构采用甚长指令字(VLIW)结构,单指令字长为32bit,8个指令组成一个指令包,总字长为256bit;芯片内部设置了专门的指令分配模块,可以将每个256bit的指令包同时分配到8个处理单元,由8个处理单元并行执行。
目前DSPs芯片的应用开发基本包括两种方案,一种是在微型计算机上插上DSP芯片开发处理扩展板及输入/输出扩展板,利用现有微机及操作环境开发算法软件;另一种是根据控制对象要求设计DSP芯片控制器电路和有关输入/输出接口硬件。
两种方案各有其特点,考虑到系统的开发效率和扩展性,本系统选择了前一种方案。该方案由DSPs、现场可编程器件(CPLD),以及工控机等组成,完成图像采集、视频检测、以及图像保存等一系列工作。系统结构如图1所示。
3 软件系统结构
3.1 功能模块划分
软件系统结构如图2所示。
从总体结构上看,系统由图像数据采集模块、视频检测模块、JPEG压缩模块,以及数据上载模块这四部分组成。
图像数据采集模块是整个系统的基础,完成图像数据的采集,考虑到数据量以及实时性的要求,应当使用EDMA的方式。视频检测模块是整个系统的核心,在获得交通灯信息的前提下,它对数据采集模块得到的图像数据进行分析,提取车辆的运动信息,判断车辆是否闯红灯。如果车辆没有闯红灯,则对以后的图片继续进行检测,如果有车辆闯红灯,为了保存车辆闯红灯的图片,就需要由JPEG压缩模块对上述图片进行JPEG压缩,最后,数据上载模块通过PCI将图片数据上载到主机。
3.2 功能模块实现
(1) 图像数据采集模块
系统使用的视频图像输入符合CCIR 601建议,CCIR 601规定,对于所有制式,每一行有效采样点数为720点,但对于不同制式,每帧图像有效行数不同,这里采用PAL制式,按照参数定义其分辨率为720×576,像素输出格式为4:2:2的16位YUV数据,其中Y、U、V各为8位数据。
每帧图像包含奇偶两场,分别进行采样,这里我们只需要取一场的数据进行处理,所以实际使用的一帧图像大小为360×288×4 Byte。另外,在每行开始时,要插入4 Byte的标志位,因此实际一行占用361×4 Byte大小的空间。因为每秒钟采样25帧图像,所以每两行图像的间隔时间为1000/25/576=0.07ms,在这么短的时间内要完成1K Byte的数据搬移,使用CPU中断的方式是不适合的,只能采用EDMA方式。
扩展的直接存储器接口访问(EDMA)是C6211/C6711独有的特征。与其它几种C6000芯片相比,C6211中的EDMA控制器在结构上有很大的不同。EDMA对于DMA的增强之处包括:提供了16个通道,通道优先级可设置,可以实现数据传输的链接[1>。
EDMA的16个通道分别有一个事件与之关联,由这些事件触发相应通道的传输。通过EER寄存器可以控制每个事件的使能/禁止,事件寄存器ER负责捕获所有的事件,不论该事件是否被使能,EDMA都会进行这样的捕获。
EDMA在结构上与其他C6000的DMA有很大的不同,这表现在,C6201/C6701的DMA控制器是基于寄存器结构的,而C6211/C6711的EDMA控制器是基于RAM结构的。
参数RAM(Parameter RAM)容量为2 KB,其中存放每个EDMA通道需要的各个传输控制参数。另外,多组参数的入口还可以被彼此链接起来,从而实现某些复杂数据流的传输。2 KB的参数RAM内容包括:16个EDMA事件对应的16个参数组;69个传输参数组,用于实现事件的链接控制;8Byte空闲的RAM,作为“草稿区”。
本系统中,使用中断管脚INT4作为图像帧中断,INT5作为图像行中断,程序启动以后,等待发生第一个帧中断,表示新的一帧图像开始,此时即可开始启动EDMA进行数据传输。由于其中涉及两个外部中断,为了保证从一帧新的图像产生时开始EDMA传输,因此程序应该按照一定的顺序启动EDMA传输图像数据。EDMA启动流程图如图3所示。
另外,为了实现连续的图像采集,还要使用多组EDMA参数的连接(linking)。可以将EDMA的参数连接起来,组成一个参数链,为同一个通道服务。在EDMA传输中,一次传输任务的结束会自动从参数RAM重载下一次传输需要的参数。
连接由EDMA参数RAM中的16bit连接地址和LINK位控制,LINK位负责连接操作的使能,连接地址用来指向传输链中下一个传输参数组。
本系统中,因为使用INT5作为外部事件,因此需要配置事件5的参数,在此使用事件16作为连接地址,则事件5的可选参数(Option Parameter)和连接地址(Link Address)配置如下所示:
*(unsigned volatile int *)(EVENT5_PARAMS+OPT)=0x20350003;
*(unsigned volatile int *)(EVENT5_PARAMS+LNK)=0x00000180;
同时,在对事件16的参数进行配置时,也将其连接地址设定为LINK=0x0180,就可以实现连续的EDMA传输。
(2) 视频检测模块
在进行视频检测之前,首先要得到图像数据,由于EDMA传输是连续进行的,因此直接使用数据采集模块的缓冲区数据是不行的,需要在SDRAM中划分出两帧图像大小的空间,作为视频检测的数据来源。
首先,使用#pragma DATA_SECTION指令在SDRAM中分配两帧图像大小的区域,代码如下:
#pragma DATA_SECTION(pOrigin,".BUFF2")
unsigned int pOrigin[361*288>;
#pragma DATA_SECTION(pNew,".BUFF3")
unsigned int pNew[361*288>;
其次,设定一个EDMA事件传输两帧图像。这样,每当一个EDMA事件结束时,就会产生EDMA中断,表明两帧图像传输完成,这时就可以通过QDMA完成SDRAM内的数据搬移。
QDMA,快速DMA,支持EDMA所有的传输模式,但是前者提交申请的速度要比后者快很多,尤其时候需要由CPU直接控制搬移一块数据的场合。QDMA的操作由两组寄存器控制,第一组的5个寄存器中定义了QDMA传输所需的所有参数,第二组的5个寄存器是第一组的“伪映射”。QDMA传输要求采用帧同步,因此可选 参数寄存器中的FS字段没有意义,QDMA传输也没有中间传输状态,每次任务只提交1次申请。
使用QDMA的操作如下:
*(unsigned volatile int *)QDMA_SRC=0xB0000000;
*(unsigned volatile int *)QDMA_DST=0xB00CB100;
*(unsigned volatile int *)QDMA_CNT=0x023F0169;
*(unsigned volatile int *)QDMA_IDX=0x00000000;
*(unsigned volatile int *)QDMA_S_OPT=0x45A00001;
需要注意的是,因为程序中同时使用了EDMA和QDMA,为了避免出现冲突,应当注意对EDMA和QDMA优先级的设定,PRI对应的位决定了其优先级顺序,在此设定EDMA优先级较高。
视频检测算法是本模块的核心部分,为了通过图像数据判断经过车辆的运动状态,使用了基于虚拟线圈运动矢量的检测方法。
虚拟线圈(Virtual Loops)是在图像序列中仿照感应线圈探测器(ILD)的功能定义的。在获得了图像序列的基础上,一帧图像中一定区域可以被定义并称作虚拟线圈,这一定义可以扩展到整个图像序列,或者在其它图像序列中重新定义[2>。
该检测算法的基本思想是:首先,根据道路方向、车道数、摄像机位置在图像序列中设置虚拟线圈,其依据是设置的虚拟线圈能够反应经过车辆的运动状态,该步骤是整个检测模块的基础,虚拟线圈位置的选择会对检测的效果产生直接的影响;其次,对连续采集的图像序列中的虚拟线圈进行匹配,估算虚拟线圈的运动矢量(幅值和方向),该过程的关键在于匹配算法的选择,既要达到一定的准确性,又要满足实时性的要求;最后,对虚拟线圈的运动矢量信息进行分析,从而确定车辆的运动情况。
(3) JPEG压缩模块
如上所述,一幅图像需要占用的空间大小为361×288×4Byte,这样大的数据量,无论是对于接下来的数据上载,还是在主机上的存储,无疑都是很不方便的,所以在数据的上载之前,要先进行图像数据的压缩。
JPEG(联合图像专家组,Joint Photographic Experts Group)是由国际标准组织(ISO)和国际电话电报咨询委员会(CCITT)为静态图像所建立的第一个国际数字图像压缩标准。和相同图像质量的其它常用文件格式(如GIF、TIFF、PCX等)相比,JPEG是目前静态图像中压缩比最高的。
针对不同的应用背景,JPEG算法也有多种编码方法,在此我们选择了基本型编码的JPEG算法,它以DCT(Discrete Cosine Transformation)为基础,采用霍夫曼编码,编码压缩率可调,适用于一般图像处理。
基本型编码实现的主要步骤包括:a)分块,将输入图像分成编码单位块,由于采用的就是YUV图像格式,因此只需要分别将Y、U、V划分成8×8的单位块;b)对8×8的单位块进行离散COS变换(DCT),DCT变换是正交变换,变换后能量不变,但是能量的分布变了;c)量化,对8×8的频率矩阵进行量化处理,以达到图像数据压缩的目的;d)霍夫曼编码,量化后的DCT系数主要集中在直流分量和交流分量的低频部分,所以绝大部分的系数是零,对系数进行霍夫曼编码,直流分量和交流分量的编码过程是不同的。
(4) 数据上载模块
在DSP中完成了对图像的检测和JPEG压缩之后,受DSP本身存储空间的限制,为了保存必要的图像数据,就必须将这些图像数据上载到主机上,这一工作由数据上载模块通过主机接口完成。
主机接口HPI(host-port interface)是一个16bit宽度的并行端口,主机(即上位机)掌管该接口的主控权,通过它可以直接访问CPU的存储空间。为了保证主机对HPI操作的正确性,主机应当一直监控HRDY信号,只有当HRDY为低时,才可以进行HPI传输。
C6211没有提供特殊的EDMA通道来专门进行HPI存取,而是直接将HPI与片内的地址产生单元相连,完全由硬件来处理读/写请求。HPI中利用了三个寄存器来完成主机设备和CPU的通信,它们是:HPI数据寄存器(HPID),HPI地址寄存器(HPIA)和HPI控制寄存器(HPIC)。主机对于这三个寄存器都可以进行读/写,CPU只能对HPIC进行访问。
当CPU需要进行数据上载时,通过向HPIC的HINT位写1,向主机发中断,主机接收中断之后,通过向HPIA中写入图像对应位置的地址,当HPIC的HRDY位为1时,就可以从HPID中读取图像数据。
4 结束语
本文介绍了基于DSP的闯红灯检测软件系统设计,作为一种基于PCI总线的DSP应用实例,系统具有一般性意义。
随着DSP的功能不断增强,DSP的应用范围也愈发广泛。在这种基于PCI总线的DSP方案下,由于主体工作在DSP内完成,系统的扩展性不再受制于PC机资源,因此通过增加PCI插卡的数量,系统可以比较容易进行扩展,也能够降低成本,同时,利用现在成熟的PC机架构和操作系统,又能加快开发进度,因此具有广阔的应用前景。
文章评论(0条评论)
登录后参与讨论