金牌会员
 
- 积分
- 2078
- 金钱
- 2078
- 注册时间
- 2014-12-19
- 在线时间
- 710 小时
|
发表于 2016-7-22 11:47:22
|
显示全部楼层
设置图像尺寸、位置共有4个函数。这个是必须最先设置的。默认值为什么这么设置没法深究,是按手册给出的值计算出来的。调用函数之后有什么影响还没试。
楼主说的图像偏离中心,我感觉不是很明显,你的这种测试方法是否靠谱很难说。
[mw_shl_code=c,true]//默认 UXGA(284, 14, 1600, 1200) SVGA(274, 4, 800, 1208) CIF(274, 4, 800, 1206)???
uint8_t OV2640_SetSensorWindow(uint16_t hstr, uint16_t vstr, uint16_t winw, uint16_t winh)
{
uint16_t hend;
uint16_t vend;
uint8_t temp;
if (hstr % 2) return 1;
if (vstr % 2) return 2;
if (winw % 2) return 3;
if (winh % 2) return 4;
hend = (hstr + winw) / 2;
vend = (vstr + winh) / 2;
hstr /= 2;
vstr /= 2;
OV2640_WriteReg(0xFF, 0x01);
temp = OV2640_ReadReg(0x03); //保留COM1[7:6] Dummy frame control
temp &= 0xF0;
temp |= (((vend & 0x03) << 2) | (vstr & 0x03));
OV2640_WriteReg(0x03, temp); //VEND[1:0] VSTRT[1:0] 默认值 0x0F(UXGA), 0x0A(SVGA), 0x06(CIF)
OV2640_WriteReg(0x19, vstr >> 2); //VSTRT[9:2] 默认值 0x01(UXGA), 0x00(SVGA,CIF)
OV2640_WriteReg(0x1A, vend >> 2); //VEND[9:2] 默认值 0x97
temp = OV2640_ReadReg(0x32); //保留REG32[7:6] Pixel clock divide option
temp &= 0xC0;
temp |= (((hend & 0x07) << 3) | (hstr & 0x07));
OV2640_WriteReg(0x32, temp); //HREFEND[2:0] HREFST[2:0] 默认值 0x36(UXGA), 0x09(SVGA,CIF)
OV2640_WriteReg(0x17, hstr >> 3); //HREFST[10:3] 默认值 0x11
OV2640_WriteReg(0x18, hend >> 3); //HREFEND[10:3] 默认值 0x75(UXGA), 0x43(SVGA,CIF)
return 0;
}[/mw_shl_code]
|
|