<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/150128.htm

            包括類(lèi)驅(qū)動(dòng)和微驅(qū)動(dòng)兩個(gè)模塊,的結(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ù)傳輸通常有以下幾種方法:軟件查詢、中斷和EDMA方法。軟件查詢消耗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提供“滿”、“半滿”、“空”三種狀態(tài),另一方法使用兩個(gè)EDMA通道進(jìn)行數(shù)據(jù)傳輸。以亮度信號(hào)的傳輸為例,當(dāng)用于存儲(chǔ)亮度分量的內(nèi)部FIFO半滿(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的有效傳輸。



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();