基于WINCE6.0+S3C2443的camera驱动

来源:互联网 发布:重生之君颜网络剧 编辑:程序博客网 时间:2024/03/29 00:30

********************************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电路设计部分

图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信号起始时机进行控制,那么就能从一帧图像中截取某些部分输出,如下图所示。

图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位来选择,见下图所示:

图4

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

图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引脚一般是结合使用,如下所示:

图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时的设计图如下:

图7

 

I2CSEL=0时的设计图如下

图8

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

写地址的确定

 

图9

读地址的确定

 

图10

 

4.  S3C2443的camera接口

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

 

4.1 camera接口的功能框图

图11

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

 

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

图12

 

 

5.  WINCE+s3c2443下camera驱动

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

5.1动态内存的分配

图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接口的相关描述

图14

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

 

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

图15

5.3 初始化camera的I2C读写接口

图16

 

5.4camera接口的初始化

图17

5.5 camera接口的复位

图18

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

图19

 

5.6 Camera接口的工作时钟

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

图20

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

图21

 

 

5.7 复位TVP5150

图22

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

图23

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

图24

 

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

图25

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

图26

5.9 初始化camera接口的寄存器

图27

下图是图像缩放示例

图28

图29

图30

图31

图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


原创粉丝点击