基于DSP的視頻采集驅(qū)動程序的實(shí)現(xiàn)
1 類/微驅(qū)動程序模型
C64x系列的DSP系統(tǒng)給出了類/微驅(qū)動模型[1] 的驅(qū)動程序結(jié)構(gòu),采用該模型進(jìn)行驅(qū)動程序設(shè)計,應(yīng)用程序可以復(fù)用絕大部分相似設(shè)備的驅(qū)動程序,從而提高驅(qū)動程序的開發(fā)效率。類/微驅(qū)動模型結(jié)構(gòu)如圖1所示,該模型在功能上將驅(qū)動程序分為依賴硬件層(微驅(qū)動)和不依賴硬件層(類驅(qū)動)兩層,并在兩層之間給出通用接口。上層的應(yīng)用程序不直接控制微驅(qū)動,而是通過類驅(qū)動對其進(jìn)行控制。每一個類驅(qū)動在應(yīng)用程序代碼中表現(xiàn)為一個API函數(shù),并通過標(biāo)準(zhǔn)微驅(qū)動的接口IOM與微驅(qū)動進(jìn)行通信。
類驅(qū)動使用DSP/BIOS中的API函數(shù)[3]實(shí)現(xiàn)諸如同步等的系統(tǒng)服務(wù),DSP/BIOS定義了三種類驅(qū)動模塊:管道管理模塊(PIP)、流輸入輸出管理模塊(SIO)和通用輸入輸出模塊(GIO)。在PIP和SIO類驅(qū)動中,調(diào)用的API函數(shù)已經(jīng)存在于DSP/BIOS的PIP和SIO模塊中了,這些API函數(shù)需將參數(shù)傳給相應(yīng)的適配模塊,才能與微驅(qū)動交換數(shù)據(jù)。而在GIO類驅(qū)動中,調(diào)用的API函數(shù)則直接與微驅(qū)動通信。
2 基于DM642的視頻采集驅(qū)動
2.1 硬件結(jié)構(gòu)
筆者利用TI公司的多媒體處理芯片DM642自行研制了嵌入式視頻處理板卡??ㄉ系闹饕M成模塊有視頻采集模塊、視頻處理模塊以及網(wǎng)絡(luò)發(fā)送模塊,其中視頻采集模塊主要由DSP芯片DM642[4]、視頻A/D 轉(zhuǎn)換芯片SAA7115和同步動態(tài)存儲器芯片SDRAM等組成,如圖2所示。來自攝像頭的視頻信號通過SAA7115進(jìn)行數(shù)字化處理,輸出的數(shù)字視頻信號經(jīng)過視頻端口的內(nèi)部FIFO緩沖后,由DM642通過EDMA將數(shù)據(jù)傳送到片外SDRAM中,以便供視頻應(yīng)用程序使用。
采用類/微驅(qū)動模型編寫DM642芯片視頻端口的視頻采集驅(qū)動程序,驅(qū)動必須滿足如下幾個基本功能:
· 硬件中斷;
· 可同時處理DM642的三個視頻端口;
· 支持應(yīng)用程序配置視頻采集的參數(shù),支持獲取圖像數(shù)據(jù);
· 支持場圖像的采集,支持對CVBS和S-VIDEO兩種模擬信號的采集。
在視頻采集過程中,最重要的是對視頻數(shù)據(jù)進(jìn)行實(shí)時控制和有效的傳輸,因此需要使用硬件中斷,并在中斷服務(wù)程序中,根據(jù)視頻端口內(nèi)部FIFO的狀態(tài)通過EDMA完成視頻數(shù)據(jù)的讀入。
2.2 視頻采集驅(qū)動程序的框架構(gòu)建
視頻采集驅(qū)動程序包括類驅(qū)動和微驅(qū)動兩個模塊,視頻采集驅(qū)動程序的結(jié)構(gòu)框架如圖3所示。
在圖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ū)動的標(biāo)準(zhǔn)API函數(shù),這些標(biāo)準(zhǔn)API函數(shù)的描述如表2所示。這些規(guī)定的函數(shù)將放入微驅(qū)動的函數(shù)接口表(IOM_Fxns)中,以供應(yīng)用程序通過GIO類驅(qū)動調(diào)用。
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;
評論