#include <stdio.h>
#include "sccb.h"
#include "camif.h"
#include "ov9650.h"
const REG_CFG OV9650_REG[] = {
{0x11,0x80},{0x6a,0x3e},{0x3b,0x09},{0x13,0xe0},{0x01,0x80},{0x02,0x80},{0x00,0x00},{0x10,0x00},
{0x13,0xe5},{0x39,0x43},{0x38,0x12},{0x37,0x00},{0x35,0x91},{0x0e,0xa0},{0x1e,0x00},{0xA8,0x80},
{0x12,0x40},{0x04,0x00},{0x0c,0x04},{0x0d,0x80},{0x18,0xc6},{0x17,0x26},{0x32,0xad},{0x03,0x00},
{0x1a,0x3d},{0x19,0x01},{0x3f,0xa6},{0x14,0x2e},{0x15,0x10},{0x41,0x02},{0x42,0x08},{0x1b,0x00},
{0x16,0x06},{0x33,0xe2},{0x34,0xbf},{0x96,0x04},{0x3a,0x00},{0x8e,0x00},{0x3c,0x77},{0x8B,0x06},
{0x94,0x88},{0x95,0x88},{0x40,0xc1},{0x29,0x3f},{0x0f,0x42},{0x3d,0x92},{0x69,0x40},{0x5C,0xb9},
{0x5D,0x96},{0x5E,0x10},{0x59,0xc0},{0x5A,0xaf},{0x5B,0x55},{0x43,0xf0},{0x44,0x10},{0x45,0x68},
{0x46,0x96},{0x47,0x60},{0x48,0x80},{0x5F,0xe0},{0x60,0x8c},{0x61,0x20},{0xa5,0xd9},{0xa4,0x74},
{0x8d,0x02},{0x13,0xe7},{0x4f,0x3a},{0x50,0x3d},{0x51,0x03},{0x52,0x12},{0x53,0x26},{0x54,0x38},
{0x55,0x40},{0x56,0x40},{0x57,0x40},{0x58,0x0d},{0x8C,0x23},{0x3E,0x02},{0xa9,0xb8},{0xaa,0x92},
{0xab,0x0a},{0x8f,0xdf},{0x90,0x00},{0x91,0x00},{0x9f,0x00},{0xa0,0x00},{0x3A,0x01},{0x24,0x70},
{0x25,0x64},{0x26,0xc3},{0x2a,0x00},{0x2b,0x00},{0x6c,0x40},{0x6d,0x30},{0x6e,0x4b},{0x6f,0x60},
{0x70,0x70},{0x71,0x70},{0x72,0x70},{0x73,0x70},{0x74,0x60},{0x75,0x60},{0x76,0x50},{0x77,0x48},
{0x78,0x3a},{0x79,0x2e},{0x7a,0x28},{0x7b,0x22},{0x7c,0x04},{0x7d,0x07},{0x7e,0x10},{0x7f,0x28},
{0x80,0x36},{0x81,0x44},{0x82,0x52},{0x83,0x60},{0x84,0x6c},{0x85,0x78},{0x86,0x8c},{0x87,0x9e},
{0x88,0xbb},{0x89,0xd2},{0x8a,0xe6},
};
static void delay(unsigned int i)
{
for(; i > 0; i--);
}
void OV9650_WriteReg(unsigned char reg, unsigned char data)
{
//3 phase write cycle
SCCB_Start();
SCCB_WriteByte(DEVICE_ADDR_OV9650);
SCCB_WriteByte(reg);
SCCB_WriteByte(data);
SCCB_End();
}
unsigned char OV9650_ReadReg(unsigned char reg)
{
unsigned char data;
//2 phase write cycle
SCCB_Start();
SCCB_WriteByte(DEVICE_ADDR_OV9650);
SCCB_WriteByte(reg);
SCCB_End();//can't be moved
//2 phase read cycle
SCCB_Start();
SCCB_WriteByte(DEVICE_ADDR_OV9650 | 1);
data = SCCB_ReadByte();
SCCB_End();
return data;
}
unsigned char OV9650_CheckPID(void)
{
int i, id;
for(i = 0; i < 0xff; i++)
{
id = 0;
id = OV9650_ReadReg(0x0A) << 8;
id |= OV9650_ReadReg(0x0B);
if(OV9650_PID == id)
{
printf("Found camera module. Product ID = 0x%04X\r\n", id);
return 1;
}
}
printf("Camera not found! Error Product ID = 0x%04X\r\n", id);
return 0;
}
unsigned char OV9650_CheckMID(void)
{
int i, id;
for(i = 0; i < 0xff; i++)
{
id = 0;
id = OV9650_ReadReg(0x1C) << 8;
id |= OV9650_ReadReg(0x1D);
if(OV9650_MID == id)
{
printf("Found camera module. Manufacturer ID = 0x%04X\r\n", id);
return 1;
}
}
printf("Camera not found! Error Manufacturer ID = 0x%04X\r\n", id);
return 0;
}
void OV9650_Config(void)
{
int i;
OV9650_WriteReg(0x12, 0x80);
delay(10000);
for(i = 0; i < (sizeof(OV9650_REG) / sizeof(OV9650_REG[0])); i++)
{
OV9650_WriteReg(OV9650_REG[i].reg, OV9650_REG[i].val);
}
}
void OV9650_SetLightMode(LIGHTMODE mode)
{
switch(mode)
{
case OV9650_LIGHTMODE_AUTO:
OV9650_WriteReg(0x13 ,0xe7);
OV9650_WriteReg(0x11 ,0x81);
OV9650_WriteReg(0x41 ,0x02);
OV9650_WriteReg(0x3f ,0xa6);
OV9650_WriteReg(0x3d ,0x92);
OV9650_WriteReg(0x66 ,0x01);
OV9650_WriteReg(0x14 ,0x1e);
break;
case OV9650_LIGHTMODE_SUNNY:
OV9650_WriteReg(0x13 ,0xc5);
OV9650_WriteReg(0x01 ,0x74);
OV9650_WriteReg(0x02 ,0x90);
OV9650_WriteReg(0x14 ,0x0e);
OV9650_WriteReg(0x11 ,0x81);
OV9650_WriteReg(0x41 ,0x02);
OV9650_WriteReg(0x3f ,0xa6);
OV9650_WriteReg(0x3d ,0x92);
OV9650_WriteReg(0x66 ,0x01);
break;
case OV9650_LIGHTMODE_CLOUDY:
OV9650_WriteReg(0x13 ,0xc5);
OV9650_WriteReg(0x01 ,0x74);
OV9650_WriteReg(0x02 ,0x90);
OV9650_WriteReg(0x14 ,0x1e);
OV9650_WriteReg(0x11 ,0x81);
OV9650_WriteReg(0x41 ,0x02);
OV9650_WriteReg(0x3f ,0xa6);
OV9650_WriteReg(0x3d ,0x92);
OV9650_WriteReg(0x66 ,0x01);
break;
case OV9650_LIGHTMODE_OFFICE:
OV9650_WriteReg(0x13 ,0xe5);
OV9650_WriteReg(0x01 ,0x97);
OV9650_WriteReg(0x02 ,0x7d);
OV9650_WriteReg(0x14 ,0x1e);
OV9650_WriteReg(0x11 ,0x81);
OV9650_WriteReg(0x41 ,0x02);
OV9650_WriteReg(0x3f ,0xa6);
OV9650_WriteReg(0x3d ,0x92);
OV9650_WriteReg(0x66 ,0x01);
break;
case OV9650_LIGHTMODE_HOME:
OV9650_WriteReg(0x13 ,0xe5);
OV9650_WriteReg(0x01 ,0x9c);
OV9650_WriteReg(0x02 ,0x54);
OV9650_WriteReg(0x14 ,0x1e);
OV9650_WriteReg(0x11 ,0x81);
OV9650_WriteReg(0x41 ,0x02);
OV9650_WriteReg(0x3f ,0xa6);
OV9650_WriteReg(0x3d ,0x92);
OV9650_WriteReg(0x66 ,0x01);
break;
case OV9650_LIGHTMODE_NIGHT:
OV9650_WriteReg(0x11 ,0x83);
OV9650_WriteReg(0x41 ,0x00);
OV9650_WriteReg(0x3f ,0xf3);
OV9650_WriteReg(0x3d ,0x12);
OV9650_WriteReg(0x66 ,0x00);
OV9650_WriteReg(0x13 ,0xe7);
OV9650_WriteReg(0x14 ,0x1e);
break;
default:
break;
}
}
void OV9650_SetColorSaturation(COLORSATURATION saturation)
{
switch(saturation)
{
case OV9650_COLORSATURATION_P2:
OV9650_WriteReg(0x4f ,0x57);
OV9650_WriteReg(0x50 ,0x5c);
OV9650_WriteReg(0x51 ,0x05);
OV9650_WriteReg(0x52 ,0x1b);
OV9650_WriteReg(0x53 ,0x39);
OV9650_WriteReg(0x54 ,0x54);
break;
case OV9650_COLORSATURATION_P1:
OV9650_WriteReg(0x4f ,0x46);
OV9650_WriteReg(0x50 ,0x49);
OV9650_WriteReg(0x51 ,0x04);
OV9650_WriteReg(0x52 ,0x16);
OV9650_WriteReg(0x53 ,0x2e);
OV9650_WriteReg(0x54 ,0x43);
break;
case OV9650_COLORSATURATION_0:
OV9650_WriteReg(0x4f ,0x3a);
OV9650_WriteReg(0x50 ,0x3d);
OV9650_WriteReg(0x51 ,0x03);
OV9650_WriteReg(0x52 ,0x12);
OV9650_WriteReg(0x53 ,0x26);
OV9650_WriteReg(0x54 ,0x38);
break;
case OV9650_COLORSATURATION_N1:
OV9650_WriteReg(0x4f ,0x2e);
OV9650_WriteReg(0x50 ,0x31);
OV9650_WriteReg(0x51 ,0x02);
OV9650_WriteReg(0x52 ,0x0e);
OV9650_WriteReg(0x53 ,0x1E);
OV9650_WriteReg(0x54 ,0x2d);
break;
case OV9650_COLORSATURATION_N2:
OV9650_WriteReg(0x4f ,0x1d);
OV9650_WriteReg(0x50 ,0x1f);
OV9650_WriteReg(0x51 ,0x02);
OV9650_WriteReg(0x52 ,0x09);
OV9650_WriteReg(0x53 ,0x13);
OV9650_WriteReg(0x54 ,0x1c);
break;
default:
break;
}
}
void OV9650_SetBrightness(BRIGHTNESS bright)
{
switch(bright)
{
case OV9650_BRIGHTNESS_P3:
OV9650_WriteReg(0x24 ,0xd8);
OV9650_WriteReg(0x25 ,0xd0);
OV9650_WriteReg(0x26 ,0xfa);
break;
case OV9650_BRIGHTNESS_P2:
OV9650_WriteReg(0x24 ,0xc4);
OV9650_WriteReg(0x25 ,0xbf);
OV9650_WriteReg(0x26 ,0xe9);
break;
case OV9650_BRIGHTNESS_P1:
OV9650_WriteReg(0x24 ,0x90);
OV9650_WriteReg(0x25 ,0x84);
OV9650_WriteReg(0x26 ,0xd4);
break;
case OV9650_BRIGHTNESS_0:
OV9650_WriteReg(0x24 ,0x70);
OV9650_WriteReg(0x25 ,0x64);
OV9650_WriteReg(0x26 ,0xc3);
break;
case OV9650_BRIGHTNESS_N1:
OV9650_WriteReg(0x24 ,0x50);
OV9650_WriteReg(0x25 ,0x44);
OV9650_WriteReg(0x26 ,0x92);
break;
case OV9650_BRIGHTNESS_N2:
OV9650_WriteReg(0x24 ,0x3d);
OV9650_WriteReg(0x25 ,0x30);
OV9650_WriteReg(0x26 ,0x71);
break;
case OV9650_BRIGHTNESS_N3:
OV9650_WriteReg(0x24 ,0x1c);
OV9650_WriteReg(0x25 ,0x12);
OV9650_WriteReg(0x26 ,0x50);
break;
default:
break;
}
}
void OV9650_SetContrast(CONTRAST contrast)
{
switch(contrast)
{
case OV9650_CONTRAST_P3:
OV9650_WriteReg(0x7c ,0x04);
OV9650_WriteReg(0x7d ,0x09);
OV9650_WriteReg(0x7e ,0x14);
OV9650_WriteReg(0x7f ,0x28);
OV9650_WriteReg(0x80 ,0x32);
O
没有合适的资源?快使用搜索试试~ 我知道了~
S3C2440 camera驱动
共57个文件
o:9个
d:9个
crf:8个
3星 · 超过75%的资源 需积分: 10 21 下载量 14 浏览量
2015-04-08
10:57:37
上传
评论
收藏 269KB ZIP 举报
温馨提示
自己写的S3C2440 camera裸机驱动,采用类似STM32库函数的架构编写CAMIF接口驱动,适合初学者学习。
资源推荐
资源详情
资源评论
收起资源包目录
mycamera.zip (57个子文件)
mycamera
inc
ov9650.h 3KB
mmu.h 2KB
lcd.h 922B
2440addr.h 40KB
uart.h 167B
camif.h 5KB
LCD_TFT.h 8KB
sccb.h 237B
src
lcd.c 1KB
main.c 7KB
mmu.c 5KB
ov9650.c 26KB
camif.c 18KB
uart.c 1KB
sccb.c 1KB
S3C2440.s 51KB
project
mmu.d 46B
mmu.o 16KB
mycamera.sct 537B
mycamera.htm 66KB
uart.o 29KB
mycamera.uvopt 11KB
mycamera_Target 1.dep 3KB
lcd.o 29KB
lcd.d 74B
main.crf 33KB
mycamera.build_log.htm 205B
sccb.o 28KB
uart.crf 17KB
lcd_tft.o 33KB
camif.o 50KB
lcd_tft.crf 17KB
mycamera_sct.Bak 544B
sccb.d 79B
mycamera.axf 83KB
lcd.crf 14KB
ExtDll.iex 19B
ov9650.o 41KB
mycamera.uvgui.xiaolong.he 140KB
main.d 225B
ov9650.crf 22KB
mmu.crf 4KB
mycamera.lnp 323B
sccb.crf 14KB
s3c2440.d 31B
s3c2440.o 4KB
camif.d 109B
mycamera.map 89KB
uart.d 99B
main.o 41KB
mycamera.uvproj 16KB
lcd_tft.d 94B
ov9650.d 160B
s3c2440.lst 119KB
mycamera.uvgui.xiaolong_he.bak 140KB
JLinkArm_Target 1.ini 671B
camif.crf 26KB
共 57 条
- 1
资源评论
- dfsaafsd2018-01-18适合初学者学习
何小龙
- 粉丝: 2717
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功