色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OV7620 cmos攝像頭的使用

姚小熊27 ? 來源:網(wǎng)絡(luò)整理 ? 2018-03-01 15:52 ? 次閱讀

OV7620簡(jiǎn)介

ov7620是一款CMOS攝像頭器件,是彩色CMOS型圖像采集集成芯片,提供高性能的單一小體積封裝,該器件分辨率可以達(dá)到640X480,傳輸速率可以達(dá)到30幀。

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

OV7620基本參數(shù)

大小:33x27x24(mm)

電源DC+5V±5%

掃描方式:逐行/隔行掃描

最低照度:2.5luxatf1.4(3000k)

信噪比:》48dB

最大像素:(H)664x(V)492;缺省有效像素:(H)640x(V)480

數(shù)據(jù)輸出格式:

YCrCb16bit/8bitselectable

60Hz16BitYCrCb4:2:2-640x480

60Hz8BitYCrCb4:2:2-640x480

RGBRawDataDigitalOutput16Bit/8Bitselectable

CCIR601,CCIR656,ZV端口:支持8/16位視頻數(shù)據(jù)

SCCB接口:最大速率支持400kBit/s

YCrCB或YUV輸出格式:支持TV或監(jiān)視器顯示

攝像頭工作原理

按一定的分辨率,以隔行掃描的方式采集圖像上的點(diǎn),當(dāng)掃描到某點(diǎn)時(shí),就通過圖像傳感芯片將該點(diǎn)處圖像的灰度轉(zhuǎn)換成與灰度一一對(duì)應(yīng)的電壓值,然后將此電壓值通過視頻信號(hào)端輸出。具體而言(參見圖5-1),攝像頭連續(xù)地掃描圖像上的一行,則輸出就是一段連續(xù)的電壓信號(hào),電壓信號(hào)的高低起伏反映了該行圖像的灰度變化。當(dāng)掃描完一行,視頻信號(hào)端就輸出一個(gè)低于最低視頻信號(hào)電壓的電平(如0.3V),并保持一段時(shí)間。這相當(dāng)于,緊接著每行圖像信號(hào)之后會(huì)有一個(gè)電壓“凹槽”,此“凹槽”叫做行同步脈沖,它是掃描換行的標(biāo)志。然后,跳過一行后(因?yàn)閿z像頭是隔行掃描的),開始掃描新的一行,如此下去,直到掃描完該場(chǎng)的視頻信號(hào),接著會(huì)出現(xiàn)一段場(chǎng)消隱區(qū)。該區(qū)中有若干個(gè)復(fù)合消隱脈沖,其中有個(gè)遠(yuǎn)寬于(即持續(xù)時(shí)間遠(yuǎn)長(zhǎng)于)其它的消隱脈沖,稱為場(chǎng)同步脈沖,它是掃描換場(chǎng)的標(biāo)志。場(chǎng)同步脈沖標(biāo)志著新的一場(chǎng)的到來,不過,場(chǎng)消隱區(qū)恰好跨在上一場(chǎng)的結(jié)尾和下一場(chǎng)的開始部分,得等場(chǎng)消隱區(qū)過去,下一場(chǎng)的視頻信號(hào)才真正到來。攝像頭每秒掃描25幅圖像,每幅又分奇、偶兩場(chǎng),先奇場(chǎng)后偶場(chǎng),故每秒掃描50場(chǎng)圖像。奇場(chǎng)時(shí)只掃描圖像中的奇數(shù)行,偶場(chǎng)時(shí)則只掃描偶數(shù)行。

OV7620 cmos攝像頭的使用

攝像頭有兩個(gè)重要的指標(biāo):分辨率和有效像素。分辨率實(shí)際上就是每場(chǎng)行同步脈沖數(shù),這是因?yàn)樾型矫}沖數(shù)越多,則對(duì)每場(chǎng)圖像掃描的行數(shù)也越多。事實(shí)上,分辨率反映的是攝像頭的縱向分辨能力。有效像素常寫成兩數(shù)相乘的形式,如“320x240”,其中前一個(gè)數(shù)值表示單行視頻信號(hào)的精細(xì)程度,即行分辨能力;后一個(gè)數(shù)值為分辨率,因而有效像素=行分辨能力×分辨率。

OV7620功能寄存器的地址為0x00~0x7C(其中,不少是保留寄存器)。通過設(shè)置相應(yīng)的寄存器,可以使OV7620工作于不同的模式。例如,設(shè)置OV7620為連續(xù)掃描、RGB原始數(shù)據(jù)16位輸出方式,需要進(jìn)行如下設(shè)置:I2CSendByte()為寫寄存器函數(shù),它的第1個(gè)參數(shù)OV7620為宏定義的芯片地址0x42,第2個(gè)參數(shù)為片內(nèi)寄存器地址,第3個(gè)參數(shù)為相應(yīng)的寄存器設(shè)定值。

OV7620的控制采用SCCB(SeriaICameraControlBus)協(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’tcare和NA。Don’tcare位由從機(jī)產(chǎn)生;NA位由主機(jī)產(chǎn)生,由于SCCB不支持多字節(jié)的讀寫,NA位必須為高電平。另外,SCCB沒有重復(fù)起始的概念,因此在SCCB的讀周期中,當(dāng)主機(jī)發(fā)送完片內(nèi)寄存器地址后,必須發(fā)送總線停止條件。不然在發(fā)送讀命令時(shí),從機(jī)將不能產(chǎn)生Don’tcare響應(yīng)信號(hào)。

OV7620的使用

智能車攝像頭組的初期學(xué)習(xí)中,雖然有不少攝像頭優(yōu)于OV7620,但是相信大部分的車友第一個(gè)接觸的都是OV7620。下面從其特性和性能等角度,剖析攝像頭的特點(diǎn)。

攝像頭的輸出格式有RGB565,YUY422等格式,我所接觸的第一個(gè)攝像頭OV7620的輸出格式是YUV422。下面給大家介紹一下YUV422。

1、什么是YUV422

人的眼睛對(duì)低頻信號(hào)比對(duì)高頻信號(hào)具有更高的敏感度,事實(shí)上,人的眼睛對(duì)明視度的改變比對(duì)色彩的改變要敏感的多。因此,人們將RGB三色信號(hào)改為YUV來表示,其中Y為灰度,UV為色差。如果是表示一副彩色圖像,同樣的道理,YUV444是無損的存儲(chǔ)方式,但是需要3個(gè)字節(jié),存儲(chǔ)空間開銷很大。由于Y分量比UV分量重要的多,因此人們用YUV422來表示。這樣一來圖像被壓縮了很多,一個(gè)字節(jié)就可以表示其彩色的信息

對(duì)于OV7620,它有2組并行的數(shù)據(jù)口Y[7..0]和UV[7..0],其中對(duì)于數(shù)據(jù)口Y[7..0],輸出的是灰度值Y,對(duì)于UV[7..0]輸出的色度信號(hào)UV。下圖給出了k個(gè)像素(K個(gè)字節(jié))輸出的格式。

OV7620 cmos攝像頭的使用

OV762的控制采用SCCB(SerialCameraControlBus)協(xié)議。SCCB的簡(jiǎn)化的I2C協(xié)議,SIO-I是串行時(shí)鐘輸入線,SIO-O是串行雙向數(shù)據(jù)線,分別相當(dāng)于I2C協(xié)議的SCL和SDA。SCCB的總線時(shí)序與I2C基本相同,他的響應(yīng)信號(hào)ACK被陳偉一個(gè)傳輸單元的第9位,分別Donotcare和NA.Donotcare位由從機(jī)產(chǎn)生;NA位由主機(jī)產(chǎn)生,由于SCCB不支持多字節(jié)的讀寫,NA位必須為高電平。另外SCCB沒有重復(fù)起始的概念,因此在SCCB的讀周期中,當(dāng)主機(jī)發(fā)送讀命令時(shí),從機(jī)將不能產(chǎn)生Donotcare響應(yīng)信號(hào)。

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

2、OV7620的幾個(gè)優(yōu)點(diǎn)

第一,OV7620的電平兼容3.3V和5V。目前智能車用戶用到的處理器基本上可以分為XS128和K60和KL25三種控制器,而這三種控制器的工作電平分別是5V和3.3V和3.3V。OV7620可以完全適應(yīng)這兩種電平,XS128和K60和KL25可以隨性切換,無需做電平匹配。(要注意的是當(dāng)OV7620接5v和3.3v的時(shí)候,輸出的效果是不同的,建議在5v的電壓下使用,因?yàn)樵?.3v的電壓下使用比較難調(diào),輸出的16進(jìn)制數(shù)據(jù)清一色偏小。)

同樣的情況下:

OV7620 cmos攝像頭的使用

第二,OV7620的幀率是60幀/s。新手學(xué)習(xí)攝像頭的時(shí)候,誤以為攝像頭幀率越快越好,其實(shí)不然。就拿OV7620來說,其PCLK(像素中斷)的周期是73ns,該頻率下的PCLK很容易被K60的IO捕捉,如果幀率更快的攝像頭,其PCLK的周期就會(huì)更小,該頻率下PCLK不易被K60的IO捕捉到。(但是鷹眼攝像頭不然,火哥的鷹眼攝像頭理論上宣傳的是150幀每秒,但是他并不是通過PCLK的周期減小從而獲得效果的,鷹眼攝像頭的高明之處在于它在硬件二值化之后,每一次PCLK中斷對(duì)外輸出了8個(gè)像素,而不是1個(gè)像素。鷹眼攝像頭已經(jīng)買來了,以后有機(jī)會(huì)會(huì)試試效果。)

第三:OV7620的分辨率也是非常合適的,在第三篇也提到OV7620是隔行掃描,采集VSYN的話,其輸出分辨率是640*240。如果改為QVGA格式,默認(rèn)輸出分辨率是320*120,該分辨率下非常適合采集賽道,數(shù)據(jù)容量有限又不會(huì)失真圖像。(OV7620的分辨率可以通過SCCB修改,有興趣修改的可以去查看OV7620的寄存器配置,然后通過SCCB修改。)

只有掌握了OV7620的時(shí)序,才能靈活得使用OV7620。下面開始本篇的重點(diǎn):OV7620時(shí)序分析。

對(duì)于OV7620,我們只關(guān)心場(chǎng)中斷信號(hào)VSYN、行中斷信號(hào)HREF、像素中斷信號(hào)PCLK的波形。用示波器去監(jiān)控這三個(gè)波形,可以看到一下關(guān)系。

OV7620 cmos攝像頭的使用

VSYN的周期是16.64ms,高電平時(shí)間為換場(chǎng)時(shí)間,約80us;低電平時(shí)間內(nèi)像素輸出。我們?cè)诓杉疺SYN脈沖時(shí),既可以采集上升沿,也可以采集下降沿,采集下降沿更準(zhǔn)確些,這也是一場(chǎng)的開始。從VSYN的周期可以算出,1s/16.64ms=60幀,OV7620的幀率是60幀/s。

HREF的周期63.6us,高電平時(shí)間為像素輸出時(shí)間,約47us;低電平時(shí)間為換行時(shí)間,因此采集HREF一定要采集其上升沿,下降沿后的數(shù)據(jù)是無效的。從HREF的周期可以算出,16.64ms/63.6us≈261,除去期間的間隙時(shí)間,可以算出每場(chǎng)圖像有240行。

PCLK的周期是73ns,高電平輸出像素,低電平像素?zé)o效。PCLK是一直輸出的,因此一定要在觸發(fā)VSYN并且觸發(fā)HREF以后,再去捕捉PCLK才能捕捉到像素?cái)?shù)據(jù)。從PCLK的周期可以算出,47us/73ns≈640,可以算出每行圖像中有640個(gè)像素點(diǎn)。

程序如下

在這我分成兩部分著重介紹7620的時(shí)序程序和貼上SCCB的協(xié)議程序(其實(shí)原理和處理情況和I2C差不多):

First:

首先要對(duì)使用到的一些IO口進(jìn)行初始化處理,四個(gè)部分的初始化,

A.像素中斷PCLK

B.行中斷HREF

C.場(chǎng)中斷VSYNC

D.DMA

程序如下:

[objc] view plain copy//初始化OV7620模塊

void OV7620_Init()

{

//像素中斷 PCLK

GPIO_InitStruct1.GPIO_Pin = OV7620_PCLK_PIN;

GPIO_InitStruct1.GPIO_InitState = Bit_SET;

GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DMA_RISING;

GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD;

GPIO_InitStruct1.GPIOx = OV7620_PCLK_PORT;

GPIO_Init(&GPIO_InitStruct1);

//行中斷 HREF

GPIO_InitStruct1.GPIO_Pin = OV7620_HREF_PIN;

GPIO_InitStruct1.GPIO_InitState = Bit_SET;

GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_RISING;

GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD;

GPIO_InitStruct1.GPIOx = OV7620_HREF_PORT;

GPIO_Init(&GPIO_InitStruct1);

// 場(chǎng)中斷 VSYNC

GPIO_InitStruct1.GPIO_Pin = OV7620_VSYNC_PIN;

GPIO_InitStruct1.GPIO_InitState = Bit_SET;

GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_RISING; //GPIO_IT_RISING

GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IPD; //GPIO_Mode_IPD

GPIO_InitStruct1.GPIOx = OV7620_VSYNC_PORT;

GPIO_Init(&GPIO_InitStruct1);

//配置DMA

DMA_InitStruct1.Channelx = DMA_CH1; //DMA 1通道

DMA_InitStruct1.PeripheralDMAReq =PORTC_DMAREQ; //C端口(PCLK) 上升呀觸發(fā)

DMA_InitStruct1.MinorLoopLength = 170; //傳輸次數(shù) 超過攝像頭每行像素?cái)?shù)即可

DMA_InitStruct1.TransferBytes = 1; //每次傳輸1個(gè)字節(jié)

DMA_InitStruct1.DMAAutoClose = ENABLE; //連續(xù)采集

DMA_InitStruct1.EnableState = ENABLE; //初始化后立即采集

DMA_InitStruct1.SourceBaseAddr =(uint32_t)&PTD-》PDIR;//攝像頭端口接D0-D7

DMA_InitStruct1.SourceMajorInc = 0; //地址不增加

DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT; //8BIT數(shù)據(jù)

DMA_InitStruct1.SourceMinorInc = 0;

DMA_InitStruct1.DestBaseAddr =(uint32_t)DMABuffer; //DMA 內(nèi)存 //uint8_t DMABuffer[400];

DMA_InitStruct1.DestMajorInc = 0;

DMA_InitStruct1.DestDataSize = DMA_DST_8BIT;

DMA_InitStruct1.DestMinorInc = 1; //每次傳輸 +1個(gè)字節(jié)

DMA_Init(&DMA_InitStruct1);

}

然后開始編寫場(chǎng)中斷函數(shù),編寫之前我們需要在心里理一下思緒,在場(chǎng)中斷函數(shù)里我們要按照順序,做以下幾件事情:

A.確認(rèn)是否是場(chǎng)中斷,確認(rèn)之后進(jìn)入處理。

B.清除標(biāo)志位Flag。(Flag是用來觀察是否處理完一場(chǎng)圖像的標(biāo)志)

C.清除中斷標(biāo)志。

D.計(jì)數(shù)全部清零。(因?yàn)樾碌囊粓?chǎng)已經(jīng)開始)

E.打開行中斷,關(guān)閉場(chǎng)中斷。

[objc] view plain copyvoid PORTB_IRQHandler(void)//功 能:PORTB 外部中斷服務(wù) //V

{

u8 i=9;

if((PORTB-》ISFR》》i)==1)

{

Flag = 0;

PORTB-》ISFR|=(1《《9);

Row = 0;

Row_Num = 0;

NVIC_EnableIRQ(PORTA_IRQn);//行

NVIC_DisableIRQ(PORTB_IRQn);//場(chǎng)

}

接著編寫行中斷函數(shù),在行中斷中,我們要做以下幾件事情:

A.確認(rèn)是否是行中斷。

B.關(guān)閉DMA中斷,防止提前進(jìn)入PCLK的采集。

C.跳過消隱區(qū)。(消隱區(qū):消隱區(qū)的出現(xiàn),在電視機(jī)原理上,是因?yàn)?a target="_blank">電子束結(jié)束一行掃描,從一行尾換到另一行頭,期間的空閑期,這叫做行消隱信號(hào);同理,從一場(chǎng)尾換到另一場(chǎng)尾,期間也會(huì)有空閑期,這叫做場(chǎng)消隱信號(hào)。)

D.進(jìn)入行采集處理。

E.配置DMA,并且打開DMA中斷。

F.行計(jì)數(shù)加1,表示已經(jīng)采集完了一行。(因?yàn)镻CLK的中斷周期遠(yuǎn)遠(yuǎn)小于HREF的中斷周期,所以不需要杞人憂天,擔(dān)心中斷搞得混亂。)

G.當(dāng)采集完了自己的目標(biāo)行數(shù)之后,標(biāo)志位Flag修改。并關(guān)閉行中斷,打開場(chǎng)中斷,等待下一次的場(chǎng)中斷。

[objc] view plain copyvoid PORTA_IRQHandler(void)//功 能:PORTA 外部中斷服務(wù)//Herf

{

u8 i=14;

DMA_SetEnableReq(DMA_CH1,DISABLE); //close DMA ISr

if((PORTA-》ISFR》》i)==1);

{

PORTA-》ISFR|=(1《《14);

if(Row_Num++ 》 15) //消隱區(qū)啦

{

if(Row_Num%5) //進(jìn)入行采集

{

//配置DMA

DMA_InitStruct1.Channelx = DMA_CH1; //DMA 1通道

DMA_InitStruct1.PeripheralDMAReq =PORTC_DMAREQ; //C端口(PCLK) 上升呀觸發(fā)

DMA_InitStruct1.MinorLoopLength = 170; //傳輸次數(shù) 超過攝像頭每行像素?cái)?shù)即可

DMA_InitStruct1.TransferBytes = 1; //每次傳輸1個(gè)字節(jié)

DMA_InitStruct1.DMAAutoClose = ENABLE; //連續(xù)采集

DMA_InitStruct1.EnableState = ENABLE; //初始化后立即采集

DMA_InitStruct1.SourceBaseAddr =(uint32_t)&PTD-》PDIR;//攝像頭端口接D0-D7

DMA_InitStruct1.SourceMajorInc = 0; //地址不增加

DMA_InitStruct1.SourceDataSize = DMA_SRC_8BIT; //8BIT數(shù)據(jù)

DMA_InitStruct1.SourceMinorInc = 0;

DMA_InitStruct1.DestBaseAddr =(uint32_t)Image[Row]; //DMA 內(nèi)存 //uint8_t DMABuffer[400];

DMA_InitStruct1.DestMajorInc = 0;

DMA_InitStruct1.DestDataSize = DMA_DST_8BIT;

DMA_InitStruct1.DestMinorInc = 1; //每次傳輸 +1個(gè)字節(jié)

DMA_Init(&DMA_InitStruct1);

///////////////////////////////////////////////////////

Row ++;

if(Row==MAX_ROW)

{

Flag = 1;

NVIC_DisableIRQ(PORTA_IRQn);//行

NVIC_EnableIRQ(PORTB_IRQn);//場(chǎng)

}

}

}

}

}

最后給大家看一下,DMA的初始化函數(shù),這個(gè)函數(shù)是超核的庫(kù)里面的,不是我寫的,但是上面的解釋很詳細(xì)了,相信都能看懂。

[objc] view plain copyvoid DMA_Init(DMA_InitTypeDef *DMA_InitStruct)

{

//參數(shù)檢查

assert_param(IS_DMA_REQ(DMA_InitStruct-》PeripheralDMAReq));

assert_param(IS_DMA_ATTR_SSIZE(DMA_InitStruct-》SourceDataSize));

assert_param(IS_DMA_ATTR_DSIZE(DMA_InitStruct-》DestDataSize));

assert_param(IS_DMA_CH(DMA_InitStruct-》Channelx));

assert_param(IS_DMA_MINOR_LOOP(DMA_InitStruct-》MinorLoopLength));

//打開DMA0和DMAMUX時(shí)鐘源

SIM-》SCGC6 |= SIM_SCGC6_DMAMUX_MASK;

SIM-》SCGC7 |= SIM_SCGC7_DMA_MASK;

//配置DMA觸發(fā)源

DMAMUX-》CHCFG[DMA_InitStruct-》Channelx] = DMAMUX_CHCFG_SOURCE(DMA_InitStruct-》PeripheralDMAReq);

//設(shè)置源地址信息

DMA0-》TCD[DMA_InitStruct-》Channelx].SADDR = DMA_InitStruct-》SourceBaseAddr;

//執(zhí)行完源地址操作后,是否在源地址基礎(chǔ)上累加

DMA0-》TCD[DMA_InitStruct-》Channelx].SOFF = DMA_SOFF_SOFF(DMA_InitStruct-》SourceMinorInc);

//設(shè)置源地址傳輸寬度

DMA0-》TCD[DMA_InitStruct-》Channelx].ATTR = 0;

DMA0-》TCD[DMA_InitStruct-》Channelx].ATTR |= DMA_ATTR_SSIZE(DMA_InitStruct-》SourceDataSize);

//主循環(huán)進(jìn)行完后 是否更改源地址

DMA0-》TCD[DMA_InitStruct-》Channelx].SLAST = DMA_InitStruct-》SourceMajorInc;

//設(shè)置目的地址信息

DMA0-》TCD[DMA_InitStruct-》Channelx].DADDR = DMA_InitStruct-》DestBaseAddr;

//執(zhí)行完源地址操作后,是否在源地址基礎(chǔ)上累加

DMA0-》TCD[DMA_InitStruct-》Channelx].DOFF = DMA_DOFF_DOFF(DMA_InitStruct-》DestMinorInc);

//設(shè)置目的地址傳輸寬度

DMA0-》TCD[DMA_InitStruct-》Channelx].ATTR |= DMA_ATTR_DSIZE(DMA_InitStruct-》DestDataSize);

//主循環(huán)進(jìn)行完后 是否更改源地址

DMA0-》TCD[DMA_InitStruct-》Channelx].DLAST_SGA = DMA_InitStruct-》DestMajorInc;

//設(shè)置計(jì)數(shù)器長(zhǎng)度 循環(huán)次數(shù)

//設(shè)置數(shù)據(jù)長(zhǎng)度 長(zhǎng)度每次遞減 也被稱作當(dāng)前主循環(huán)計(jì)數(shù) current major loop count

DMA0-》TCD[DMA_InitStruct-》Channelx].CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(DMA_InitStruct-》MinorLoopLength );

//起始循環(huán)計(jì)數(shù)器 當(dāng)主循環(huán)計(jì)數(shù)器為0 時(shí)候 將裝載起始循環(huán)計(jì)數(shù)器的值

DMA0-》TCD[DMA_InitStruct-》Channelx].BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(DMA_InitStruct-》MinorLoopLength);

//設(shè)置每一次傳輸字節(jié)的個(gè)數(shù) 個(gè)數(shù)到達(dá)上限時(shí) DMA便將數(shù)據(jù)存入RAM

DMA0-》TCD[DMA_InitStruct-》Channelx].NBYTES_MLNO = DMA_NBYTES_MLNO_NBYTES(DMA_InitStruct-》TransferBytes);

//設(shè)置DMA TCD控制寄存器

DMA0-》TCD[DMA_InitStruct-》Channelx].CSR = 0;

if(DMA_InitStruct-》DMAAutoClose == ENABLE)

{

DMA0-》TCD[DMA_InitStruct-》Channelx].CSR |=DMA_CSR_DREQ_MASK;

}

else

{

DMA0-》TCD[DMA_InitStruct-》Channelx].CSR &=(~DMA_CSR_DREQ_MASK);

}

//使能此寄存器DMA開始工作

DMA_SetEnableReq(DMA_InitStruct-》Channelx,DMA_InitStruct-》EnableState);

//DMA 通道使能

DMAMUX-》CHCFG[DMA_InitStruct-》Channelx] |= DMAMUX_CHCFG_ENBL_MASK;

}

Second:

講完OV7620的一些中斷處理函數(shù)之后,我們來看看SCCB的庫(kù)程序,這個(gè)庫(kù)可以通用,需要的車友可以直接添加,只需要對(duì)照自己使用的庫(kù),在IO口初始化里面做出相應(yīng)的修改即可。

[objc] view plain copy#ifndef __SCCB_H

#define __SCCB_H

#define SCL_HIGH PEout(1) = 1 //設(shè)置為輸出后輸出1

#define SCL_LOW PEout(1) = 0 //設(shè)置為輸出后輸出0

#define SCL_OUT PTE-》PDDR|=(1《《1) //設(shè)置為輸出

//#define SCL_DDR_IN() PTE-》PDDR&=~(1《《1)//輸入

#define SDA_HIGH PEout(0)= 1 //設(shè)置為輸出后輸出1

#define SDA_LOW PEout(0)= 0 //設(shè)置為輸出后輸出0

#define SDA_DATA PEin(0)

#define SDA_OUT PTE-》PDDR|=(1《《0) //設(shè)置為輸出

#define SDA_IN PTE-》PDDR&=~(1《《0) //設(shè)置為輸入

#define u8 unsigned char

#define u16 unsigned short

//#define ADDR_OV7725 0x42

void sccb_init(void); //初始化SCCB端口為GPIO

void sccb_wait(void); //SCCB時(shí)序延時(shí)

void sccb_start(void); //起始標(biāo)志

void sccb_stop(void); //停止標(biāo)志

u8 sccb_sendByte(u8 data);

void sccb_regWrite(u8 device,u8 address,u8 data);

#endif

#include “sys.h”

#include “gpio.h”

#include “sccb.h”

#include “delay.h”

#include “stdio.h”

/*************************************************************************

* 函數(shù)名稱:sccb_init

* 功能說明:初始化SCCB 其中SCL接PE1 SDA接PTE0

*************************************************************************/

void sccb_init(void)

{

int i ;

GPIO_InitTypeDef GPIO_InitStruct1;

for(i=0;i《8;i++)

{

GPIO_InitStruct1.GPIO_Pin = i;

GPIO_InitStruct1.GPIO_InitState = Bit_RESET; //change as Bit_Set , it will shut.

GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DISABLE;

GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStruct1.GPIOx = PTD;

GPIO_Init(&GPIO_InitStruct1);

}

GPIO_InitStruct1.GPIO_Pin = 0;

GPIO_InitStruct1.GPIO_InitState = Bit_RESET;

GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DISABLE;

GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_OPP;

GPIO_InitStruct1.GPIOx = PTE;

GPIO_Init(&GPIO_InitStruct1);

GPIO_InitStruct1.GPIO_Pin = 1;

GPIO_InitStruct1.GPIO_InitState = Bit_RESET;

GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DISABLE;

GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_OPP;

GPIO_InitStruct1.GPIOx = PTE;

GPIO_Init(&GPIO_InitStruct1);

}

/************************************************************************

* 函數(shù)名稱:sccb_wait

* 功能說明:SCCB延時(shí),不應(yīng)太小

*************************************************************************/

void sccb_wait(void)

{

u8 i;

u16 j;

for( i=0; i《100; i++)

{

j++;

}

}

/************************************************************************

* 函數(shù)名稱:sccb_start

* 功能說明:SCCB啟動(dòng)位

*************************************************************************/

void sccb_start(void)

{

SCL_OUT;

SDA_OUT;

SDA_HIGH;

//sccb_wait();

SCL_HIGH;

sccb_wait();

SDA_LOW;

sccb_wait();

SCL_LOW;

}

/************************************************************************

* 函數(shù)名稱:sccb_stop

* 功能說明:SCCB停止位

*************************************************************************/

void sccb_stop(void)

{

SCL_OUT;

SDA_OUT;

SDA_LOW;

sccb_wait();

SCL_HIGH;

sccb_wait();

SDA_HIGH;

sccb_wait();

}

/************************************************************************

* 函數(shù)名稱:sccb_sendByte

* 功能說明:在SCCB總線上發(fā)送一個(gè)字節(jié)

* 參數(shù)說明:data 要發(fā)送的字節(jié)內(nèi)容

*************************************************************************/

u8 sccb_sendByte(u8 data)

{

u8 i;

u8 ack;

SDA_OUT;

for( i=0; i《8; i++)

{

if(data & 0x80)

SDA_HIGH;

else

SDA_LOW;

data 《《= 1;

sccb_wait();

SCL_HIGH;

sccb_wait();

SCL_LOW;

sccb_wait();

}

SDA_HIGH;

SDA_IN;

sccb_wait();

SCL_HIGH;

sccb_wait();

ack = SDA_DATA;

SCL_LOW;

sccb_wait();

return ack;

}

/************************************************************************

* 函數(shù)名稱:sccb_regWrite

* 功能說明:通過SCCB總線向指定設(shè)備的指定地址發(fā)送指定內(nèi)容

* 參數(shù)說明:device---設(shè)備號(hào) 讀寫有區(qū)別 42是寫,43是寫

* address---寫數(shù)據(jù)的寄存器

* data---寫的內(nèi)容

* 函數(shù)返回:ack=1未收到應(yīng)答(失敗) ack=0收到應(yīng)答(成功)

*************************************************************************/

void sccb_regWrite(u8 device,u8 address,u8 data)

{

// u8 i;

u8 ack;

// for( i=0; i《20; i++)

// {

sccb_start();

ack = sccb_sendByte(device);

while( ack )

{

ack = sccb_sendByte(device);

// printf(“device ”);

}

ack = sccb_sendByte(address);

while( ack )

{

ack = sccb_sendByte(address);;

// printf(“address ”);

}

ack = sccb_sendByte(data);

while( ack )

{

ack = sccb_sendByte(data);

// printf(“data ”);

}

sccb_stop();

// if( ack == 0 ) break;

// }

}

貼上使用的SCCB的庫(kù)之后,給大家看一下對(duì)SCCB的一段實(shí)例操作程序。程序上有詳細(xì)的解釋,我就不贅述了。

[objc] view plain copysccb_init();

sccb_regWrite(0x42,0x11,0x01); //地址0X11-中斷四分頻(1280*480) PCLK:166ns HREF:254.6us VSYN:133.6ms

sccb_regWrite(0x42,0x14,0x24); //地址0X14-QVGA(320*240) PCLK:332ns HREF:509.6us VSYN:133.6ms

sccb_regWrite(0x42,0x28,0x40); //地址0X28-黑白模式(320*240 PCLK:332ns HREF:127us VSYN:33.6ms

sccb_wait();

以上就是關(guān)于OV7620的使用了,看完之后大家是不是會(huì)使用了呢。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 攝像頭
    +關(guān)注

    關(guān)注

    60

    文章

    4849

    瀏覽量

    95845
  • OV7620
    +關(guān)注

    關(guān)注

    3

    文章

    19

    瀏覽量

    30305
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問STC的單片機(jī)跑不了攝像頭程序么

    攝像頭OV7620CMOS
    發(fā)表于 12-10 16:23

    飛思卡爾智能車K60程序 OV7620攝像頭

    控制代碼我自己寫的,2013年參加的飛思卡爾,比賽結(jié)束,講代碼奉獻(xiàn)出來,有意愿的可以拿去,Kinetis60控制器,Ov7620攝像頭識(shí)別路徑。有問題可以討論,希望對(duì)大家有用!
    發(fā)表于 08-21 21:35

    求助飛思卡爾直立攝像頭ov7620

    `我參加今年的飛思卡爾直立攝像頭組比賽,用的ov7620,上電后直接用采集卡獲得圖像如下圖,請(qǐng)問是怎么回事。`
    發(fā)表于 02-11 16:54

    請(qǐng)問能否給出其他型號(hào)攝像頭的官方例程?

    帶fifo的ov7620攝像頭在淘寶上只有一個(gè)賣家,而且缺貨,能否給出其他型號(hào)攝像頭的例程
    發(fā)表于 07-23 04:06

    請(qǐng)問關(guān)于OV7620的替代品問題,有的攝像頭模塊只有18個(gè)引腳,沒有HREF引腳,能把例程給改了嗎?

    論壇例程用的是OV7620,我買了一個(gè)OV7670的攝像頭模塊,帶FIFO,其他的都差不多,但是跟OV7620最大的區(qū)別在引腳不同,我這個(gè)只有18個(gè)引腳,關(guān)鍵是沒有HREF這個(gè)引腳,人
    發(fā)表于 07-23 02:09

    請(qǐng)問C6748開發(fā)板可以控制OV7620

    請(qǐng)問開發(fā)板可以直接像我這樣連線接OV7620,然后用ov2640的例程控制ov7620?覺得兩款攝像頭一樣的!
    發(fā)表于 10-30 08:54

    ov7620中文資料

    0V7620 是一種CMOS 圖像傳感器,它被廣泛應(yīng)用在網(wǎng)絡(luò)攝像頭攝像手機(jī)等產(chǎn)品中。由它組成的圖像采集系統(tǒng),比較常見的設(shè)計(jì)方法為OV7620
    發(fā)表于 10-08 14:25 ?392次下載

    OV7620程序K60(配底板)

    這是一個(gè)ov7620攝像頭與K60主板連接的軟件和程序。
    發(fā)表于 05-06 14:37 ?39次下載

    基于OV7620攝像頭智能車道路信息視頻采集及處理研究

    基于OV7620攝像頭智能車道路信息視頻采集及處理研究,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-18 17:47 ?16次下載

    OV7620攝像頭

    OV7620攝像頭
    發(fā)表于 03-24 09:36 ?30次下載

    OV7620攝像頭數(shù)據(jù)手冊(cè)

    OV7620攝像頭數(shù)據(jù)手冊(cè)
    發(fā)表于 10-24 13:48 ?44次下載
    <b class='flag-5'>OV7620</b><b class='flag-5'>攝像頭</b>數(shù)據(jù)手冊(cè)

    一文看懂ov7620ov7670的區(qū)別

    本文開始對(duì)OV7620進(jìn)行了介紹,其中包括了OV7620基本參數(shù)和OV7620應(yīng)用實(shí)例,其次介紹了OV7670的參數(shù)與功能,最后分析了ov7620
    發(fā)表于 03-01 09:02 ?5.2w次閱讀

    ov7620怎么接線_ov7620硬件連接

    本文開始介紹了OV7620的基本參數(shù),其次介紹了ov7620硬件結(jié)構(gòu),最后闡述了ov7620的具體實(shí)現(xiàn)以及Ov7620的硬件連接。
    的頭像 發(fā)表于 03-01 09:25 ?9083次閱讀

    攝像頭入門教程之如何用XS128驅(qū)動(dòng)OV7620

    我們已經(jīng)知道,對(duì)于 OV7620 來說,行信號(hào) HREF 與場(chǎng)信號(hào) VSYN 的時(shí)間比較長(zhǎng),XS12 的單片機(jī)足以捕捉到;但是 OV7620 的像素同步信號(hào) PCLK 只有 73ns,而 XS12
    發(fā)表于 11-14 08:00 ?16次下載

    如何使用OV7620攝像頭實(shí)現(xiàn)智能車道路信息視頻采集及處理

    本文研究了基于視覺傳感器的道路信息采集系統(tǒng)以及視頻信號(hào)的處理算法, 智能車的處理器使用了MC9S12XS128 ,采樣系統(tǒng)的硬件部分使用OV7620數(shù)字攝像頭;軟件部分的關(guān)鍵是采用雙數(shù)組交替存儲(chǔ)
    發(fā)表于 08-21 16:16 ?9次下載
    如何使用<b class='flag-5'>OV7620</b><b class='flag-5'>攝像頭</b>實(shí)現(xiàn)智能車道路信息視頻采集及處理
    主站蜘蛛池模板: 羞羞漫画在线播放| SM高H黄暴NP辣H调教性奴| 亚洲一区国产| 最近韩国日本免费观看mv免费版 | 男人边吃奶边挵进去呻吟漫画| 日本经典片免费看| 亚洲国产欧美日本大妈| 中文字幕国产视频| 成人国产亚洲欧美成人综合网 | 97超级碰碰人妻中文字幕| 成人无码精品一区二区在线观看| 国产午夜a理论毛片在线影院| 久久综合色一综合色88| 日韩一区二区天海翼| 夜色爽爽爽久久精品日韩| www黄色com| 精品视频在线播放| 人妻 中文无码 中出| 亚洲午夜精品AV无码少妇| AV多人爱爱XXx| 国产免费69成人精品视频| 老熟女重囗味GRANNYBBW| 软糯白嫩双性受h| 在线亚洲免费| 国产精品看高国产精品不卡| 麻豆婷婷狠狠色18禁久久| 无人区乱码区1卡2卡三卡在线 | 亚洲精品嫩草AV在线观看| 99久久久无码国产精品免费人妻 | 老司机福利在 线影院| 天天看学生视频| 98久久无码一区人妻A片蜜| 国产亚洲tv在线观看| 欧美日韩亚洲成人| 一级毛片免费视频网站| 丰满老熟好大bbbxxx| 乱VODAFONEWIFI熟妇| 亚洲高清视频在线| 丰满饥渴老太性hd| 女配穿书病娇被强啪h| 一二三四中文字幕在线看|