在320X240的液晶上显示qvga,一切正常。打算让摄像头显示在窗口280X200,怎么都是错位。
void OV_HW(unsigned int hstart, unsigned int hstop, unsigned int vstart, unsigned int vstop)
{
uint8_t v;
OV7670_WriteReg(0x17, (hstart >> 3) & 0xff); //HSTART
OV7670_WriteReg(0x18, (hstop >> 3) & 0xff); //HSTOP
OV7670_ReadReg(0x32,&v);
v = (v & 0xc0) | ((hstop & 0x7) << 3) | (hstart & 0x7);
OV7670_WriteReg(0x32, v); //HREF
OV7670_WriteReg(0x19, (vstart >> 2) & 0xff); //VSTART 开始高8位
OV7670_WriteReg(0x1a, (vstop >> 2) & 0xff); //VSTOP 结束高8位
OV7670_ReadReg(0x03,&v );
v = (v & 0xf0) | ((vstop & 0x3) << 2) | (vstart & 0x3);
OV7670_WriteReg(0x03, v); //VREF
OV7670_WriteReg(0x11, 0x00);
}
- //输出窗口设置
- void OV7670_config_window(u16 startx,u16 starty,u16 width,u16 height)
- {
- u16 endx=(startx+width)%784; //QVGA输出的话改成 u16 endx=(startx+width*2)%784;
- u16 endy=(starty+height); // u16 endy=(starty+height*2);
- u8 x_reg,y_reg;
- u8 state,temp;
- state=ov7660_read_reg(0x32,&x_reg);
- x_reg&=0xC0;
- state=ov7660_read_reg(0x03,&y_reg);
- y_reg&=0xF0;
-
- //HREF
- temp=x_reg|((endx&0x7)<<3)|(startx&0x7);
- state=ov7670_write_reg(0x32,temp);
- temp=(startx&0x7F8)>>3;
- state=ov7670_write_reg(0x17,temp);
- temp=(endx&0x7F8)>>3;
- state=ov7670_write_reg(0x18,temp);
-
- //VREF
- temp=y_reg|((endy&0x3)<<2)|(starty&0x3);
- state=ov7670_write_reg(0x03,temp);
- temp=(starty&0x3FC)>>2;
- state=ov7670_write_reg(0x19,temp);
- temp=(endy&0x3FC)>>2;
- state=ov7670_write_reg(0x1A,temp);
- }
复制代码这个184 和10 是别人从linux下移植过来的,还有,这个窗口设置函数在我这是正常的呀。
我这Camera的PLCK是24MHz
方便把你寄存器设置共享一下吗,我现在还一个很奇怪现象,是主频24M,显示变暗了很多,窗口要在4M下才显示正常
我把整个工程上传过来,你打开找找
一周热门 更多>