zoukankan      html  css  js  c++  java
  • 基于WINCE6.0+S3C2443的camera驱动

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

    作者:LoongEmbedded(kandi)

    时间:2011.02.13

    类别:WINCE 驱动开发

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

     

     

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

     

    1.  Camera驱动的架构

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

    1

     

    2.  camera电路设计部分

    2

    CPUTVP5150的硬件连接关系

    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的主要描述

     

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

    它可以接收2路复合视频信号(CVBS)1S-Video信号,TVP5150将输入的模拟视频信号解码为符合ITU-R BT656标准的84:2:2数字YCbCr信号(同步信号内嵌于数据流中串行输出,这样情况下可以不使用TVP5150VSYNCHSYNC信号),也可以输出8422ITU-R BT.601信号(同步信号分离,单独引脚与数据流并行输出,这样情况需要使用VSYNCHSYNC信号来同步视频数据的输出,输出到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)下降沿跳变;GLCOgenlock control,串行输出PLL的信息。

     

    HSYNC

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

     

    VSYNC

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

     

    PCLK/SCLK

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

    4

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

    5

    其中PCLKSCLK脚时钟信号可对应输出13.5 MHz27 MHz两种频率。

     

    PDN

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

     

    RESETB

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

    6

     

    SCL

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

     

    SDA

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

     

    YOUT[6:0]

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

     

    YOUT7/I2CSEL

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

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

     

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

    I2CSEL=1时的设计图如下:

    7

     

    I2CSEL=0时的设计图如下

    8

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

    写地址的确定

     

    9

    读地址的确定

     

    10

     

    4.  S3C2443camera接口

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

     

    4.1 camera接口的功能框图

    11

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

     

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

    12

     

     

    5.  WINCE+s3c2443camera驱动

    下面就结合代码来分析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

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

     

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

    15

    5.3 初始化cameraI2C读写接口

    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

     

     

    S3C2440camera接口特性及WinCE 下的驱动

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

     

     

    wince5.0Camera驱动程序分析

    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

     

     

  • 相关阅读:
    经典的博客有价值的博客
    关于前后端接口的异常的处理
    java重新学习记载的一些资料。
    java重新开始学习
    MFC Socket
    修复 SQLite 数据库文件
    VC++源文件编码
    VC++ 中使用 std::string 转换字符串编码
    Windows代码页、区域
    UTF-7编码
  • 原文地址:https://www.cnblogs.com/liang123/p/6325768.html
Copyright © 2011-2022 走看看