<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/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)對PLX9054的DMA操作并設(shè)置DMA控制寄存器,設(shè)備驅(qū)動(dòng)程序需要做兩件事:一是檢測I設(shè)備并初始化:二是建立DMA操作環(huán)境。在Linux2.6內(nèi)核中,I設(shè)備檢測和初始化可通過專門的注冊函數(shù)pci_regis-ter-driver來實(shí)現(xiàn)。內(nèi)核根據(jù)pci_device_id結(jié)構(gòu)中的預(yù)設(shè)ID來對pci_devices鏈表進(jìn)行搜索,一旦找到目標(biāo)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())來申請適當(dāng)大小的DMA緩沖區(qū)。當(dāng)一個(gè)緩沖區(qū)被流式映射后,只有將其unmap除掉以后,驅(qū)動(dòng)程序才能安全地訪問里面的數(shù)據(jù)內(nèi)容,并通過request_irq函數(shù)實(shí)現(xiàn)中斷處理程序的注冊。這里有兩個(gè)問題需要注意:一是PCI設(shè)備注冊中斷時(shí),必須使用共享中斷方式,并應(yīng)在中斷處理程序中增加對中斷源的檢查;二是PLX9054的中斷信號一旦產(chǎn)生就一直有效,它必須通過代碼清除中斷。
          本系統(tǒng)采用Qt/Embedded(4.5)進(jìn)行GUI設(shè)計(jì),以便為系統(tǒng)用戶提供一個(gè)高性能、高可靠的GUl支持。Qt/Embedded是著名的Qt庫開發(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ù)存儲能夠同時(shí)進(jìn)行。
          本系統(tǒng)采用Framebuffer幀緩沖技術(shù)來實(shí)現(xiàn)視頻數(shù)據(jù)的快速顯示。Framebuffer機(jī)制模仿的是顯卡的功能,它將顯卡硬件結(jié)構(gòu)抽象掉,可通過Framebuffer的讀寫直接對顯存進(jìn)行操作。內(nèi)核編譯時(shí)可選上對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中,對映射過的內(nèi)存地址(即顯存)再進(jìn)行分行映射,即把原來的一維線性地址轉(zhuǎn)換為二維線性空間,這樣,映射后的fbp[x][y]就可以在屏幕上表示水平位置為y、垂直位置為x的像素。
          t.JPG
          u.JPG
          利用該映射能夠?qū)︼@示區(qū)域中的某一行進(jìn)行操作,也可以對顯示數(shù)據(jù)包的每一幀進(jìn)行行分析,進(jìn)而對每一行進(jìn)行控制和顯示。這樣既可保證顯示的靈活性,又具有良好的顯示速度。

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


          上一頁 1 2 3 下一頁

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

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();