基于DSP的視頻采集驅動(dòng)程序的實(shí)現
1 類(lèi)/微驅動(dòng)程序模型
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)使用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 硬件結構
筆者利用TI公司的多媒體處理芯片DM642自行研制了嵌入式視頻處理板卡??ㄉ系闹饕M成模塊有視頻采集模塊、視頻處理模塊以及網(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中,以便供視頻應用程序使用。
采用類(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所示。
在圖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)調用。
QUE_Elem link; /* 數據包隊列 */
Ptr addr; /* 數據地址 */
Uns size; /* 數據長(cháng)度 */
Arg misc; /* 保留使用 */
Arg arg; /* 應用程序 */
Uns cmd; /* 命令字段 */
Int status; /* 命令完成狀態(tài) */
} IOM_Packet;
評論