新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于DSP的視頻采集驅動程序的實現

        基于DSP的視頻采集驅動程序的實現

        作者: 時間:2008-08-21 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/258045.htm
          數據包中數據長度與數據地址兩字段由應用程序提供,分別表示獲取圖像的大小及圖像存儲目的地址。微驅動依據數據包中的命令字段,調用mdSubmitChan函數將數據包放入數據包隊列,等待中斷服務函數的處理。視頻采集中的硬件中斷由視頻端口內部FIFO的狀態觸發,中斷服務程序根據數據包中的數據地址字段,通過EDMA將視頻端口內部FIFO中的視頻數據讀入SDRAM中的圖像存儲目的地址。依據數據包中的數據長度字段,在完成相應大小圖像的采集后,中斷服務程序還將完成以下功能:出列數據包;設置下一次傳送或服務請求;設置數據包中的命令完成狀態,并向應用程序返回。

          3 視頻采集驅動中的視頻數據傳輸

          視頻端口內部FIFO與SDRAM之間的視頻數據傳輸通常有以下幾種方法:軟件查詢、中斷和EDMA方法。軟件查詢消耗CPU的資源太大,是不可取的,中斷數據傳輸雖可節省很多CPU時間,但沒有發揮DM642的EDMA資源。EDMA[6]是在DMA基礎上發展起來的,用于在沒有CPU參與的情況下完成不同存儲空間之間的數據搬移。DM642提供了64個獨立的EDMA通道,通道的優先級可編程設置,在沒有CPU參與的情況下實現片內存儲器、片內外設以及外部存儲空間之間的數據高速搬移。因此,為減輕CPU的負擔,發揮DM642的強大的外部數據傳輸能力,視頻采集驅動使用EDMA完成視頻數據從FIFO到SDRAM的傳輸。

          3.1 基于雙EDMA通道的視頻數據傳輸

          利用EDMA將FIFO中的數據傳輸到SDRAM中有兩種方法,但是它們的性能卻差別很大。一種方法是利用EDMA將FIFO中的數據直接傳送到SDRAM中。這種方法雖然簡單且易于操作,但它沒有充分發揮SDRAM的頁讀寫的優越性,原因在于EDMA讀取FIFO和寫入SDRAM時分為兩個不同過程來實現,因此EMIF(外部存儲器接口)的時序不斷地在兩者之間切換,造成很大的時間浪費,所以這種傳輸效率不高。

          由于DM642視頻端口的內部FIFO提供“滿”、“半滿”、“空”三種狀態,另一方法使用兩個EDMA通道進行數據傳輸。以亮度信號的傳輸為例,當用于存儲亮度分量的內部FIFO半滿(640字節)時,觸發DM642的硬件中斷,在中斷服務程序中啟用一個EDMA通道將數據從FIFO中讀出,存放到緩沖區BUF中。傳輸完畢后,啟動另一個EDMA通道將數據從BUF中傳輸到SDRAM中。這樣,兩個EDMA通道分別進行讀取FIFO和寫入SDRAM的操作,避免了EMIF時序的切換,可以保證EDMA的有效傳輸。

          3.2 EDMA鏈表在場合成中的使用

          在隔行掃描模式下,每幀分為兩場,兩場在時域上是分開的,但在數據處理時需要將兩場合成一幀進行處理,因此要進行大量的數據搬移,占用了大量的CPU時間。通過EDMA鏈表可自動實現場合成,不需占用額外的CPU時間。

          EDMA的參數RAM存放了有關的傳輸參數,這些參數用于產生EDMA讀寫操作所需要的地址。如圖4所示,在使用EDMA通道傳輸奇數場與偶數場時,分別使用不同的EDMA參數RAM。兩組參數RAM的目的地址分別指向存儲圖像的第一行與第二行象素的首地址,并且兩組參數RAM通過鏈接地址循環相連。在EDMA通道的傳輸中,奇數場傳輸任務的結束會自動地根據當前參數RAM的鏈接地址裝載傳輸偶數場的參數RAM,又由兩組參數RAM的目的地址可知,奇數場與偶數場分別經EDMA通道傳輸至幀緩沖區后被隔行存儲,這樣在無需占用額外CPU時間的前提下就實現了場合成。

          4 視頻采集驅動程序的調用實例

          /BIOS應用程序通過GIO類驅動調用微驅動之前,需使用/BIOS配置工具注冊微驅動,將其命名為VP_CAPTURE,并啟動GIO模塊。

          在應用程序中,GIO_create函數使用已注冊的微驅動VP_CAPTURE創建GIO通道,通過調用GIO_submit函數完成應用程序對視頻數據的采集操作。部分源代碼如下:

          (1) 創建通道

          GIO_Handle capChan;
          int status;
          capChan = GIO_create('VP_CAPTURE'),
          IOM_INPUT, status, (Ptr)DM642_vCapParams, NULL);
          (2) 發送獲取圖像的數據包

          GIO_submit(capChan, IOM_READ, bufp, NULL, NULL);其中,DM642_vCapParams包含了視頻采集的初始化參數,如圖像大小、同步方式等;bufp用于指出采集圖像的存儲地址。不同的視頻應用程序在使用類驅動時,可以通過改變這兩個變量復用視頻設備。這樣,極大地提高了驅動程序的工作效率,對視頻外設的控制也大大簡化了。

          使用類/微驅動模型開發的視頻采集驅動程序,有效地解決了圖像采集和圖像實時處理之間的關系,在幾乎不需要CPU的干涉下,利用EDMA完成了圖像數據的高速傳輸;通過使用類驅動復用驅動程序,視頻應用程序的開發效率獲得了極大的提高。視頻采集驅動程序現已在自主開發的視頻處理板卡上運行良好,為進一步開發遠程視頻監控系統、可視電話等視頻應用打下了堅實的基礎。

          參考文獻

          1 /BIOS Driver Developer’s Guide. Literature Number: SPRU616. Texas Instruments Incorporated, November 2002
          2 TMS320C6000 Chip Support Library API Reference Guide. Literature Number: SPRU401. Texas Instruments Incorporated,December 2002
          3 TMS320C6000 DSP/BIOS Application Programming Interface. Literature Number: SPRU403. Texas Instruments Incorporated,October 2002
          4 Technical Overview.Literature Number:SPRU615.Texas Instruments Incorporated, September 2002
          5 TMS320C64x DSP Video Port/ VCXO Interpolated Control (VIC) Port Reference Guide. Literature Number: SPRU629. Texas Instruments Incorporated, April 2003
          6 TMS320C6000 Peripherals Reference Guide. Literature Num-ber:SPRU190. Texas Instruments Incorporated, February 2001


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 城口县| 清苑县| 瓮安县| 卓尼县| 湖口县| 景泰县| 黎平县| 吕梁市| 阳山县| 河北区| 绍兴市| 鹤峰县| 夏河县| 尼玛县| 囊谦县| 温泉县| 河西区| 噶尔县| 名山县| 焦作市| 姜堰市| 辽源市| 金山区| 文安县| 长武县| 余干县| 江华| 云南省| 西安市| 达拉特旗| 阿图什市| 荆门市| 西乡县| 定州市| 安陆市| 雅江县| 拜城县| 阿荣旗| 长岭县| 池州市| 宁海县|