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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM的緊湊型圖像采集系統(tǒng)

          基于ARM的緊湊型圖像采集系統(tǒng)

          作者: 時(shí)間:2008-02-11 來(lái)源: 收藏

            0V7620是一種CMOS圖像傳感器,它被廣泛應(yīng)用在網(wǎng)絡(luò)攝像頭、攝像手機(jī)等產(chǎn)品中。由它組成的圖像采集系統(tǒng),比較常見(jiàn)的設(shè)計(jì)方法為OV7620搭配OV5ll+或CPLD/FPGA。OV511+或CPLD/FPGA采集的圖像數(shù)據(jù)通過(guò)USB總線或雙端口RAM輸出到PC或MCU(ARM、DSP等),由PC或MCU對(duì)圖像數(shù)據(jù)進(jìn)行進(jìn)一步的處理。本文所設(shè)計(jì)的圖像采集系統(tǒng)僅用一個(gè)ARM芯片就實(shí)現(xiàn)了OV7620的功能控制、時(shí)序同步、數(shù)據(jù)采集與處理等功能,系統(tǒng)結(jié)構(gòu)緊湊、實(shí)用。

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

            1 硬件結(jié)構(gòu)

            OV7620是CMOS彩色/黑白圖像傳感器。它支持連續(xù)和隔行兩種掃描方式,VGA與QVGA兩種圖像格式;最高像素為664492,幀速率為30fp8;數(shù)據(jù)格式包括YUV、YCrCb、RGB三種,能夠滿足一般圖像采集系統(tǒng)的要求。

            OV7620內(nèi)部可編程功能寄存器的設(shè)置有上電模式和SCCB編程模式。本系統(tǒng)采用SCCB編程模式,連續(xù)掃描,16位RGB數(shù)據(jù)輸出。系統(tǒng)硬件結(jié)構(gòu)框圖如圖1所示。

            

           

            ARM芯片選用具有ARM7TDMI內(nèi)核的LPC2210,通過(guò)LPC2210的GPIO模擬SCCB總線協(xié)議,控制O

            V7620的功能寄存器。使用LPC2210的3個(gè)中斷引腳引入OV7620的圖像輸出同步信號(hào)VSYNC、HSYNC、PCLK,以中斷方式同步圖像數(shù)據(jù)輸出。OV7620的YUV通道輸出的16位并行數(shù)據(jù)通過(guò)LPC2210的高16位數(shù)據(jù)線接入。SST39VF160和IS61LV25616AL為擴(kuò)展的Flash和SRAM,分別用作程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。

            2 具體實(shí)現(xiàn)

            2.1 OV7620的功能控制

            OV7620的控制采用SCCB(SeriaI Camera ControlBus)協(xié)議。SCCB是簡(jiǎn)化的I2C協(xié)議,SIO-l是串行時(shí)鐘輸入線,SIO-O是串行雙向數(shù)據(jù)線,分別相當(dāng)于I2C協(xié)議的SCL和SDA。SCCB的總線時(shí)序與I2C基本相同,它的響應(yīng)信號(hào)ACK被稱為一個(gè)傳輸單元的第9位,分為Don’t care和NA。Don’t care位由從機(jī)產(chǎn)生;NA位由主機(jī)產(chǎn)生,由于SCCB不支持多字節(jié)的讀寫(xiě),NA位必須為高電平。另外,SCCB沒(méi)有重復(fù)起始的概念,因此在SCCB的讀周期中,當(dāng)主機(jī)發(fā)送完片內(nèi)寄存器地址后,必須發(fā)送總線停止條件。不然在發(fā)送讀命令時(shí),從機(jī)將不能產(chǎn)生Don’t care響應(yīng)信號(hào)。

            由于I2C和SCCB的一些細(xì)微差別,所以采用GPIO模擬SCCB總線的方式。SCL所連接的引腳始終設(shè)為輸出方式,而SDA所連接的引腳在數(shù)據(jù)傳輸過(guò)程中,通過(guò)設(shè)置IODIR的值,動(dòng)態(tài)改變引腳的輸入/輸出方式。SCCB的寫(xiě)周期直接使用I2C總線協(xié)議的寫(xiě)周期時(shí)序;而SC-CB的讀周期,則增加一個(gè)總線停止條件。

            OV7620功能寄存器的地址為0x00~0x7C(其中,不少是保留寄存器)。通過(guò)設(shè)置相應(yīng)的寄存器,可以使OV7620工作于不同的模式。例如,設(shè)置OV7620為連續(xù)掃描、RGB原始數(shù)據(jù)16位輸出方式,需要進(jìn)行如下設(shè)置:

            I2CSendByte()為寫(xiě)寄存器函數(shù),它的第1個(gè)參數(shù)OV7620為宏定義的芯片地址0x42,第2個(gè)參數(shù)為片內(nèi)寄存器地址,第3個(gè)參數(shù)為相應(yīng)的寄存器設(shè)定值。

            2.2 OV7620時(shí)鐘同步

            OV7620有4個(gè)同步信號(hào):VSYNC(垂直同步信號(hào))、FODD(奇數(shù)場(chǎng)同步信號(hào))、HSYNC(水平同步信號(hào))和PCLK(像素同步信號(hào))。當(dāng)采用連續(xù)掃描方式時(shí),只使用VSYNC和HSYNC、PCLK三個(gè)同步信號(hào),如圖l所示。時(shí)為檢測(cè)OV7620掃描窗口的有效大小,還引入了HREF水平參考信號(hào)。

            LPC2210的3個(gè)外部中斷引腳分別作為3個(gè)同步信號(hào)的輸入,相應(yīng)的中斷服務(wù)程序分別為Vsync_IRQ()、Hsync_IRQ()和Pclk_IRQ()。在內(nèi)存中定義一個(gè)二維數(shù)組存儲(chǔ)圖像數(shù)據(jù),一維用變量y表示,用于水平同步信號(hào)計(jì)數(shù);二維用變量x表示,用于像素同步信號(hào)計(jì)數(shù)。圖像采集的基本流程為:當(dāng)用SCCB初始化好OV7620后,使能VSYNC對(duì)應(yīng)的中斷,在Vsync_IRQ()中斷服務(wù)程序中判斷是否已取得一幀數(shù)據(jù)。若是,則在主程序的循環(huán)體中進(jìn)行數(shù)據(jù)處理;若不是,則使能HSYNC對(duì)應(yīng)的中斷,并將y置為O。在Hsync_IRQ()中斷服務(wù)程序中,判斷HREF的有效電平,若有效,則y加1,x置為O,并使能PCLK對(duì)應(yīng)的中斷。在Pclk_IRQ()中斷服務(wù)程序中,判斷HREF的有效電平,若有效,則z增加,同時(shí)采集一個(gè)像素點(diǎn)的圖像數(shù)據(jù)。

            2.3 圖像數(shù)據(jù)的輸出速度匹配

            在OV7620的3個(gè)同步信號(hào)中,PCLK的周期最短。當(dāng)OV7620使用27 MHz的系統(tǒng)時(shí)鐘時(shí),默認(rèn)的PCLK的周期為74 ns。而LPC2210的中斷響應(yīng)時(shí)間遠(yuǎn)遠(yuǎn)大于這個(gè)值。LPC2210的最大中斷延遲時(shí)問(wèn)為27個(gè)處理器指令周期,最小延遲時(shí)問(wèn)為4個(gè)指令周期,再加上中斷服務(wù)時(shí)間、現(xiàn)場(chǎng)恢復(fù)時(shí)間等,完成一次中斷響應(yīng)的時(shí)問(wèn)要大于7~30個(gè)指令周期。當(dāng)LPC2210使用最高系統(tǒng)頻率60 MHz時(shí),它的中斷響應(yīng)時(shí)間遠(yuǎn)大于O.2~0,6 μs,所以只能將OV7620的PCLK降頻。通過(guò)設(shè)置時(shí)鐘頻率控制寄存器,可將PCLK的周期設(shè)為4μs左右。

            2.4 圖像數(shù)據(jù)的接入

            當(dāng)OV7620工作于主設(shè)備方式時(shí),它的YUV通道將連續(xù)不斷地向總線上輸出數(shù)據(jù)。如果將OV7620的YUV通道直接接在LPC2210的DO~D15數(shù)據(jù)總線上,則會(huì)干擾數(shù)據(jù)總線,使LPC2210不能正常運(yùn)行;如果使用74HC244等隔離,分時(shí)使用數(shù)據(jù)總線的方法,則會(huì)大大降低系統(tǒng)的運(yùn)行速度,使得LPC2210不能及時(shí)取走總線上的數(shù)據(jù),造成圖像數(shù)據(jù)不完整。由于LPC2210的數(shù)據(jù)總線寬度為32位,而Flash和SRAM僅占用了低16位數(shù)據(jù)線D0~D15,困此可以采用圖l中的方法,將空閑的高16位數(shù)據(jù)線D16~D31設(shè)為GPIO,用于采集OV7620輸出的16位圖像數(shù)據(jù)。

            2.5 圖像數(shù)據(jù)的恢復(fù)

            OV7620采用16位輸出方式時(shí),Y通道和UV通道的數(shù)據(jù)輸出格式如表l所列。從表l中可以看出,每一行Y通道和UV通道交替輸出上一行的重復(fù)數(shù)據(jù)和本行的新數(shù)據(jù)。而在一行之內(nèi),B數(shù)據(jù)只在奇數(shù)列出現(xiàn),R數(shù)據(jù)只在偶數(shù)列出現(xiàn)。

            

           

            下面以一個(gè)55的像素點(diǎn)陣為例,詳細(xì)介紹圖像數(shù)據(jù)的恢復(fù)。

            首先定義一個(gè)515的字節(jié)型數(shù)組,在Pclk_IRQ()中斷服務(wù)程序中讀取55個(gè)像素點(diǎn)的圖像數(shù)據(jù);然后對(duì)圖像數(shù)據(jù)進(jìn)行插值,奇數(shù)點(diǎn)則在數(shù)組的連續(xù)3個(gè)字節(jié)中存入B、G、0,偶數(shù)點(diǎn)則存入O、G、R;最后對(duì)當(dāng)前行的每一個(gè)字節(jié)與下一行對(duì)應(yīng)列的每一個(gè)字節(jié)求平均值,即可算出當(dāng)前行的RGB值。而在每一行內(nèi),奇數(shù)點(diǎn)的R數(shù)據(jù)和偶數(shù)點(diǎn)的B數(shù)據(jù)可通過(guò)分別對(duì)其兩側(cè)的2個(gè)點(diǎn)的R和B數(shù)據(jù)求平均值得到。

            這樣,一幅圖像就恢復(fù)好了??梢灾苯哟娉啥M(jìn)制文件(本系統(tǒng)采用串口輸出到PC進(jìn)行顯示),或者增加BMP位圖文件頭信息,存成biBitCouNt=24的DIB位圖文件;也可用LPC2210對(duì)此圖像數(shù)據(jù)進(jìn)行進(jìn)一步的處理,如指紋識(shí)別等。

            3 結(jié)論

            本系統(tǒng)的圖像采集速度主要受限于LPC2210的中斷響應(yīng)時(shí)間,如果采用帶有DMA控制器,并且具有更高處理速度的ARM芯片,可大大提高整個(gè)圖像采集系統(tǒng)的速度。例如,采用具有ARM9內(nèi)核的S3C2410,其最高系統(tǒng)頻率達(dá)203 MHz,完成一次DMA傳送的時(shí)間約為30 ns。小于默認(rèn)的PCLK的周期74 ns,可以實(shí)現(xiàn)30 fps的圖像采集速度。

            與搭配OV511+或CPLD/FPGA的圖像采集系統(tǒng)相比,此圖像采集系統(tǒng)極大地簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),降低了系統(tǒng)設(shè)計(jì)成本,縮短了開(kāi)發(fā)周期;圖像數(shù)據(jù)的采集與處理均由ARM芯片完成,因而降低了數(shù)據(jù)中轉(zhuǎn)過(guò)程中傳輸錯(cuò)誤的幾率,提高了系統(tǒng)的可靠性。



          關(guān)鍵詞: ARM 圖像采集

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();