新聞中心

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

        基于DSP的視頻采集驅動程序的設計

        作者: 時間:2011-10-09 來源:網絡 收藏
        2.2 的框架構建

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

          包括類驅動和微驅動兩個模塊,的結構框架如圖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的有效傳輸。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 湖州市| 南郑县| 游戏| 云霄县| 新巴尔虎左旗| 天峨县| 静宁县| 页游| 柳林县| 长泰县| 成都市| 禄丰县| 金阳县| 饶阳县| 襄垣县| 塔城市| 田阳县| 建水县| 松潘县| 蓝田县| 万安县| 洮南市| 嘉峪关市| 渝中区| 肥东县| 富源县| 黄石市| 宁蒗| 泸州市| 旅游| 鄄城县| 江城| 兴城市| 鱼台县| 米泉市| 体育| 清徐县| 临汾市| 象山县| 德安县| 万年县|