zoukankan      html  css  js  c++  java
  • 32、从零开始写CMOS摄像头驱动


    使用的内核:linux-3.4.2

    参考源码:
    第32课_新内核下的I2C驱动i2c1th_i2c_new_device
    第2课第1.1.7节文档和图片(从0写USB摄像头)myuvc


    设备地址:
    写 -- 0x42(01000010)
    读 -- 0x43(01000011)

    8bit的地址 = 7bit设备地址 + 1bit的读/写控制位

    设备地址 = 0100001 = 0x21


    问:为什么需要复位摄像头模块?
    答:IIC能够正常操作CMOS摄像头模块内部的寄存器的前提是:
    -- 提供符合它需求的系统时钟(CAMCLK)
    -- 需要给它一个复位信号

    问:怎样才能复位摄像头模块?
    答:通过操作CAMIF控制器中相应的寄存器,让CAMRST发出复位
    信号,从而复位摄像头模块,具体操作见驱动源码。

    举例:说明CIPRCTRL寄存器
    48字节(DMA需要传输的长度) = 10字节(DMA一次能传输的最大长度(Main burst length)) + 10字节 + 10字节 + 10字节 + 8字节(remain burst length)

    burst length必须是2/4/8/16,不管是Main burst length或者remain burst length,计算方法见代码,计算的变量是使用一行有多少字在计算

    /*
    CIPRSCPRERATIO:
    bit[31:28]: 预览缩放的变化系数(SHfactor_Pr)
    bit[22:16]: 预览缩放的水平比(PreHorRatio_Pr)
    bit[6:0]: 预览缩放的垂直比(PreVerRatio_Pr)

    CIPRSCPREDST:
    bit[27:16]: 预览缩放的目标宽度(PreDstWidth_Pr)
    bit[11:0]: 预览缩放的目标高度(PreDstHeight_Pr)

    CIPRSCCTRL:
    bit[29:28]: 告诉摄像头控制器(图片是缩小、放大)(ScaleUpDown_Pr)
    bit[24:16]: 预览主缩放的水平比(MainHorRatio_Pr)
    bit[8:0]: 预览主缩放的垂直比(MainVerRatio_Pr)

    bit[31]: 必须固定设置为1
    bit[30]: 设置图像输出格式是RGB16、RGB24
    bit[15]: 预览缩放开始
    */
    cmos_ov7740_calculate_scaler_info();缩放函数的具体计算方法可以见s3c2440手册Figure23-12图的下面

    驱动测试条件:
    1.
    要有IIC总线驱动;
    要有LCD驱动;

    2.
    要配置上V4L2相关选项
    Device Drivers --->
      <*> Multimedia support --->
        <*> Video For Linux
        [*] Video capture adapters (NEW) --->
            [*] V4L USB devices (NEW) --->
            [*] V4L platform devices --->

  • 相关阅读:
    用tcpdump 分析如何建立与关闭tcp连接 邓维 博客园
    Javascript基础与面向对象基础~Javascript中的语句如何被执行,如何改变执行顺序
    Javascript基础与面向对象基础~第一讲 啥叫编程,啥叫程序员
    将不确定变为确定~本机是否可以调试带域名的网站
    将不确定变为确定~为什么发布项目时用release环境更好些
    c/c++ 调用dos 命令
    C++基类与派生类的转换
    c++ max_elment和min_element
    c++ 无法链接的外部变量
    转:c++ 基类转换为派生类
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8847399.html
Copyright © 2011-2022 走看看