掃描二維碼
隨時(shí)隨地手機(jī)看文章
在類(lèi)/微驅(qū)動(dòng)模型中,類(lèi)驅(qū)動(dòng)通常用于完成多線(xiàn)程I/O請(qǐng)求的序列化功能和同步功能,同時(shí)對(duì)設(shè)備實(shí)例進(jìn)行管理。類(lèi)驅(qū)動(dòng)通過(guò)每個(gè)外部設(shè)備獨(dú)有的微驅(qū)動(dòng)對(duì)設(shè)備進(jìn)行操作。微驅(qū)動(dòng)采用芯片支持庫(kù)[2]控制外設(shè)的寄存器、內(nèi)存和中斷資源。微驅(qū)動(dòng)程序必須將特定的外部設(shè)備有效地表示給類(lèi)驅(qū)動(dòng)。
類(lèi)驅(qū)動(dòng)使用DSP/BIOS中的API函數(shù)[3]實(shí)現(xiàn)諸如同步等的系統(tǒng)服務(wù),DSP/BIOS定義了三種類(lèi)驅(qū)動(dòng)模塊:管道管理模塊(PIP)、流輸入輸出管理模塊(SIO)和通用輸入輸出模塊(GIO)。在PIP和SIO類(lèi)驅(qū)動(dòng)中,調(diào)用的API函數(shù)已經(jīng)存在于DSP/BIOS的PIP和SIO模塊中了,這些API函數(shù)需將參數(shù)傳給相應(yīng)的適配模塊,才能與微驅(qū)動(dòng)交換數(shù)據(jù)。而在GIO類(lèi)驅(qū)動(dòng)中,調(diào)用的API函數(shù)則直接與微驅(qū)動(dòng)通信。
2 基于DM642的視頻采集驅(qū)動(dòng)
2.1 硬件結(jié)構(gòu)
筆者利用TI公司的多媒體處理芯片DM642自行研制了嵌入式視頻處理板卡??ㄉ系闹饕M成模塊有視頻采集模塊、視頻處理模塊以及網(wǎng)絡(luò)發(fā)送模塊,其中視頻采集模塊主要由DSP芯片DM642[4]、視頻A/D 轉(zhuǎn)換芯片SAA7115和同步動(dòng)態(tài)存儲(chǔ)器芯片SDRAM等組成,如圖2所示。來(lái)自攝像頭的視頻信號(hào)通過(guò)SAA7115進(jìn)行數(shù)字化處理,輸出的數(shù)字視頻信號(hào)經(jīng)過(guò)視頻端口的內(nèi)部FIFO緩沖后,由DM642通過(guò)EDMA將數(shù)據(jù)傳送到片外SDRAM中,以便供視頻應(yīng)用程序使用。
主芯片DM642的處理能力達(dá)到4800MIPS,它的最大特點(diǎn)是芯片內(nèi)部集成了三個(gè)可配置的視頻端口[5],這些視頻端口提供了與通用視頻A/D轉(zhuǎn)換芯片的無(wú)縫接口,因而無(wú)需外加CPLD(復(fù)雜可編程邏輯器件)和FIFO就可以滿(mǎn)足系統(tǒng)設(shè)計(jì)的要求。SAA7115支持六路CVBS(復(fù)合模擬視頻輸入)或三路S-VIDEO (S端子信號(hào))輸入,支持多種格式的數(shù)字RGB和YUV視頻信號(hào)輸出。DM642通過(guò)IIC總線(xiàn)控制SAA7115的內(nèi)部寄存器。
采用類(lèi)/微驅(qū)動(dòng)模型編寫(xiě)DM642芯片視頻端口的視頻采集驅(qū)動(dòng)程序,驅(qū)動(dòng)必須滿(mǎn)足如下幾個(gè)基本功能:
· 硬件中斷;
· 可同時(shí)處理DM642的三個(gè)視頻端口;
· 支持應(yīng)用程序配置視頻采集的參數(shù),支持獲取圖像數(shù)據(jù);
· 支持場(chǎng)圖像的采集,支持對(duì)CVBS和S-VIDEO兩種模擬信號(hào)的采集。
在視頻采集過(guò)程中,最重要的是對(duì)視頻數(shù)據(jù)進(jìn)行實(shí)時(shí)控制和有效的傳輸,因此需要使用硬件中斷,并在中斷服務(wù)程序中,根據(jù)視頻端口內(nèi)部FIFO的狀態(tài)通過(guò)EDMA完成視頻數(shù)據(jù)的讀入。
2.2 視頻采集驅(qū)動(dòng)程序的框架構(gòu)建
視頻采集驅(qū)動(dòng)程序包括類(lèi)驅(qū)動(dòng)和微驅(qū)動(dòng)兩個(gè)模塊,視頻采集驅(qū)動(dòng)程序的結(jié)構(gòu)框架如圖3所示。
類(lèi)驅(qū)動(dòng)使用GIO模塊,GIO模塊的傳輸模式是基于流輸入輸出模塊的同步I/O模式的,更適合文件系統(tǒng)I/O,如視頻采集的應(yīng)用。該模塊的主要API函數(shù)的描述如表1所示。
在圖3中,應(yīng)用程序使用GIO_create函數(shù)創(chuàng)建GIO通道,并通過(guò)調(diào)用GIO_submit函數(shù)直接與微驅(qū)動(dòng)的IOM交換數(shù)據(jù),完成視頻數(shù)據(jù)的采集。
應(yīng)用程序通過(guò)GIO類(lèi)驅(qū)動(dòng)調(diào)用微驅(qū)動(dòng)的標(biāo)準(zhǔn)API函數(shù),這些標(biāo)準(zhǔn)API函數(shù)的描述如表2所示。這些規(guī)定的函數(shù)將放入微驅(qū)動(dòng)的函數(shù)接口表(IOM_Fxns)中,以供應(yīng)用程序通過(guò)GIO類(lèi)驅(qū)動(dòng)調(diào)用。
在圖3中,微驅(qū)動(dòng)的IOM接口將應(yīng)用程序獲取圖像的命令打包生成數(shù)據(jù)包,并向微驅(qū)動(dòng)發(fā)送。數(shù)據(jù)包的格式如下: typedef struct IOM_Packet {
QUE_Elem link; /* 數(shù)據(jù)包隊(duì)列 */
Ptr addr; /* 數(shù)據(jù)地址 */
Uns size; /* 數(shù)據(jù)長(zhǎng)度 */
Arg misc; /* 保留使用 */
Arg arg; /* 應(yīng)用程序 */
Uns cmd; /* 命令字段 */
Int status; /* 命令完成狀態(tài) */
} IOM_Packet;
數(shù)據(jù)包中數(shù)據(jù)長(zhǎng)度與數(shù)據(jù)地址兩字段由應(yīng)用程序提供,分別表示獲取圖像的大小及圖像存儲(chǔ)目的地址。微驅(qū)動(dòng)依據(jù)數(shù)據(jù)包中的命令字段,調(diào)用mdSubmitChan函數(shù)將數(shù)據(jù)包放入數(shù)據(jù)包隊(duì)列,等待中斷服務(wù)函數(shù)的處理。視頻采集中的硬件中斷由視頻端口內(nèi)部FIFO的狀態(tài)觸發(fā),中斷服務(wù)程序根據(jù)數(shù)據(jù)包中的數(shù)據(jù)地址字段,通過(guò)EDMA將視頻端口內(nèi)部FIFO中的視頻數(shù)據(jù)讀入SDRAM中的圖像存儲(chǔ)目的地址。依據(jù)數(shù)據(jù)包中的數(shù)據(jù)長(zhǎng)度字段,在完成相應(yīng)大小圖像的采集后,中斷服務(wù)程序還將完成以下功能:出列數(shù)據(jù)包;設(shè)置下一次傳送或服務(wù)請(qǐng)求;設(shè)置數(shù)據(jù)包中的命令完成狀態(tài),并向應(yīng)用程序返回。
3 視頻采集驅(qū)動(dòng)中的視頻數(shù)據(jù)傳輸
視頻端口內(nèi)部FIFO與SDRAM之間的視頻數(shù)據(jù)傳輸通常有以下幾種方法:軟件查詢(xún)、中斷和EDMA方法。軟件查詢(xún)消耗CPU的資源太大,是不可取的,中斷數(shù)據(jù)傳輸雖可節(jié)省很多CPU時(shí)間,但沒(méi)有發(fā)揮DM642的EDMA資源。EDMA[6]是在DMA基礎(chǔ)上發(fā)展起來(lái)的,用于在沒(méi)有CPU參與的情況下完成不同存儲(chǔ)空間之間的數(shù)據(jù)搬移。DM642提供了64個(gè)獨(dú)立的EDMA通道,通道的優(yōu)先級(jí)可編程設(shè)置,在沒(méi)有CPU參與的情況下實(shí)現(xiàn)片內(nèi)存儲(chǔ)器、片內(nèi)外設(shè)以及外部存儲(chǔ)空間之間的數(shù)據(jù)高速搬移。因此,為減輕CPU的負(fù)擔(dān),發(fā)揮DM642的強(qiáng)大的外部數(shù)據(jù)傳輸能力,視頻采集驅(qū)動(dòng)使用EDMA完成視頻數(shù)據(jù)從FIFO到SDRAM的傳輸。
3.1 基于雙EDMA通道的視頻數(shù)據(jù)傳輸
利用EDMA將FIFO中的數(shù)據(jù)傳輸?shù)絊DRAM中有兩種方法,但是它們的性能卻差別很大。一種方法是利用EDMA將FIFO中的數(shù)據(jù)直接傳送到SDRAM中。這種方法雖然簡(jiǎn)單且易于操作,但它沒(méi)有充分發(fā)揮SDRAM的頁(yè)讀寫(xiě)的優(yōu)越性,原因在于EDMA讀取FIFO和寫(xiě)入SDRAM時(shí)分為兩個(gè)不同過(guò)程來(lái)實(shí)現(xiàn),因此EMIF(外部存儲(chǔ)器接口)的時(shí)序不斷地在兩者之間切換,造成很大的時(shí)間浪費(fèi),所以這種傳輸效率不高。
由于DM642視頻端口的內(nèi)部FIFO提供“滿(mǎn)”、“半滿(mǎn)”、“空”三種狀態(tài),另一方法使用兩個(gè)EDMA通道進(jìn)行數(shù)據(jù)傳輸。以亮度信號(hào)的傳輸為例,當(dāng)用于存儲(chǔ)亮度分量的內(nèi)部FIFO半滿(mǎn)(640字節(jié))時(shí),觸發(fā)DM642的硬件中斷,在中斷服務(wù)程序中啟用一個(gè)EDMA通道將數(shù)據(jù)從FIFO中讀出,存放到緩沖區(qū)BUF中。傳輸完畢后,啟動(dòng)另一個(gè)EDMA通道將數(shù)據(jù)從BUF中傳輸?shù)絊DRAM中。這樣,兩個(gè)EDMA通道分別進(jìn)行讀取FIFO和寫(xiě)入SDRAM的操作,避免了EMIF時(shí)序的切換,可以保證EDMA的有效傳輸。
3.2 EDMA鏈表在場(chǎng)合成中的使用
在隔行掃描模式下,每幀分為兩場(chǎng),兩場(chǎng)在時(shí)域上是分開(kāi)的,但在數(shù)據(jù)處理時(shí)需要將兩場(chǎng)合成一幀進(jìn)行處理,因此要進(jìn)行大量的數(shù)據(jù)搬移,占用了大量的CPU時(shí)間。通過(guò)EDMA鏈表可自動(dòng)實(shí)現(xiàn)場(chǎng)合成,不需占用額外的CPU時(shí)間。
EDMA的參數(shù)RAM存放了有關(guān)的傳輸參數(shù),這些參數(shù)用于產(chǎn)生EDMA讀寫(xiě)操作所需要的地址。如圖4所示,在使用EDMA通道傳輸奇數(shù)場(chǎng)與偶數(shù)場(chǎng)時(shí),分別使用不同的EDMA參數(shù)RAM。兩組參數(shù)RAM的目的地址分別指向存儲(chǔ)圖像的第一行與第二行象素的首地址,并且兩組參數(shù)RAM通過(guò)鏈接地址循環(huán)相連。在EDMA通道的傳輸中,奇數(shù)場(chǎng)傳輸任務(wù)的結(jié)束會(huì)自動(dòng)地根據(jù)當(dāng)前參數(shù)RAM的鏈接地址裝載傳輸偶數(shù)場(chǎng)的參數(shù)RAM,又由兩組參數(shù)RAM的目的地址可知,奇數(shù)場(chǎng)與偶數(shù)場(chǎng)分別經(jīng)EDMA通道傳輸至幀緩沖區(qū)后被隔行存儲(chǔ),這樣在無(wú)需占用額外CPU時(shí)間的前提下就實(shí)現(xiàn)了場(chǎng)合成。
4 視頻采集驅(qū)動(dòng)程序的調(diào)用實(shí)例
DSP/BIOS應(yīng)用程序通過(guò)GIO類(lèi)驅(qū)動(dòng)調(diào)用微驅(qū)動(dòng)之前,需使用DSP/BIOS配置工具注冊(cè)微驅(qū)動(dòng),將其命名為VP_CAPTURE,并啟動(dòng)GIO模塊。
在應(yīng)用程序中,GIO_create函數(shù)使用已注冊(cè)的微驅(qū)動(dòng)VP_CAPTURE創(chuàng)建GIO通道,通過(guò)調(diào)用GIO_submit函數(shù)完成應(yīng)用程序?qū)σ曨l數(shù)據(jù)的采集操作。部分源代碼如下:
(1) 創(chuàng)建通道
GIO_Handle capChan;
int status;
capChan = GIO_create('VP_CAPTURE'),
IOM_INPUT, &status, (Ptr)&DM642_vCapParams, NULL);
(2) 發(fā)送獲取圖像的數(shù)據(jù)包
GIO_submit(capChan, IOM_READ, bufp, NULL, NULL);其中,DM642_vCapParams包含了視頻采集的初始化參數(shù),如圖像大小、同步方式等;bufp用于指出采集圖像的存儲(chǔ)地址。不同的視頻應(yīng)用程序在使用類(lèi)驅(qū)動(dòng)時(shí),可以通過(guò)改變這兩個(gè)變量復(fù)用視頻設(shè)備。這樣,極大地提高了驅(qū)動(dòng)程序的工作效率,對(duì)視頻外設(shè)的控制也大大簡(jiǎn)化了。
使用類(lèi)/微驅(qū)動(dòng)模型開(kāi)發(fā)的視頻采集驅(qū)動(dòng)程序,有效地解決了圖像采集和圖像實(shí)時(shí)處理之間的關(guān)系,在幾乎不需要CPU的干涉下,利用EDMA完成了數(shù)字視頻圖像數(shù)據(jù)的高速傳輸;通過(guò)使用類(lèi)驅(qū)動(dòng)復(fù)用驅(qū)動(dòng)程序,視頻應(yīng)用程序的開(kāi)發(fā)效率獲得了極大的提高。視頻采集驅(qū)動(dòng)程序現(xiàn)已在自主開(kāi)發(fā)的視頻處理板卡上運(yùn)行良好,為進(jìn)一步開(kāi)發(fā)遠(yuǎn)程視頻監(jiān)控系統(tǒng)、可視電話(huà)等視頻應(yīng)用打下了堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn)
1 DSP/BIOS Driver Developer’s Guide. Literature Number: SPRU616. Texas Instruments Incorporated, November 2002
2 TMS320C6000 Chip Support Library API Reference Guide. Literature Number: SPRU401. Texas Instruments Incorporated,December 2002
3 TMS320C6000 DSP/BIOS Application Programming Interface. Literature Number: SPRU403. Texas Instruments Incorporated,October 2002
4 TMS320DM642 Technical Overview.Literature Number:SPRU615.Texas Instruments Incorporated, September 2002
5 TMS320C64x DSP Video Port/ VCXO Interpolated Control (VIC) Port Reference Guide. Literature Number: SPRU629. Texas Instruments Incorporated, April 2003
6 TMS320C6000 Peripherals Reference Guide. Literature Num-ber:SPRU190. Texas Instruments Incorporated, February 2001
SWM32S單片機(jī)有1個(gè)SDIO接口,支持多媒體卡(MMC)、SD 存儲(chǔ)卡、SDIO 卡等設(shè)備,可以使用軟件方法或者 DMA 方法(SDIO 模塊內(nèi)部 DMA,與芯片 DMA 模塊無(wú)關(guān))進(jìn)行數(shù)據(jù)傳輸。
關(guān)鍵字: SWM32S單片機(jī) SDIO DMA標(biāo)普500指數(shù)今年迄今為止下跌22.7%,但高盛(Goldman Sachs)策略師認(rèn)為估值依然太高。摩根士丹利旗下的Morgan Stanley Wealth Management稱(chēng),面對(duì)高通脹環(huán)境下的利率大幅上升,股...
關(guān)鍵字: DMA MANAGEMENT 高通 ST北京2022年5月27日 /美通社/ -- 在實(shí)現(xiàn)凈零目標(biāo)的征途上,目前各企業(yè)分別處于不同階段,其中一些已采取了可持續(xù)的舉措,而另一些則剛剛起步。為了解英國(guó)企業(yè)實(shí)現(xiàn)凈零目標(biāo)所采取的舉措及取得的進(jìn)展,BSI 撰寫(xiě)了《202...
關(guān)鍵字: BSP 供應(yīng)鏈 可持續(xù)發(fā)展 DMA上海2022年5月18日 /美通社/ -- 伍爾特集團(tuán)處于全球裝配和緊固件業(yè)務(wù)市場(chǎng)的領(lǐng)導(dǎo)地位,在2021財(cái)年取得了12.7億歐元的經(jīng)營(yíng)業(yè)績(jī),創(chuàng)造了新的記錄(2020年:7.75億歐元)。同時(shí)銷(xiāo)售額為171億歐元,創(chuàng)下了公...
關(guān)鍵字: 數(shù)字化 DMA RS 電動(dòng)工具(全球TMT2022年1月28日訊)2022年1月,匯聚多位商學(xué)院講師、多家頂尖數(shù)字營(yíng)銷(xiāo)公司、百余家品牌公司、多位嘉賓的第五屆DMAA國(guó)際數(shù)字營(yíng)銷(xiāo)峰會(huì)如期而至。DMMA國(guó)際數(shù)字營(yíng)銷(xiāo)大獎(jiǎng),旨在考量品牌傳播案例對(duì)數(shù)字媒體和...
關(guān)鍵字: DMA摘 要:從硬件與軟件方面介紹了基于PXI技術(shù)的1553B總線(xiàn)通訊模塊的設(shè)計(jì),并對(duì)PXI總線(xiàn)接口設(shè)計(jì)、驅(qū)動(dòng)程序的開(kāi)發(fā)、 SDRAM存儲(chǔ)器的控制和1553B總線(xiàn)通信協(xié)議實(shí)現(xiàn)等關(guān)鍵技術(shù)進(jìn)行了詳細(xì)的闡述,為航空領(lǐng)域測(cè)控系統(tǒng)開(kāi)發(fā)P...
關(guān)鍵字: PXI技術(shù) 驅(qū)動(dòng)程序 SDRAM存儲(chǔ)器 1553B總線(xiàn)