<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > s3c2440的攝像接口拍照應用

s3c2440的攝像接口拍照應用

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
s3c2440 提供了一個(gè)攝像接口,使開(kāi)發(fā)人員很容易地實(shí)現攝像、照相等功能。攝像接口包括 8 位來(lái)自攝像頭的輸入數據信號,一個(gè)輸出主時(shí)鐘信號,三個(gè)來(lái)自攝像頭的輸入同步時(shí)鐘信號和一個(gè)輸出復位信號。攝像接口的主時(shí)鐘信號由 USB PLL 產(chǎn)生,它的頻率為 96MHz ,再經(jīng)過(guò)分頻處理后輸出給攝像頭,攝像頭再根據該時(shí)鐘信號產(chǎn)生三個(gè)同步時(shí)鐘信號(像素時(shí)鐘、幀同步時(shí)鐘和行同步時(shí)鐘),反過(guò)來(lái)再輸入回 s3c2440 。

s3c2440 僅僅提供了一個(gè)攝像接口,因此要實(shí)現其功能,還需要攝像頭。在這里,我們使用 OV9650 。 OV9650 內部有大量的寄存器需要配置,這就需要另外的數據接口。 OV9650 的數據接口稱(chēng)為 SCCB (串行攝像控制總線(xiàn)),它由兩條數據線(xiàn)組成:一個(gè)是用于傳輸時(shí)鐘信號的 SIO_C ,另一個(gè)是用于傳輸數據信號的 SIO_D 。 SCCB 的傳輸協(xié)議與 IIC 的極其相似,只不過(guò) IIC 在每傳輸完一個(gè)字節后,接收數據的一方要發(fā)送一位的確認數據,而 SCCB 一次要傳輸 9 位數據,前 8 位為有用數據,而第 9 位數據在寫(xiě)周期中是 Don’t-Care 位(即不必關(guān)心位),在讀周期中是 NA 位。 SCCB 定義數據傳輸的基本單元為相( phase ),即一個(gè)相傳輸一個(gè)字節數據。 SCCB 只包括三種傳輸周期,即 3 相寫(xiě)傳輸周期(三個(gè)相依次為設備從地址,內存地址,所寫(xiě)數據), 2 相寫(xiě)傳輸周期(兩個(gè)相依次為設備從地址,內存地址)和 2 相讀傳輸周期(兩個(gè)相依次為設備從地址,所讀數據)。當需要寫(xiě)操作時(shí),應用 3 相寫(xiě)傳輸周期,當需要讀操作時(shí),依次應用 2 相寫(xiě)傳輸周期和 2 相讀傳輸周期。因此 SCCB 一次只能讀或寫(xiě)一個(gè)字節。下面我們就用 s3c2440 的 IIC 總線(xiàn)接口分別與 OV9650 的 SIO_C 和 SIO_D 相連接來(lái)實(shí)現 SCCB 的功能。具體的讀、寫(xiě)函數為:

本文引用地址:http://dyxdggzs.com/article/201611/321674.htm

// 配置 IIC 接口

rGPEUP = 0xc000;// 上拉無(wú)效

rGPECON = 0xa0000000;//GPE15 : IICSDA , GPE14 : IICSCL

//IIC 中斷

void __irq IicISR(void)

{

rSRCPND |= 0x1<<27;

rINTPND |= 0x1<<27;

flag = 0;

}

// 寫(xiě)操作

// 輸入參數分別為要寫(xiě)入的內存地址和數據

void Wr_SCCB(unsigned char wordAddr, unsigned char data)

{

//3 相寫(xiě)傳輸周期

// 寫(xiě) OV9650 設備從地址字節

flag =1;

rIICDS =0x60;//OV9650 設備從地址為 0x60

rIICSTAT = 0xf0;

rIICCON &= ~0x10;

while(flag == 1)

delay(100);

// 寫(xiě) OV9650 內存地址字節

flag = 1;

rIICDS = wordAddr;

rIICCON &= ~0x10;

while(flag)

delay(100);

// 寫(xiě)具體的數據字節

flag = 1;

rIICDS = data;

rIICCON &= ~0x10;

while(flag)

delay(100);

rIICSTAT = 0xd0;// 停止位

rIICCON = 0xe3;// 為下一次數據傳輸做準備

delay(100);

}

// 讀操作

// 參數分別為要讀取的內存地址和數據

void Rd_SCCB (unsigned char wordAddr,unsigned char *data)

{

unsigned char temp;

//2 相寫(xiě)傳輸周期

// 寫(xiě)入 OV9650 設備從地址字節

flag =1;

rIICDS = 0x60;

rIICSTAT = 0xf0;

rIICCON &= ~0x10;

while(flag)

delay(100);

// 寫(xiě)入內存地址字節

flag = 1;

rIICDS = wordAddr;

rIICCON &= ~0x10;

while(flag)

delay(100);

rIICSTAT = 0xd0;// 停止位

rIICCON = 0xe3;// 為下一次數據傳輸做準備

delay(100);

//2 相讀傳輸周期

// 寫(xiě)入 OV9650 設備從地址字節

flag = 1;

rIICDS = 0x60;

rIICSTAT = 0xb0;

rIICCON &= ~0x10;

while (flag)

delay(100);

// 讀取一個(gè)無(wú)用字節

flag = 1;

temp = rIICDS;

rIICCON &= ~((1<<7)|(1<<4));

while(flag)

delay(100);

// 讀取數據

flag = 1;

*data= rIICDS;

rIICCON &= ~((1<<7)|(1<<4));

while(flag)

delay(100);

rIICSTAT = 0x90;// 停止位

rIICCON = 0xe3;// 為下一次傳輸做準備

delay(100);

}

當然我們也可以用兩個(gè)通用 IO 口來(lái)模擬 SCCB 總線(xiàn),下面我們給出具體的程序,其中 GPE15 為 SIO_D , GPE14 為 SIO_C 。

#define CLOCK_LOW()(rGPEDAT&=(~(1<<14)))// 時(shí)鐘信號低

#define CLOCK_HIGH()(rGPEDAT|=(1<<14))// 時(shí)鐘信號高

#define DATA_LOW()(rGPEDAT&=(~(1<<15)))// 數據信號低

#define DATA_HIGH()(rGPEDAT|=(1<<15))// 數據信號高

// 配置 IO

rGPEUP = 0xc000;// 上拉無(wú)效

rGPECON = 5<<28;//GPE15 為 SIO_D , GPE14 為 SIO_C ,都為輸出

void delay(int a)

{

int k;

for(k=0;k

;

}

// 啟動(dòng) SCCB

void __inline SCCB_start(void)

{

CLOCK_HIGH();

DATA_HIGH();

delay(10);

DATA_LOW();

delay(10);

CLOCK_LOW();

delay(10);

}

// 結束 SCCB

void __inline SCCB_end(void)

{

DATA_LOW();

delay(10);

CLOCK_HIGH();

delay(10);

DATA_HIGH();

delay(10);

}

//SCCB 發(fā)送一個(gè)字節

void __inline SCCB_sendbyte(unsigned char data)

{

int i=0;

// 并行數據轉串行輸出,串行數據輸出的順序為先高位再低位

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

{

if(data & 0x80)

DATA_HIGH();

else

DATA_LOW();

delay(10);

CLOCK_HIGH();

delay(10);

CLOCK_LOW();

delay(10);

DATA_LOW();

delay(10);

data <<= 1;

}

// 第 9 位, Don’t Care

DATA_HIGH();

delay(10);

CLOCK_HIGH();

delay(10);

CLOCK_LOW();

delay(10);

}


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: s3c2440攝像接口拍照應

評論


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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>