新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于DSP的視頻采集驅(qū)動程序的設(shè)計

        基于DSP的視頻采集驅(qū)動程序的設(shè)計

        作者: 時間:2011-10-09 來源:網(wǎng)絡(luò) 收藏
        2.2 的框架構(gòu)建

        本文引用地址:http://www.104case.com/article/150128.htm

          包括類驅(qū)動和微驅(qū)動兩個模塊,的結(jié)構(gòu)框架如圖3所示。

          類驅(qū)動使用GIO模塊,GIO模塊的傳輸模式是流輸入輸出模塊的同步I/O模式的,更適合文件系統(tǒng)I/O,如視頻采集的應(yīng)用。該模塊的主要API函數(shù)的描述如表1所示。

          在圖3中,應(yīng)用程序使用GIO_create函數(shù)創(chuàng)建GIO通道,并通過調(diào)用GIO_submit函數(shù)直接與微驅(qū)動的IOM交換數(shù)據(jù),完成視頻數(shù)據(jù)的采集。

          應(yīng)用程序通過GIO類驅(qū)動調(diào)用微驅(qū)動的標準API函數(shù),這些標準API函數(shù)的描述如表2所示。這些規(guī)定的函數(shù)將放入微驅(qū)動的函數(shù)接口表(IOM_Fxns)中,以供應(yīng)用程序通過GIO類驅(qū)動調(diào)用。


          在圖3中,微驅(qū)動的IOM接口將應(yīng)用程序獲取圖像的命令打包生成數(shù)據(jù)包,并向微驅(qū)動發(fā)送。數(shù)據(jù)包的格式如下: typedef struct IOM_Packet {

          QUE_Elem link; /* 數(shù)據(jù)包隊列 */
          Ptr addr; /* 數(shù)據(jù)地址 */
          Uns size; /* 數(shù)據(jù)長度 */
          Arg misc; /* 保留使用 */
          Arg arg; /* 應(yīng)用程序 */
          Uns cmd; /* 命令字段 */
          Int status; /* 命令完成狀態(tài) */
          } IOM_Packet;

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

          3 視頻采集驅(qū)動中的視頻數(shù)據(jù)傳輸

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

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

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



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 如东县| 商城县| 怀仁县| 石泉县| 延寿县| 望奎县| 元朗区| 特克斯县| 友谊县| 游戏| 伊通| 将乐县| 青冈县| 凭祥市| 图们市| 乌拉特前旗| 久治县| 本溪市| 竹山县| 谢通门县| 大冶市| 新龙县| 读书| 娄烦县| 东莞市| 谢通门县| 社会| 阿拉善盟| 崇仁县| 大渡口区| 岳阳县| 祁东县| 琼海市| 株洲市| 宣恩县| 从江县| 卢氏县| 肥东县| 云南省| 太仓市| 攀枝花市|