<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于TMS320DM642的視頻采集驅動(dòng)程序

基于TMS320DM642的視頻采集驅動(dòng)程序

作者: 時(shí)間:2008-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏

  終端的核心是圖像的數字化處理模塊.基于PC機的數字處理,給出了算法研究的途徑,而基于高速的應用模塊才提供了實(shí)時(shí)嵌入式處理的可能.然而,基于的海量視頻數據的實(shí)時(shí)處理的關(guān)鍵則是實(shí)時(shí)、合理的視頻數據采集.本文針對自行研制的基于TMS320DM642(以下簡(jiǎn)稱(chēng)DM642)的視頻處理板卡,使其在C64x系列DSP的實(shí)時(shí)操作系統DSP/BIOS的環(huán)境下運行,實(shí)現基于類(lèi)/微模型的視頻采集程序,并進(jìn)一步描述采用EDMA(增強的直接存儲器存取控制器)的數字視頻圖像信號的實(shí)時(shí)傳輸.

  1 類(lèi)/微程序模型

  C64x系列的DSP系統給出了類(lèi)/微驅動(dòng)模型[1]的驅動(dòng)程序結構,采用該模型進(jìn)行驅動(dòng)程序設計,應用程序可以復用絕大部分相似設備的驅動(dòng)程序,從而提高驅動(dòng)程序的開(kāi)發(fā)效率.類(lèi)/微驅動(dòng)模型結構如圖1所示,該模型在功能上將驅動(dòng)程序分為依賴(lài)硬件層(微驅動(dòng))和不依賴(lài)硬件層(類(lèi)驅動(dòng))兩層,并在兩層之間給出通用接口.上層的應用程序不直接控制微驅動(dòng),而是通過(guò)類(lèi)驅動(dòng)對其進(jìn)行控制.每一個(gè)類(lèi)驅動(dòng)在應用程序代碼中表現為一個(gè)API函數,并通過(guò)標準微驅動(dòng)的接口IOM與微驅動(dòng)進(jìn)行通信.

  在類(lèi)/微驅動(dòng)模型中,類(lèi)驅動(dòng)通常用于完成多線(xiàn)程I/O請求的序列化功能和同步功能,同時(shí)對設備實(shí)例進(jìn)行管理.類(lèi)驅動(dòng)通過(guò)每個(gè)外部設備獨有的微驅動(dòng)對設備進(jìn)行操作.微驅動(dòng)采用芯片支持庫[2]控制外設的寄存器、內存和中斷資源.微驅動(dòng)程序必須將特定的外部設備有效地表示給類(lèi)驅動(dòng).

  類(lèi)驅動(dòng)使用DSP/BIOS中的API函數[3]實(shí)現諸如同步等的系統服務(wù),DSP/BIOS定義了三種類(lèi)驅動(dòng)模塊:管道管理模塊(PIP)、流輸入輸出管理模塊(SIO)和通用輸入輸出模塊(GIO).在PIP和SIO類(lèi)驅動(dòng)中,調用的API函數已經(jīng)存在于DSP/BIOS的PIP和SIO模塊中了,這些API函數需將參數傳給相應的適配模塊,才能與微驅動(dòng)交換數據.而在GIO類(lèi)驅動(dòng)中,調用的API函數則直接與微驅動(dòng)通信.

  2 基于DM642的視頻采集驅動(dòng)

  2.1硬件結構

  筆者利用公司的多媒體處理芯片DM642自行研制了嵌入式視頻處理板卡.卡上的主要組成模塊有視頻采集模塊、視頻處理模塊以及網(wǎng)絡(luò )發(fā)送模塊,其中視頻采集模塊主要由DSP芯片DM642[4]、視頻A/D轉換芯片SAA7115和同步動(dòng)態(tài)存儲器芯片SDRAM等組成,如圖2所示.來(lái)自攝像頭的視頻信號通過(guò)SAA7115進(jìn)行數字化處理,輸出的數字視頻信號經(jīng)過(guò)視頻端口的內部FIFO緩沖后,由DM642通過(guò)EDMA將數據傳送到片外SDRAM中,以便供視頻應用程序使用.

  主芯片DM642的處理能力達到4800MIPS,它的最大特點(diǎn)是芯片內部集成了三個(gè)可配置的視頻端口[5],這些視頻端口提供了與通用視頻A/D轉換芯片的無(wú)縫接口,因而無(wú)需外加CPLD(復雜可編程邏輯器件)和FIFO就可以滿(mǎn)足系統設計的要求.SAA7115支持六路CVBS(復合可編程邏輯器件)和FIFO就可以滿(mǎn)足系統設計的要求.SA7115支持六路CVBS(復合模擬視頻輸入)或三路S-VIDEO(S端子信號)輸入,支持多種格式的數字RGB和YUV視頻信號輸出.DM642通過(guò)IIC總線(xiàn)控制SAA7115的內部寄存器.

  采用類(lèi)/微驅動(dòng)模型編寫(xiě)DM642芯片視頻端口的視頻采集驅動(dòng)程序,驅動(dòng)必須滿(mǎn)足如下幾個(gè)基本功能:

  ·硬件中斷;

  ·可同時(shí)處理DM642的三個(gè)視頻端口;

  ·支持應用程序配置視頻采集的參數,支持獲取圖像數據;

  ·支持場(chǎng)圖像采集,支持對CVBS和S-VIDEO兩種模擬信號的采集.

  在視頻采集過(guò)程中,最重要的是對視頻數據進(jìn)行實(shí)時(shí)控制和有效的傳輸,因此需要使用硬件中斷,并在中斷服務(wù)程序中,根據視頻端口內部FIFO的狀態(tài)通過(guò)EDMA完成視頻數據的讀入.

  2.2視頻采集驅動(dòng)程序的框架構建

  視頻采集驅動(dòng)程序包括類(lèi)驅動(dòng)和微驅動(dòng)兩個(gè)模塊,視頻采集驅動(dòng)程序的結構框架如圖3所示.

  類(lèi)驅動(dòng)使用GIO模塊,GIO模塊的傳輸械是基于流輸入輸出模塊的同步I/O模式的,更適合文件系統I/O,如視頻采集的應用.該模塊的主要API函數的描述如表1所示.

  表1 GIO模塊的主要API函數

函 數函數描述
GIO_control設備控制操作
GIO_create創(chuàng )建GIO通道
GIO_delete取消GIO通道,釋放資源
GIO_submit向微驅動(dòng)發(fā)送數據包

  在圖3中,應用程序使用GIO_create函數創(chuàng )建GIO通道,并通過(guò)調用GIO_submit函數直接與微驅動(dòng)的IOM交換數據,完成視頻數據的采集.

  應用程序通過(guò)GIO類(lèi)驅動(dòng)調用微驅動(dòng)的標準API函數,這些標準API函數的描述如表2所示.這些規定的函數將放入微驅動(dòng)的函數接口表(IOM_Fxns)中,以供應用程序通過(guò)GIO類(lèi)驅動(dòng)調用.

  表2 微驅動(dòng)的API函數

函 數函數描述
MdBidDec綁定通道
mdCreateChan/mdDeleteChan創(chuàng )建/刪除通道
mdSubmitChanI/O請求發(fā)送
ISRs中斷服務(wù)
mdControlChan硬件設備控制

  在圖3中,微驅動(dòng)的IOM接口將應用程序獲取圖像的命令打包生成數據包,并向微驅動(dòng)發(fā)送.數據包的格式如下:

  typedef struct IOM_Packet{

  QUE_Elem link; /*數據包隊列*/

  Ptr addr;/*數據地址*/

  Uns size;/*數據長(cháng)度*/

  Arg misc;/*保留使用*/

  Arg arg;/*應用程序*/

  Uns cmd;/*命令字段*/

  Int status;/*命令完成狀態(tài)*/

  }IOM_Packet;

  數據包中數據長(cháng)度與數據地址兩字段由應用程序提供,分別表示獲取圖像的大小及圖像存儲目的地址.微驅動(dòng)依據數據包中的命令字段,調用mdSubmitChan函數將數據包放入數據包隊列,等待中斷服務(wù)函數的處理.視頻采集中的硬件中斷由視頻端口內部FIFO的狀態(tài)觸發(fā),中斷服務(wù)程序根據數據包中的數據地址字段,通過(guò)EDMA將視頻端口內部FIFO中的視頻數據讀入SDRAM中的圖像存儲目的地址.依據數據包中的數據長(cháng)度字段,在完成相應大小圖像的采集后,中斷服務(wù)程序還將完成以下功能:出列數據包;設置下一次傳送或服務(wù)請求;設置數據包中的命令完成狀態(tài),并向應用程序返回.

  3 視頻采集驅動(dòng)中的視頻數據傳輸

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

基于TMS320DM642的視頻采集驅動(dòng)程序的實(shí)現

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

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

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

  3.2 EDMA鏈表在場(chǎng)合成中的使用

  在隔行掃描模式下,每幀分為兩場(chǎng),兩場(chǎng)在時(shí)域上是分開(kāi)的,但在數據處理時(shí)需要將兩場(chǎng)合成一幀進(jìn)行處理,因此要進(jìn)行大量的數據搬移,占用了大量的CPU時(shí)間.通過(guò)EDMA鏈表可自動(dòng)實(shí)現場(chǎng)合成,不需占用額外的CPU時(shí)間.

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

  4 視頻采集驅動(dòng)程序的調用實(shí)例

  DSP/BIOS應用程序通過(guò)GIO類(lèi)驅動(dòng)調用微驅動(dòng)之前,需使用DSP/BIOS配置工具注冊微驅動(dòng),將其命名為VP_CAPTURE,并啟動(dòng)GIO模塊.

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

  (1)創(chuàng )建通道

  GIO_Handle capChan;

  int status;

  capChan=GIO_create("VP_CAPTURE"),

  IOM_INPUT,status,(Ptr)DM642_vCapParams,NULL);

  (2)發(fā)送獲取圖像的數據包

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

  使用類(lèi)/微驅動(dòng)模型開(kāi)發(fā)的視頻采集驅動(dòng)程序,有效地解決了圖像采集和圖像實(shí)時(shí)處理之間的關(guān)系,在幾乎不需要CPU的干涉下,利用EDMA完成了數字視頻圖像數據的高速傳輸;通過(guò)使用類(lèi)驅動(dòng)復用驅動(dòng)程序,視頻應用程序的開(kāi)發(fā)次序獲得了極大的提高.視頻采集驅動(dòng)程序現已在自主開(kāi)發(fā)的視頻處理板上運行良好,為進(jìn)一步開(kāi)發(fā)遠程視頻監控系統、可視電話(huà)等視頻應用打下了堅實(shí)的基礎.



關(guān)鍵詞: DSP TI 視頻 驅動(dòng) 圖像處理

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>