|
VPIF例程正常运行可以看到画面了,不过信号是RGB565输出的
每个像素是2个字节,每行800个像素共计1600自己,600行,所以image的空间是800*600*2字节。
在CCS的tool->Image Analyzer中按上面的参数设置RGB格式就可以看到完整图像了
由于我现在开发的应用只需要红色通道的数据,所以想拿到RAW格式。查了OV2640的datasheet,查到可以修改两个寄存器达到这个目的:
0xFF=0x00时:
0xC2=0x01 将DSP的RAW输出是能
0xDA=0x04 将输出格式设置为RAW10
我们的开发板只接了高8位,所以应该每个像素点就是1个字节
根据OV2640 DATASHEET提供信息,默认例程800*600的SVGA分辨率,序列信息应该
第1行:GBGBGBGB……GBGBGB共800个像素点
第2行:RGRGRGRG……RGRGRG共800个像素点
第3行:(与第1行相同)
………………
………………
第600行:RGRGRGRG……RGRGRG共800个像素点
这里的每一个像素是单色的1字节,理论上这时候的数据应该是800*600字节,是原例程的一半
所以初始化VPIF的时候,需要修改一个参数:
---------------------------------------------------------------
/* 初始化VPIF buffer地址*/
VPIFCaptureFBConfig(SOC_VPIF_0_REGS, VPIF_CHANNEL_0,
VPIF_TOP_FIELD, VPIF_LUMA,(unsigned int)&image[0], 800);
---------------------------------------------------------------
用Image Analyzer的RAW格式设置格式如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <java version="1.6.0_13" class="java.beans.XMLDecoder">
- <object class="com.ti.dvt.ui.views.core.ImageProp">
- <void property="delegateProp">
- <object class="com.ti.dvt.ui.views.core.BayerProp">
- <void property="componentMask">
- <long>255</long>
- </void>
- <void property="lineCount">
- <int>600</int>
- </void>
- <void property="lineOrder">
- <string>even B lines</string>
- </void>
- <void property="lineStride">
- <int>800</int>
- </void>
- <void property="pixelCountPerLine">
- <int>800</int>
- </void>
- <void property="pixelOrder">
- <string>GR/BG</string>
- </void>
- <void property="pixelStride">
- <int>1</int>
- </void>
- <void property="startAddress">
- <string>image</string>
- </void>
- </object>
- </void>
- <void property="scrollLock">
- <boolean>true</boolean>
- </void>
- </object>
- </java>
复制代码
可以在CCS里看到正确的图像了。感觉超棒啊!
照这个思路,我还想要拿到1600*1200的RAW格式输出数据。
于是把OV6240官方app手册里的UXGA例程如法炮制:
使用官方配置,接收的YUYV的数据,ImageAnalyzer配置如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <java version="1.6.0_13" class="java.beans.XMLDecoder">
- <object class="com.ti.dvt.ui.views.core.ImageProp">
- <void property="delegateProp">
- <object class="com.ti.dvt.ui.views.core.YUVProp">
- <void property="UMask">
- <long>16711680</long>
- </void>
- <void property="UPixelStride">
- <int>4</int>
- </void>
- <void property="VMask">
- <long>255</long>
- </void>
- <void property="VPixelStride">
- <int>4</int>
- </void>
- <void property="YMask">
- <long>65280</long>
- </void>
- <void property="YPixelStride">
- <int>2</int>
- </void>
- <void property="YUVOrder">
- <string>YUYV</string>
- </void>
- <void property="lineCount">
- <int>1200</int>
- </void>
- <void property="lineStride">
- <int>3200</int>
- </void>
- <void property="pixelCountPerLine">
- <int>1600</int>
- </void>
- <void property="readAs">
- <int>16</int>
- </void>
- <void property="startAddress">
- <string>image</string>
- </void>
- </object>
- </void>
- </object>
- </java>
复制代码 在CCS里能显示完整图像,但是整个画面是偏绿的,不知道是不是YUV的顺序问题,暂时不管
然后改了如下寄存器
write_SCCB(0xda, 0x04); // 0x00
write_SCCB(0xC2, 0x01);
尝试一:将VPIF的接收缓存改成1600,结果:VPIF无法完整接收帧
尝试二:将VPIF的接收缓存改为3200,结果:VPIF能完成数据,但是ImageAnalyzer要配置成1600*2400才能显示图像,颜色还是很奇怪
OV2640的手册提供的信息很残缺,一堆Reserve,在google和baidu上搜了一圈,发现几乎没有人做RAW格式输出的尝试,为啥?
希望有人能帮忙看看!!!先谢谢
|
|