基於TMS320DM642的視頻採集驅動程式的實現

來源:互聯網
上載者:User
基於TMS320DM642的視頻採集驅動程式的實現
[日期:2008-8-21] 來源:電子技術應用  作者:鹿寶生, 陳啟美 [字型: ]

 

視頻終端的核心是映像的數字化處理模組。基於PC機的數位視訊處理,給出了演算法研究的途徑,而基於高速DSP的應用模組才提供了即時嵌入式視頻處理的可能。然而,基於DSP的海量視頻資料的即時處理的關鍵則是即時、合理的視頻資料擷取。本文針對自行研製的基於TMS320DM642(以下簡稱DM642)DSP的視頻處理板卡,使其在C64x系列DSP的即時作業系統DSP/BIOS的環境下運行,實現基於類/微驅動模型的視頻採集驅動程式,並進一步描述採用EDMA(增強直接儲存空間存取控制器)的數位視訊映像訊號的即時傳輸。
1 類/微驅動程式模型
  C64x系列的DSP系統給出了類/微驅動模型[1] 的驅動程式結構,採用該模型進行驅動程式設計,應用程式可以複用絕大部分相似裝置的驅動程式,從而提高驅動程式的開發效率。類/微驅動模型結構1所示,該模型在功能上將驅動程式分為依賴硬體層(微驅動)和不依賴硬體層(類驅動)兩層,並在兩層之間給出通用介面。上層的應用程式不直接控制微驅動,而是通過類驅動對其進行控制。每一個類驅動在應用程式代碼中表現為一個API函數,並通過標準微驅動的介面IOM與微驅動進行通訊。

  在類/微驅動模型中,類驅動通常用於完成多線程I/O請求的序列化功能和同步功能,同時對裝置執行個體進行管理。類驅動通過每個外部裝置專屬的微驅動對裝置進行操作。微驅動採用晶片支援庫[2]控制外設的寄存器、記憶體和中斷資源。微驅動程式必須將特定的外部裝置有效地表示給類驅動。
  類驅動使用DSP/BIOS中的API函數[3]實現諸如同步等的系統服務,DSP/BIOS定義了三種類驅動模組:管道管理模組(PIP)、流輸入輸出管理模組(SIO)和通用輸入輸出模組(GIO)。在PIP和SIO類驅動中,調用的API函數已經存在於DSP/BIOS的PIP和SIO模組中了,這些API函數需將參數傳給相應的適配模組,才能與微驅動交換資料。而在GIO類驅動中,調用的API函數則直接與微驅動通訊。
2 基於DM642的視頻採集驅動
2.1 硬體結構

  筆者利用TI公司的多媒體處理晶片DM642自行研製了嵌入式視頻處理板卡。卡上的主要組成模組有視頻採集模組、視頻處理模組以及網路發送模組,其中視頻採集模組主要由DSP晶片DM642[4]、視頻A/D 轉換晶片SAA7115和同步動態儲存裝置器晶片SDRAM等組成,2所示。來自網路攝影機的視頻訊號通過SAA7115進行數字化處理,輸出的數位視訊訊號經過視頻連接埠的內部FIFO緩衝後,由DM642通過EDMA將資料傳送到片外SDRAM中,以便供視頻應用程式使用。

  主晶片DM642的處理能力達到4800MIPS,它的最大特點是晶片內部整合了三個可配置的視頻連接埠[5],這些視頻連接埠提供了與通用視頻A/D轉換晶片的無縫介面,因而無需外加CPLD(複雜可程式邏輯元件)和FIFO就可以滿足系統設計的要求。SAA7115支援六路CVBS(複合類比視頻輸入)或三路S-VIDEO (S端子訊號)輸入,支援多種格式的數字RGB和YUV視頻訊號輸出。DM642通過IIC匯流排控制SAA7115的內部寄存器。
  採用類/微驅動模型編寫DM642晶片視頻連接埠的視頻採集驅動程式,驅動必須滿足如下幾個準系統:
  · 硬體中斷;
  · 可同時處理DM642的三個視頻連接埠;
  · 支援應用程式配置視頻採集的參數,支援擷取映像資料;
  · 支援場映像的採集,支援對CVBS和S-VIDEO兩種類比訊號的採集。
  在視頻採集過程中,最重要的是對視頻資料進行即時控制和有效傳輸,因此需要使用硬體中斷,並在中斷服務程式中,根據視頻連接埠內部FIFO的狀態通過EDMA完成視頻資料的讀入。
2.2 視頻採集驅動程式的架構構建
  視頻採集驅動程式套件括類驅動和微驅動兩個模組,視頻採集驅動程式的結構架構3所示。

 

  類驅動使用GIO模組,GIO模組的傳輸模式是基於流輸入輸出模組的同步I/O模式的,更適合檔案系統I/O,如視頻採集的應用。該模組的主要API函數的描述如表1所示。
  在圖3中,應用程式使用GIO_create函數建立GIO通道,並通過調用GIO_submit函數直接與微驅動的IOM交換資料,完成視頻資料的採集。
  應用程式通過GIO類驅動調用微驅動的標準API函數,這些標準API函數的描述如表2所示。這些規定的函數將放入微驅動的函數介面表(IOM_Fxns)中,以供應用程式通過GIO類驅動調用。

  在圖3中,微驅動的IOM介面將應用程式擷取映像的命令打包產生資料包,並向微驅動發送。資料包的格式如下: typedef struct IOM_Packet {
  QUE_Elem link; /* 資料包隊列 */
  Ptr addr; /* 資料地址 */
  Uns size; /* 資料長度 */
  Arg misc; /* 保留使用 */
  Arg arg; /* 應用程式 */
  Uns cmd; /* 命令欄位 */
  Int status; /* 命令完成狀態 */
  } IOM_Packet;
  資料包中資料長度與資料地址兩欄位由應用程式提供,分別表示擷取映像的大小及映像儲存目的地址。微驅動依據資料包中的命令欄位,調用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 視頻採集驅動程式的調用執行個體
  DSP/BIOS應用程式通過GIO類驅動調用微驅動之前,需使用DSP/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 DSP/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 TMS320DM642 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.