基于FPGA和USB 2.0的數(shù)字圖像采集系統(tǒng)設(shè)計(jì)
程序中使用順序的方式,將要發(fā)送的數(shù)據(jù)逐位發(fā)送的方式來(lái)進(jìn)行設(shè)置,其狀態(tài)機(jī)如圖4所示。本文引用地址:http://m.butianyuan.cn/article/161153.htm
將要初始化的寄存器地址以及所要設(shè)置的值直接存放于parameter定義的參數(shù)中;在上電時(shí),通過(guò)I2C程序?qū)⑦@些寫(xiě)到OV7620當(dāng)中,實(shí)現(xiàn)圖像傳感器的初始化工作。
3 CY7C68013A芯片SLAVE FIFO模式固件編寫(xiě)
由于系統(tǒng)用于圖像的采集,具有數(shù)據(jù)量大,實(shí)時(shí)性要求高的特點(diǎn),因此采用USB 2.0接口,以便能滿(mǎn)足實(shí)時(shí),高速的數(shù)據(jù)傳輸。為了達(dá)到最快的傳輸速率,使用SLAVE FIFO模式,在該模式下,USB芯片的數(shù)據(jù)傳輸不需要8051的參與,便于大量連續(xù)的數(shù)據(jù)傳輸,在這種模式下需要有一個(gè)外部的控制時(shí)序,而FPGA恰能提供相關(guān)的時(shí)序,同時(shí)為了能夠與圖像數(shù)據(jù)同步,采用外部輸入時(shí)鐘,同步傳輸方式,采用8位數(shù)據(jù)傳輸。在該應(yīng)用中,寄存器EP2CFG配置了端點(diǎn)2作為IN端點(diǎn)傳輸FPGA來(lái)的數(shù)據(jù)至上位機(jī),寄存器EP2FIFOCFG使能自動(dòng)傳輸;寄存器EP6CFG配置端點(diǎn)6為OUT端點(diǎn),寄存器EP6FIFOCFG使能自動(dòng)傳輸;并在寄存器FIFOPINPOLAR中設(shè)置了端點(diǎn)的滿(mǎn)標(biāo)志為高電平有效,這是由于在剛上電下載完FPGA程序后,F(xiàn)PGA即對(duì)圖像進(jìn)行采集并存儲(chǔ)至SRAM當(dāng)中,而上電時(shí)FPGA的引腳默認(rèn)為高電平,如果沒(méi)有設(shè)置高電平為EP2的滿(mǎn)有效,則在下載USB固件之前FPGA會(huì)誤認(rèn)為是USB的端點(diǎn)一直處于非滿(mǎn)狀態(tài)而一直傳送數(shù)據(jù),這樣,在下載完USB固件后,主機(jī)端所得到的圖像就不能保證它是從一幀圖像的第一個(gè)數(shù)據(jù)開(kāi)始傳輸而是與下一幀的圖像有一定的錯(cuò)位。在設(shè)置EZ-USB FX2LP為SLAVE FIFO模式的過(guò)程大致是:配置IFCONFIG[1:0]=11,先把SLAVE FIFO模式;復(fù)位相應(yīng)端點(diǎn),即使用FIFOREST寄存器;配置所要用的端點(diǎn)大小,類(lèi)型,以及傳輸方向,使用EPxCFG,式中x代表2,4,6,8;設(shè)置各端點(diǎn)的空標(biāo)志,滿(mǎn)標(biāo)志和可編程標(biāo)志值,使用PINFLAGAB和PINFLAGCD寄存器;配置是否使能自動(dòng)傳輸以及傳輸?shù)奈粚?,使用EPxFIFOCFG,式中x代表2,4,6,8;本應(yīng)用中的USB固件程序的部分代碼如下:
4 FPGA對(duì)圖像數(shù)據(jù)的采集、存儲(chǔ)及對(duì)USB的傳輸控制
4.1 FPGA對(duì)圖像的采集控制
FPGA對(duì)圖像的采集控制是通過(guò)OV7620的VSYNC,HREF,PCLK三個(gè)源同步時(shí)序信號(hào)來(lái)對(duì)圖像進(jìn)行采集。首先是在1個(gè)狀態(tài)機(jī)中檢測(cè)VSYNC信號(hào),當(dāng)VSYNC的高電平來(lái)臨時(shí),初始化所有的內(nèi)部寄存器,包括SRAM的地址寄存器,SRAM的寫(xiě)控制信號(hào),數(shù)據(jù)總線(xiàn)讀寫(xiě)方向的選擇信號(hào),USB的寫(xiě)使能信號(hào),內(nèi)部計(jì)數(shù)寄存器等;等VSYNC來(lái)臨之后,表示新的一幀開(kāi)始了,接下來(lái)等待圖像的行信號(hào)使能來(lái)臨,當(dāng)HREF到來(lái)之后,就可以將圖像的數(shù)據(jù)寫(xiě)進(jìn)SRAM當(dāng)中了,這個(gè)寫(xiě)過(guò)程需要兩個(gè)CLK,在第一個(gè)時(shí)鐘周期中更改SRAM的寫(xiě)地址,第2個(gè)CLK周期將連接在數(shù)據(jù)總線(xiàn)上的圖像數(shù)據(jù)寫(xiě)進(jìn)SRAM中,同時(shí)對(duì)內(nèi)部的圖像計(jì)數(shù)器進(jìn)行計(jì)數(shù),這個(gè)過(guò)程中要在HREF為高電平的時(shí)候進(jìn)行存儲(chǔ);當(dāng)計(jì)數(shù)達(dá)到一幀,也就是153 600 B的時(shí)候結(jié)束采集的過(guò)程,并更改相應(yīng)的控制信號(hào),準(zhǔn)備USB的操作信號(hào),進(jìn)行FPGA對(duì)USB芯片的控制,將SRAM當(dāng)中的一幅完整的圖像能過(guò)USB傳至USB當(dāng)中,整個(gè)采集與傳送的狀態(tài)流程如圖5所示。
4.2 FPGA對(duì)USB芯片的控制
在FPGA完成了一幅圖像的采集并將圖像的數(shù)據(jù)存儲(chǔ)在片外的SRAM當(dāng)中以后,接下來(lái)要做的事情就是將所存儲(chǔ)的圖像傳給USB芯片,這個(gè)過(guò)程當(dāng)中,F(xiàn)PGA要控制SRAM的寫(xiě)信號(hào),同時(shí)使能數(shù)據(jù)總線(xiàn)的方向?yàn)檩敵龇较?。FPGA對(duì)USB的寫(xiě)首先是花費(fèi)一個(gè)CLK的時(shí)間從SRAM當(dāng)中取出一個(gè)數(shù)據(jù),之后在第2個(gè)CLK時(shí)間內(nèi)判斷它的端點(diǎn)滿(mǎn)標(biāo)志,如果USB端點(diǎn)已經(jīng)滿(mǎn)了,則等待,如果非滿(mǎn),則拉低寫(xiě)信號(hào)使能信號(hào)同時(shí)地址計(jì)數(shù)器加1,返回上一個(gè)取數(shù)據(jù)的狀態(tài)繼續(xù)取下一個(gè)數(shù)據(jù),直到傳完一幅圖片,之后返回初始的狀態(tài)重新等新的一幀開(kāi)始信號(hào)的到來(lái)。
評(píng)論