基于PC104(Plus)總線的數(shù)據(jù)接收存儲顯示系統(tǒng)設(shè)計
2.3 工控機顯示存儲模塊設(shè)計
本系統(tǒng)利用PLX9054和Linux的DMA技術(shù)來實現(xiàn)大量數(shù)據(jù)的高速傳輸,同時使用Qt/Ernbedded進行人機界面設(shè)計和Framebuffer的幀緩沖顯示,以對視頻數(shù)據(jù)進行存儲和顯示控制。整個軟件的功能圖如圖5所示。本文引用地址:http://butianyuan.cn/article/202466.htm
PLX9054的PCI設(shè)備驅(qū)動是DMA傳輸?shù)年P(guān)鍵,驅(qū)動程序利用PLX9054芯片的DMA功能可將FPGA控制模塊中的數(shù)據(jù)快速傳輸?shù)絃inux操作系統(tǒng)的內(nèi)核內(nèi)存中。要實現(xiàn)對PLX9054的DMA操作并設(shè)置DMA控制寄存器,設(shè)備驅(qū)動程序需要做兩件事:一是檢測PCI設(shè)備并初始化:二是建立DMA操作環(huán)境。在Linux2.6內(nèi)核中,PCI設(shè)備檢測和初始化可通過專門的注冊函數(shù)pci_regis-ter-driver來實現(xiàn)。內(nèi)核根據(jù)pci_device_id結(jié)構(gòu)中的預(yù)設(shè)ID來對pci_devices鏈表進行搜索,一旦找到目標PCI設(shè)備,pci_register_driver函數(shù)將調(diào)用設(shè)備探測函數(shù)(probe)并向該函數(shù)傳遞該設(shè)備的pci_dev變量,然后由設(shè)備探測函數(shù)完成對設(shè)備的初始化。建立DMA操作環(huán)境的工作包括DMA緩沖區(qū)的分配和中斷處理。本系統(tǒng)使用流式DMA映射(dma_map_single())來申請適當大小的DMA緩沖區(qū)。當一個緩沖區(qū)被流式映射后,只有將其unmap除掉以后,驅(qū)動程序才能安全地訪問里面的數(shù)據(jù)內(nèi)容,并通過request_irq函數(shù)實現(xiàn)中斷處理程序的注冊。這里有兩個問題需要注意:一是PCI設(shè)備注冊中斷時,必須使用共享中斷方式,并應(yīng)在中斷處理程序中增加對中斷源的檢查;二是PLX9054的中斷信號一旦產(chǎn)生就一直有效,它必須通過代碼清除中斷。
本系統(tǒng)采用Qt/Embedded(4.5)進行GUI設(shè)計,以便為系統(tǒng)用戶提供一個高性能、高可靠的GUl支持。Qt/Embedded是著名的Qt庫開發(fā)商Trolltech公司開發(fā)的、面向嵌入式系統(tǒng)的Qt版本,許多基于Qt的X Window程序都可以非常方便地移植到Qt/Embedded上,而且與X11版本的Qt在最大程度上接口兼容,因而延續(xù)了在XWindow上的強大功能,并在底層徹底摒棄了X lib,而僅采用Framebuffer作為底層圖形接口。同時,使用Qt的多線程設(shè)計則使人機交互、視頻顯示和數(shù)據(jù)存儲能夠同時進行。
本系統(tǒng)采用Framebuffer幀緩沖技術(shù)來實現(xiàn)視頻數(shù)據(jù)的快速顯示。Framebuffer機制模仿的是顯卡的功能,它將顯卡硬件結(jié)構(gòu)抽象掉,可通過Framebuffer的讀寫直接對顯存進行操作。內(nèi)核編譯時可選上對Framebuffer的支持。進入Framebuffer可以在系統(tǒng)啟動時向內(nèi)核傳送vga= modenumber的參數(shù)來激活Framebuffer設(shè)備(如:vga=791)。Framebuffer的設(shè)備文件一般是/dev/fb0、/dev/fb1等。
在應(yīng)用程序中,一般可將Framebuffer設(shè)備映射到進程地址空間的方式使用,比如利用下面的程序就可以打開/dev/fb0設(shè)備,并通過mmap系統(tǒng)調(diào)用進行地址映射,隨后用memset將屏幕清空(這里假設(shè)顯示模式是1024x768-32位色模式和線性內(nèi)存模式):
在子函數(shù)initFb中,對映射過的內(nèi)存地址(即顯存)再進行分行映射,即把原來的一維線性地址轉(zhuǎn)換為二維線性空間,這樣,映射后的fbp[x][y]就可以在屏幕上表示水平位置為y、垂直位置為x的像素。
利用該映射能夠?qū)︼@示區(qū)域中的某一行進行操作,也可以對顯示數(shù)據(jù)包的每一幀進行行分析,進而對每一行進行控制和顯示。這樣既可保證顯示的靈活性,又具有良好的顯示速度。
3 結(jié)束語
本文給出了一種基于FPGA控制邏輯的高速數(shù)據(jù)接收存儲顯示系統(tǒng)的硬件設(shè)計方案,同時詳細介紹了Linux系統(tǒng)下基于Qt/Embedded和Fr-amebuffer的工控機存儲顯示程序的實現(xiàn)方法。
評論