>
首页 » 业界动态 » 基于VxWorks的视频采集系统的设计与实现

基于VxWorks的视频采集系统的设计与实现

作者:周 芸  时间:2007-04-06 11:22  来源:

摘要:利用Fusion878A在Intelx86平台和实时操作系统VxWorks上实现了视频采集。Fusion878A高度集成的特性使其外围电路极其简单,VxWorks优异的性能和方便的接口便于编写设备驱动程序和应用软件。

关键词:视频采集;实时操作系统;驱动程序

引言

跟踪雷达的显示器用于显示雷达当前的工作状态和工作参数,除此之外还要在主界面显示从摄像头输入的视频信号。视频数据的获取离不开视频采集系统。我们设计的视频采集系统基于IntelX86平台和实时操作系统VxWorks,由视频采集卡及其驱动程序两部分组成。视频的回放则由高度集成的CPU模块(PC104)上的高性能图形控制器CT69000完成,VxWorks的WindML(Wind媒体库)已经提供了对于CT69000的驱动程序,无需另行开发,只需对它的媒体控制寄存器进行一下修改。考虑到视频的数据量极大,视频采集卡通过PCI高速总线与计算机相连。视频采集回放系统结构如图1所示。

视频采集卡的设计

为了将由摄像头输入的模拟视频转换为计算机能够接收和处理的数字视频,需要经过模数转换、同步提取、亮色分离等多个步骤。而为了将数字视频传送到PC机的内存中,还需要一定数量的FIFO、总线接口和相应的控制逻辑。这原本是一个比较复杂的过程,但是随着半导体技术的发展,各半导体生产厂家通过不断创新和改进,目前已经能够在单个芯片上实现所有这些功能。Conexant公司的Fusion878A就是这样的一种芯片,它集成了视频采集和音频采集的功能,本文只介绍它的视频采集功能。图2给出了其功能框图。

图1 视频采集回放系统结构框图

图2 Fusion878A的功能框图

对于在PCI总线上进行NTSC/PAL/SECAM视频捕获的应用来说,Fusion878A是一种完整的低价格解决方案。它将复合视频解码、缩放、DMA控制等功能集于一体。作为一种总线主控设备,Fusion878A不需要任何本地缓存来存储视频像素数据,这样就极大地降低了硬件价格。视频数据可以直接放入内存中进行采集,继而放入目标帧缓存(即CT69000的显存)中实现OVERLAY显示。Fusion878A的使用与PCI系统总线的拓扑结构无关,可以用于各种系统总线的组织结构,既可以直接集成在主板上,也可以做成插卡插在PCI总线插槽内。

Fusion878A的主要特点为:与PCI2.1规范全兼容,拥有辅助的GPIO数据端口和视频数据端口,支持的图像分辨率高达768×576,支持复杂的裁剪功能,零等待状态的PCI突发写操作,支持场/帧屏蔽以减少带宽,在输出方面支持多种YCbCr和RGB像素格式,支持NTSC/SECAM/PAL模拟输入,可以使用垂直/水平方面的插值滤波将图像尺寸缩小到图标大小,具有多个复合和S视频输入,支持奇偶场不同的目的地址,支持奇偶场不同的颜色空间/缩放因子,支持225个颜色调色板的视频映射,具有用于图文电视的VBI视频捕获功能。这些特点使Fu2sion878A适用于PC电视、桌面可视电话、运动视频捕获、静止图像采集和VBI数据服务等应用领域。

VxWorks操作系统简介

应用程序必须通过驱动程序才能与硬件进行数据通信,而驱动程序的编写又与操作系统密切相关。本系统所使用的操作系统是实时操作系统VxWorks。

VxWorks是由WRS(WindRiverSystems)公司开发的一套具有微内核、高性能、可伸缩的实时操作系统,支持广泛的网络通信协议,并能够根据用户的需求进行组合,其开放式的结构和对工业标准的支持使开发者只需做最少的工作即可设计出有效的、适合于不同用户要求的实时操作系统。

VxWorks的特点主要有:微内核结构(最小结构<8kB),高效的任务管理,灵活的任务间通信,微秒级中断处理,符合POSIX1003.1b实时扩展标准,满足TCP/IP网络标准,灵活的从ROM、磁盘或网络的引导能力,多处理器支持,快速、灵活的I/O系统,MS2DOS和RT-1文件系统,完全符合ANSIC标准,多于1100种功能例程。

除了性能出众的操作系统之外,WRS公司还提供了优秀的实时操作系统开发工具Torna2do。Tornado由3个高度集成的部分组成:运行在宿主机和目标机上的功能强大的交叉开发工具和实用程序;运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;连接目标机和宿主机的通信选项,如以太网、串行线路、在线仿真或ROM仿真等。Tornado能够支持几乎所有的工作平台和目标处理器,所提供的工具可用于所有目标机,并具有2种调试模式(系统和任务模式)。

VxWorks的所有机制和功能都是基于“C子程序”这种简单机构,即:VxWorks的所有功能都是由C程序库提供的,任何C程序都能够从Tornado的命令和调试环境中交互式地调用,任何C程序都能够作为VxWorks的一个任务从Tornado主机工具或者应用程序中产生,C程序能够与中断、看门狗定时器或辅助定时器相连。VxWorks的这种统一性使Tornado成为一种有效的开发系统,用户只要编写子程序就能够完成所有这些工作。

VxWorks的这些特性为编写应用程序和设备驱动程序提供了极大的便利。在VxWorks下,设备驱动程序既可以嵌入内核随系统一起启动,也可以作为可加载模块在系统启动之后运行。前一种方式需要修改并重新编译内核,这需要熟悉内核的结构,实现起来比较困难;而后一种方式则比较简单,与编写一般的应用程序类似。但是,无论采用哪种方式编写驱动程序,其基本结构是相同的。

驱动程序的编写

我们设计的Fusion878A驱动程序采用后一种方式(运行流程见图3)图PCI总线是一种即插即用的总线,在BIOS和操作系统的支持下,能够自动地为设备分配合适的内存映射地址、I/O端口和系统中断控制器的输入(IRQ)。Fusion878A支持两类地址空间:配置地址空间和内存地址空间。配置地址空间包括预定义的PCI配置寄存器,而内存地址空间包括Fusion878A使用的所有局部寄存器。初始化PCI总线就是设置PCI配置空间所定义的寄存器,实现主机与PCI局部总线之间的接口,其过程是:首先在系统中根据设备标识(Fusion878A)和供应商标识(Conexant)找到设备的位置,确定其总线号、设备号和功能号;然后根据总线号、设备号和功能号确定设备的基地址和IRQ,这个基地址就是Fusion878A局部寄存器的起始地址,而IRQ在连接中断服务程序时使用;接着将设备的局部寄存器映射到系统内存中,供以后设置局部寄存器使用;最后设置命令寄存器以控制Fusion878A产生和响应PCI周期的能力,例如使系统能够响应对内存空间的访问,使Fusion878A成为总线操作发起的一方,使系统报告校验错等等。

Fusion878A的中断屏蔽寄存器INT_MASK中的设置决定了系统能够响应哪些中断,中断服务程序为不同的中断源提供相应的处理代码。中断服务程序的编写必须遵循一定的规则,最主要的一点就是不能造成系统阻塞而影16第3期周芸:基于VxWorks的视频采集系统的设计与实现响系统性能。中断服务程序应该尽量简洁短小,使其能够尽可能快速地返回。在中断服务程序中不能有运行时间过长的代码,也不能出现对某些共享资源进行某种访问(例如试图获取信号量)的代码。编写完中断服务程序之后,利用初始化PCI总线时获得的IRQ和操作系统提供的函数将中断服务程序与中断矢量连接起来。Fusion878A的局部寄存器驻留在4kB的内存寻址空间中,必须通过PCI总线才能访问。通过设置相应的寄存器,就能够控制Fusion878A的行为。通常,需要设置的内容包括:输入电视信号制式(PAL或NTSC),输入信号源(MUX0、MUX1或MUX2),行同步,场同步,输出格式(CCIR601、CIF或QCIF),图像放大或缩小参数,图像滤波参数,亮度、色度和对比度调节等等。

C程序附下:

#define FUSION878A_VENDOR_ID 0x0000109e
#define FUSION878A_DEVICE_ID 0x0000036e
UINT* pBaseAdd;
UINT32 command=PCI_CMD_MASTER_ENABLE
| PCI_CMD_MEM_ENABLE
| PCI_CMD_PERR_ENABLE;
pciFindDevice(FUSION878A_VENDOR_ID,FU
SION878A_DEVICE_ID,
0,&pciBusNo,&pciDevNo,&pciFuncNo);
/*获得Fusion878A的总线号,设备号,功能
号3*
pciConfigInLong(pciBusNo,pciDevNo,pciFuncNo,PCI_
CFG_BASE_ADDRESS_0,pBaseAdd);
/*根据总线号、设备号和功能号确定设备的基
地址*/
pciConfigModifyLong(pciBusNo,pciDevNo,pciFuncNo,
PCI_CFG_COMMAND,
(PCI_CMD_MASK|command),command);
/*系统能够响应对内存空间的访问,使Fu2
sion878A成为总线操作发起的一方,使系统报告校验错*/

Fusion878A中集成的DMA控制器非常独特,它实际上是一个小RISC处理器,其运行的指令(即RISC程序)位于加载的模块中并由Fusion878A的设备驱动程序提供。由于这种结构能够将采集到的视频数据传输到内存中,从而大大地方便了视频采集系统的实现。

在这种结构中,DMA能够动态地逐行改变目标内存地址,这就使用户能够将每一帧视频数据分成不同的部分放在多个内存区域中。RISC程序的起始地址放在Fusion878A的RISC程序起始地址寄存器RISC_STRT_ADD中。Fusion878A提供的RISC指令包括:写入WRITE、略过SKIP、同步SYNC和跳转JUMP,利用这些指令就能够控制数据流得到所需要的数据。RISC程序的基本流程是:帧同步写入奇场→偶场同步→写入偶场奇场同步→跳转至写入奇场。

采集系统的启动是通过设置GPIO和DMA控制寄存器中的RISC使能位和FIFO使能位来实现。将RISC使能位设置为1使DMA控制器能够处理RISC指令,将FIFO使能位设置为1使数据FIFO有效。在将这2位设置为1后,视频采集开始进行。

结束语

利用Fusion878A在Intelx86平台和实时操作系统VxWorks上实现了视频采集系统。由于Fusion878A的高度集成特性,其外围电路极其简单,设计硬件电路时极其方便,同时性能也能够得到保证,而且可以灵活地增加其他功能。而VxWorks优异的性能和方便的接口也便于编写设备驱动程序和应用软件,其性能完全能够满足要求。目前,所实现的视频采集系统已经在雷达显示器上得到应用。

相关推荐

风河宣布对于未来机载性能环境联合体的承诺

风河  嵌入式  VxWorks  2012-02-29

基于Windows平台VxWorks交叉编译工具的设计

VxWorks  嵌入式  2011-09-05

嵌入式系统U盘实时启动技术

VxWorks  嵌入式系统  2011-09-01

基于VxWorks实时嵌入式PLC设计

PLC  VxWorks  2011-08-15

Wind River提供F1赛车专用数据撷取与传送系统

WindRive  VxWorks  遥测装置  2011-07-05

基于VxWorks的微机保护装置网络通信设计

VxWorks  2011-06-23
在线研讨会
焦点