基于WINCE6.0+S3C2443的camera驱动

********************************LoongEmbedded************************

作者:LoongEmbedded(kandi)

时间:2011.02.13

类别:WINCE 驱动开发

********************************LoongEmbedded************************

 

 

备注:camera sensor:OV7950,LCD:分辨率480*272,解码器:TVP5150

 

1.  Camera驱动的架构

先是摄像头传感器OV7950抓取并输出CMOS的NTSC模拟信号到视频解码器TVP5150A,然后TVP5150A对输入的NTSC视频数据解码,解码之后输出ITU-R BT.656数字视频信号给S3C2443的camera接口,接着是camera接口的P或C通道的DMA把视频数据复制到指定的内存处,最后是camera驱动从这指定的内存处取出视频数据并且拷贝到LCD显示的buffer中,这样就可以看到摄像头获取的图像了。

图1

 

2.  camera电路设计部分

基于WINCE6.0+S3C2443的camera驱动_第1张图片

图2

CPU和TVP5150的硬件连接关系

IICSCL     --------->GPE14

IICSDA     --------->GPE15

CAMDATA0   --------->GPJ0

CAMDATA1   --------->GPJ1

CAMDATA2   --------->GPJ2

CAMDATA3   --------->GPJ3

CAMDATA4   --------->GPJ4

CAMDATA5   --------->GPJ5

CAMDATA6   --------->GPJ6

CAMDATA7   --------->GPJ7

CAMPCLK    --------->GPJ8

CAMVSYNC   --------->GPJ9

CAMHREF    --------->GPJ10

VIDEO_PDN  --------->GPL8

CAMRESET   --------->GPJ12

 

3.  TVP5150

3.1 TVP5150A的主要描述

 

TVP5150是TI公司的一种可编程视频输入处理芯片,采用CMOS工艺。内部包含两路模拟处理通道,能实现抗混叠滤波、9位A/D转换、自动箝位、自动增益控制(AGC)、时钟发生(CGC)、多制式解码、亮度,对比度,饱和度控制(BCS)和多标准VBI数据解码等功能。

它可以接收2路复合视频信号(CVBS)或1路S-Video信号,TVP5150将输入的模拟视频信号解码为符合ITU-R BT656标准的8位4:2:2数字YCbCr信号(同步信号内嵌于数据流中串行输出,这样情况下可以不使用TVP5150的VSYNC和HSYNC信号),也可以输出8位4:2:2的ITU-R BT.601信号(同步信号分离,单独引脚与数据流并行输出,这样情况需要使用VSYNC和HSYNC信号来同步视频数据的输出,输出到camera interface)。

 

TVP5150输出格式有两种:8-bit 4:2:2格式和8-bit ITU-R BT.656格式。

两种格式的区别:8-bit 4:2:2格式需要输出行、场同步信号,数据总线上只有图像数据;ITU-R BT.656格式不需要输出行、场同步信号,该格式的行、场起始与结束都是通过嵌入到图像数据中的标志码来指示的,因此该格式又称为嵌入同步方式。

 

3.2 TVP5150主要引脚的描述

AIP1A

模拟信号输入端,可作为composite(混合)视频信号的输入端,在此设计中就是用这个引脚来接受OV7950输出的NTSC模拟视频信号;也可以作为S-video(单一视频信号)的luma(亮度)信号端。

 

AIP1B

模拟信号输入端,可作为composite(混合)视频信号的输入端,在此设计中没用此引脚用于模拟信号的输入;也可以作为S-video(单一视频信号)的chroma(色度)信号端。

 

AVID

有效视频数据指示信号(Active video indicator), AVID低电平时输出数据无效,高电平有效。这样就提供了一种控制TVP5150输出视频数据带宽的方法。通过寄存器设置,控制AVID的开始和结束时机,同时对VBLK信号起始时机进行控制,那么就能从一帧图像中截取某些部分输出,如下图所示。

基于WINCE6.0+S3C2443的camera驱动_第2张图片

图3

此设计中没有用到AVID这个引脚,但建议使用。

 

FID/GLCO

FID为奇偶场指示信号(odd/even field indicator)或垂直锁定指示(vertical lock indicator),在场同步信号(VSYNC)下降沿跳变;GLCO为genlock control,串行输出PLL的信息。

 

HSYNC

水平(也即行)同步信号,在TVP5150输出的格式是8-bit 4:2:2格式时,会用到这个同步信号。

 

VSYNC

垂直(也即帧)同步信号,在TVP5150输出的格式是8-bit 4:2:2格式时,会用到这个同步信号。

 

PCLK/SCLK

系统时钟,是像素时钟频率的一倍或者2倍。可以通过对TVP5150的0F寄存器的第0位来选择,见下图所示:

基于WINCE6.0+S3C2443的camera驱动_第3张图片

图4

下图是0F寄存器的相关描述

基于WINCE6.0+S3C2443的camera驱动_第4张图片

图5

其中PCLK/SCLK脚时钟信号可对应输出13.5 MHz和27 MHz两种频率。

 

PDN

Power-down引脚,低电平有效,也就是说在TVP5150正常工作的模式下,必须保证PDN这个引脚为高电平,一般由CPU的某一个GPIO口来控制这个引脚。

 

RESETB

复位引脚,低电平有效,只有在PDN=1的时候才能有效使用RESETB的功能,因为PDN=1的时候硬件关闭了TVP5150模块。当RESETB引脚被拉低的时候,会复位TVP5150所有寄存器并且重启TVP5150内部处理器,RESETB和PDN引脚一般是结合使用,如下所示:

基于WINCE6.0+S3C2443的camera驱动_第5张图片

图6

 

SCL

I2C串行时钟引脚,在读写TVP5150的寄存器的值的时候是基于此时钟来读写的。

 

SDA

I2C串行数据引脚,用于读写TVP5150的寄存器的值。

 

YOUT[6:0]

符合ITU-R BT.656标准的熟悉信号及YCbCr 4:2:2信号输出引脚。

 

YOUT7/I2CSEL

YOUT7:ITU-R BT.656标准的熟悉信号及YCbCr 4:2:2信号输出的最高位。

I2CSEL:I2C从地址选择端,可以通过连接上拉或下拉电阻来获得所需要的从地址,当I2CSEL=1时,I2C从地址是0xBA,当I2CSEL=0时,I2C从地址是0xB8。TVP5150是作为从I2C总线的从设备存在的,这也是由TVP5150的设计决定的,但如何去理解TVP5150作为从设备呢,因为我们是通过I2C总线来读写TVP5150寄存器的值的,而这些动作都是有CPU来发起,通过I2总线来读写的,所以TVP5150是作为I2C系统的从设备存在的。

 

3.3 TVP5150作为I2C系统从设备地址的确定

I2CSEL=1时的设计图如下:

基于WINCE6.0+S3C2443的camera驱动_第6张图片

图7

 

I2CSEL=0时的设计图如下

基于WINCE6.0+S3C2443的camera驱动_第7张图片

图8

确定了从地址之后,就要确定相应的读写地址,可以根据下面两个表来确定:

写地址的确定

 

基于WINCE6.0+S3C2443的camera驱动_第8张图片

图9

读地址的确定

 

图10

 

4.  S3C2443的camera接口

本设计中,TVP5150输出的是ITU-R BT.656格式的视频信号,也就是说我们输入ITU-R BT.656格式的视频数据给camera接口。

 

4.1 camera接口的功能框图

基于WINCE6.0+S3C2443的camera驱动_第9张图片

图11

本设计主要是用到P通道,所以后面将主要描述P通道的工作。

 

4.2 Camera接口支持的两种视频数据

基于WINCE6.0+S3C2443的camera驱动_第10张图片

图12

 

 

5.  WINCE+s3c2443下camera驱动

下面就结合代码来分析camera驱动的工作内容以是如何实现的

5.1动态内存的分配

基于WINCE6.0+S3C2443的camera驱动_第11张图片

图13

其中Preview_Mem_Size大小的定义如下

#define Preview_Mem_Size    (720*288*2*4)

为什么是这个表达式呢,因为TVP5150输出的是ITU-R BT.656格式的数字视频流,所以其视频数据的分辨率是720*288,那为什么还要*2呢?因为我们的LCD驱动的RGB格式是16位的,而16位是2个字节,所以要*2,那么720*288*2就是进来camera接口的一个视频帧的字节大小。*2之后为什么还要*4呢?这有camera接口部分对视频帧对应的内存机制有关,见camera接口的相关描述

基于WINCE6.0+S3C2443的camera驱动_第12张图片

图14

是因为帧内存是由4个ping-pong内存组成,每个在这里大小是720*288*2个字节。

 

5.2 动态申请camera中断的逻辑中断号

基于WINCE6.0+S3C2443的camera驱动_第13张图片

图15

5.3 初始化camera的I2C读写接口

基于WINCE6.0+S3C2443的camera驱动_第14张图片

图16

 

5.4camera接口的初始化

基于WINCE6.0+S3C2443的camera驱动_第15张图片

图17

5.5 camera接口的复位

基于WINCE6.0+S3C2443的camera驱动_第16张图片

图18

结合下图可以更好理解上面的代码

基于WINCE6.0+S3C2443的camera驱动_第17张图片

图19

 

5.6 Camera接口的工作时钟

我们先来看camera接口对其时钟的描述

基于WINCE6.0+S3C2443的camera驱动_第18张图片

图20

下图是对camera接口提供时钟源及camera接口为external camera processor提供时钟源的代码

基于WINCE6.0+S3C2443的camera驱动_第19张图片

图21

 

 

5.7 复位TVP5150

基于WINCE6.0+S3C2443的camera驱动_第20张图片

图22

下图是CIGCTRL寄存器相关位的描述

基于WINCE6.0+S3C2443的camera驱动_第21张图片

图23

下面就是通过CAMRESET引脚来控制TVP5150模块的复位

基于WINCE6.0+S3C2443的camera驱动_第22张图片

图24

 

5.8 通过I2C驱动提供的读写函数读写TVP5150的相关寄存器

基于WINCE6.0+S3C2443的camera驱动_第23张图片

图25

下图是需要写TVP5150模块的寄存器的集合

基于WINCE6.0+S3C2443的camera驱动_第24张图片

图26

5.9 初始化camera接口的寄存器

基于WINCE6.0+S3C2443的camera驱动_第25张图片

图27

下图是图像缩放示例

基于WINCE6.0+S3C2443的camera驱动_第26张图片

图28

基于WINCE6.0+S3C2443的camera驱动_第27张图片

图29

基于WINCE6.0+S3C2443的camera驱动_第28张图片

图30

基于WINCE6.0+S3C2443的camera驱动_第29张图片

图31

基于WINCE6.0+S3C2443的camera驱动_第30张图片

图32

 

 

S3C2440的camera接口特性及WinCE 下的驱动

http://www.21ic.com/app/computer/201009/65366_2.htm

 

 

wince5.0下Camera驱动程序分析

http://bluefish.blog.51cto.com/214870/58112

 

camera驱动移植总结

http://www.linuxview.net/show.php?id=155

 

TVP5150的低功耗视频解码模块

http://www.jdzj.com/diangong/article/2009-9-7/12471-1.htm

 

 

ITU-R BT.601 /BT.656数字视频标准

http://apps.hi.baidu.com/share/detail/18599810


原文地址:

http://blog.csdn.net/loongembedded/article/details/6182506


你可能感兴趣的:(基于WINCE6.0+S3C2443的camera驱动)