关 闭

新闻中心

EEPW首页>工控自动化>设计应用> 基于PC104(Plus)总线的数据接收存储显示系统设计

基于PC104(Plus)总线的数据接收存储显示系统设计

作者: 时间:2011-03-28 来源:网络 收藏

2.3 工控机显示存储模块设计
本系统利用PLX9054和Linux的DMA技术来实现大量数据的高速传输,同时使用Qt/Ernbedded进行人机界面设计和Framebuffer的帧缓冲显示,以对视频数据进行存储和显示控制。整个软件的功能图如图5所示。

本文引用地址://m.amcfsurvey.com/article/202466.htm

s.JPG


PLX9054的I设备驱动是DMA传输的关键,驱动程序利用PLX9054芯片的DMA功能可将FPGA控制模块中的数据快速传输到Linux操作系统的内核内存中。要实现对PLX9054的DMA操作并设置DMA控制寄存器,设备驱动程序需要做两件事:一是检测I设备并初始化:二是建立DMA操作环境。在Linux2.6内核中,I设备检测和初始化可通过专门的注册函数pci_regis-ter-driver来实现。内核根据pci_device_id结构中的预设ID来对pci_devices链表进行搜索,一旦找到目标PCI设备,pci_register_driver函数将调用设备探测函数(probe)并向该函数传递该设备的pci_dev变量,然后由设备探测函数完成对设备的初始化。建立DMA操作环境的工作包括DMA缓冲区的分配和中断处理。本系统使用流式DMA映射(dma_map_single())来申请适当大小的DMA缓冲区。当一个缓冲区被流式映射后,只有将其unmap除掉以后,驱动程序才能安全地访问里面的数据内容,并通过request_irq函数实现中断处理程序的注册。这里有两个问题需要注意:一是PCI设备注册中断时,必须使用共享中断方式,并应在中断处理程序中增加对中断源的检查;二是PLX9054的中断信号一旦产生就一直有效,它必须通过代码清除中断。
本系统采用Qt/Embedded(4.5)进行GUI设计,以便为系统用户提供一个高性能、高可靠的GUl支持。Qt/Embedded是著名的Qt库开发商Trolltech公司开发的、面向嵌入式系统的Qt版本,许多基于Qt的X Window程序都可以非常方便地移植到Qt/Embedded上,而且与X11版本的Qt在最大程度上接口兼容,因而延续了在XWindow上的强大功能,并在底层彻底摒弃了X lib,而仅采用Framebuffer作为底层图形接口。同时,使用Qt的多线程设计则使人机交互、视频显示和数据存储能够同时进行。
本系统采用Framebuffer帧缓冲技术来实现视频数据的快速显示。Framebuffer机制模仿的是显卡的功能,它将显卡硬件结构抽象掉,可通过Framebuffer的读写直接对显存进行操作。内核编译时可选上对Framebuffer的支持。进入Framebuffer可以在系统启动时向内核传送vga= modenumber的参数来激活Framebuffer设备(如:vga=791)。Framebuffer的设备文件一般是/dev/fb0、/dev/fb1等。
在应用程序中,一般可将Framebuffer设备映射到进程地址空间的方式使用,比如利用下面的程序就可以打开/dev/fb0设备,并通过mmap系统调用进行地址映射,随后用memset将屏幕清空(这里假设显示模式是1024x768-32位色模式和线性内存模式):
x.jpg
在子函数initFb中,对映射过的内存地址(即显存)再进行分行映射,即把原来的一维线性地址转换为二维线性空间,这样,映射后的fbp[x][y]就可以在屏幕上表示水平位置为y、垂直位置为x的像素。
t.JPG
u.JPG
利用该映射能够对显示区域中的某一行进行操作,也可以对显示数据包的每一帧进行行分析,进而对每一行进行控制和显示。这样既可保证显示的灵活性,又具有良好的显示速度。

3 结束语
本文给出了一种基于FPGA控制逻辑的高速数据接收存储显示系统的硬件设计方案,同时详细介绍了Linux系统下基于Qt/Embedded和Fr-amebuffer的工控机存储显示程序的实现方法。


上一页 1 2 3 下一页

关键词:PlusPC总线

评论


相关推荐

技术专区

关闭