请问谁能解释ov7725设置分辨率的这段程序吗。

2019-03-23 15:56发布

  1. //设置图像输出窗口
  2. //width:输出图像宽度,<=320
  3. //height:输出图像高度,<=240
  4. //mode:0,QVGA输出模式;1,VGA输出模式
  5. //QVGA模式可视范围广但近物不是很清晰,VGA模式可视范围小近物清晰
  6. void OV7725_Window_Set(u16 width,u16 height,u8 mode)
  7. {
  8.     u8 raw,temp;
  9.     u16 sx,sy;  
  10.     if(mode)
  11.     {
  12.         sx=(640-width)/2;
  13.         sy=(480-height)/2;
  14.         SCCB_WR_Reg(COM7,0x06);     //设置为VGA模式
  15.         SCCB_WR_Reg(HSTART,0x23);   //水平起始位置
  16.         SCCB_WR_Reg(HSIZE,0xA0);    //水平尺寸
  17.         SCCB_WR_Reg(VSTRT,0x07);    //垂直起始位置
  18.         SCCB_WR_Reg(VSIZE,0xF0);    //垂直尺寸
  19.         SCCB_WR_Reg(HREF,0x00);
  20.         SCCB_WR_Reg(HOutSize,0xA0); //输出尺寸
  21.         SCCB_WR_Reg(VOutSize,0xF0); //输出尺寸
  22.     }
  23.     else
  24.     {
  25.         sx=(320-width)/2;
  26.         sy=(240-height)/2;
  27.         SCCB_WR_Reg(COM7,0x46);     //设置为QVGA模式
  28.         SCCB_WR_Reg(HSTART,0x3f);   //水平起始位置
  29.         SCCB_WR_Reg(HSIZE, 0x50);   //水平尺寸
  30.         SCCB_WR_Reg(VSTRT, 0x03);   //垂直起始位置
  31.         SCCB_WR_Reg(VSIZE, 0x78);   //垂直尺寸
  32.         SCCB_WR_Reg(HREF,  0x00);
  33.         SCCB_WR_Reg(HOutSize,0x50); //输出尺寸
  34.         SCCB_WR_Reg(VOutSize,0x78); //输出尺寸
  35.     }
  36.     raw=SCCB_RD_Reg(HSTART);
  37.     temp=raw+(sx>>2);//sx高8位存在HSTART,低2位存在HREF[5:4]
  38.     SCCB_WR_Reg(HSTART,temp);
  39.     SCCB_WR_Reg(HSIZE,width>>2);//width高8位存在HSIZE,低2位存在HREF[1:0]
  40.      
  41.     raw=SCCB_RD_Reg(VSTRT);
  42.     temp=raw+(sy>>1);//sy高8位存在VSTRT,低1位存在HREF[6]
  43.     SCCB_WR_Reg(VSTRT,temp);
  44.     SCCB_WR_Reg(VSIZE,height>>1);//height高8位存在VSIZE,低1位存在HREF[2]
  45.      
  46.     raw=SCCB_RD_Reg(HREF);
  47.     temp=((sy&0x01)<<6)|((sx&0x03)<<4)|((height&0x01)<<2)|(width&0x03)|raw;
  48.     SCCB_WR_Reg(HREF,temp);
  49.      
  50.     SCCB_WR_Reg(HOutSize,width>>2);
  51.     SCCB_WR_Reg(VOutSize,height>>1);
  52.      
  53.     SCCB_RD_Reg(EXHCH);
  54.     temp = (raw|(width&0x03)|((height&0x01)<<2));
  55.     SCCB_WR_Reg(EXHCH,temp);
  56. }
复制代码


在VGA模式 640*480下 几个寄存器的值(十进制)是这样的:HSTRT = 35 HSIZE = 160 VSTRT = 7 VSIZE = 240 HREF = 0 HOutSize = 160 VOutSize = 240 EXHCH = 0
子啊480*240下几个寄存器的值是这样的:HSTRT = 55 HSIZE = 120 VSTRT = 67 VSIZE = 120 HREF = 0 HOutSize = 120 VOutSize = 120 EXHCH = 0
请问论坛里有同学知道这个为什么关于分辨率的这几个寄存器要这么配置吗,看了好久手册也没找到。困扰了好几天。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。