關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于PC104(Plus)總線的數(shù)據(jù)接收存儲(chǔ)顯示系統(tǒng)設(shè)計(jì)

基于PC104(Plus)總線的數(shù)據(jù)接收存儲(chǔ)顯示系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2011-03-28 來源:網(wǎng)絡(luò) 收藏

2.3 工控機(jī)顯示存儲(chǔ)模塊設(shè)計(jì)
本系統(tǒng)利用PLX9054和Linux的DMA技術(shù)來實(shí)現(xiàn)大量數(shù)據(jù)的高速傳輸,同時(shí)使用Qt/Ernbedded進(jìn)行人機(jī)界面設(shè)計(jì)和Framebuffer的幀緩沖顯示,以對(duì)視頻數(shù)據(jù)進(jìn)行存儲(chǔ)和顯示控制。整個(gè)軟件的功能圖如圖5所示。

本文引用地址:http://butianyuan.cn/article/202466.htm

s.JPG


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

3 結(jié)束語(yǔ)
本文給出了一種基于FPGA控制邏輯的高速數(shù)據(jù)接收存儲(chǔ)顯示系統(tǒng)的硬件設(shè)計(jì)方案,同時(shí)詳細(xì)介紹了Linux系統(tǒng)下基于Qt/Embedded和Fr-amebuffer的工控機(jī)存儲(chǔ)顯示程序的實(shí)現(xiàn)方法。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: Plus PC 總線

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉