一、字节标志的注意点

由于摄像头的输出是RGB56格式,所以需要将两帧的数据进行拼接,之后送到上位机进行显示。

 reg    byte_flag;

 always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
byte_flag <= ;
else if(cmos_href_r)
byte_flag <= ~byte_flag;
else
byte_flag <= ;
end

上面always块是对拼接的两帧数据设置一个标志信号,在byte_flag==1时进行拼接,既然要进行拼接,就需要将数据进行同步寄存,故有

always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
cmos_data_d0 <= 'd0;
else if(cmos_href_r)
cmos_data_d0 <= cmos_data_r; //MSB -> LSB
else if(~cmos_href_r)
cmos_data_d0 <= 'd0;
end

将当前的摄像头输出数据cmos_data_r寄存到cmos_data_d0,相当于延迟了一个时钟。

那么,在什么时候进行拼接,就是在byte_flag==1时,可是需要注意第一个always块的byte_falg赋值是在cmos_pclk_i的下一个时钟的上升沿完成,在第一个always块结束时byte_flag还是0,需要等待byte_falg==1,所以第三个always块

reg [:] rgb565;
always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
rgb565 <= 'd0;
else if(cmos_href_r&byte_flag)
rgb565 <= {cmos_data_d0,cmos_data_r}; //MSB -> LSB
else if(~cmos_href_r)
rgb565 <= 'd0;
end

上述always块等待byte_flag变为高电平。当byte_flag==1时候进行两帧数据拼接。

由于数据需要拼接,拼接完毕后的数据才是有效数据,那么必然需要一个标志作为输出有效信号,也就是表明此时数据有效的信号,所以存在以下代码块:

reg    byte_flag_r0;
always@(posedge cmos_pclk_i)
begin
if(!rst_n_reg[])
byte_flag_r0 <= ;
else
byte_flag_r0 <= byte_flag;
end assign clk_ce =out_en? byte_flag_r0:'b0;

为什么需要定义byte_flag_r0将byte_flag延时一个像素时钟呢?因为byte_flag_r0比byte_flga延时一个像素时钟,在这个延时的时钟过程中,完成数据的拼接,当完成数据拼接后,正好此时的数据有效且byte_flag_r0==1,故将byte_flag_r0作为输出有效标志。

将上面的第一个第二个always块写在一起更容易明白,可参考小梅哥例程中的配置方式,

    //capture and sync RGB565 cmos_din
reg [:] cmos_din_r;
reg [:] cmos_frame_data_r;
reg byte_flag;
always@(posedge cmos_pclk or negedge rst_n)
if(!rst_n) begin
cmos_din_r <= ;
byte_flag <= ;
cmos_frame_data_r <= ;
end
else if(cmos_href) begin
byte_flag <= ~byte_flag;
cmos_din_r <= cmos_din;
if(byte_flag == 'b1)
cmos_frame_data_r <= {cmos_din_r, cmos_din}; //MSB -> LSB
else
cmos_frame_data_r <= cmos_frame_data_r;
end
else begin
cmos_din_r <= ;
byte_flag <= ;
cmos_frame_data_r <= cmos_frame_data_r;
end

(二)、此外,在代码案例中,存在前n个帧数据丢弃的情况,目前见过10帧、12帧、15帧,其作用个人理解为预留出5640摄像头的IIC配置初始化过程。

OV5640摄像头配置一些值得注意的关键点(三)的更多相关文章

  1. ov5640摄像头设备驱动

    http://www.cnblogs.com/firege/p/5806121.html  (驱动大神) http://blog.csdn.net/yanbixing123/article/detai ...

  2. FPGA配置OV5640摄像头及RGB图像数据采集

    本文设计思想采用明德扬至简设计法.在做摄像头数据采集处理之前,需要配置OV5640传感器内部寄存器使其按要求正常工作,详细内容请参见<OV5640自动对焦照相模组应用指南>.首先要关注OV ...

  3. 第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

    第46章     DCMI—OV5640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...

  4. 利用AXI VDMA实现OV5640摄像头采集

    利用AXI VDMA实现OV5640摄像头采集 导读:摄像头采样图像数据后经过VDMA进入DDR,通过PS部分控制,经过三级缓存,将DDR中保持的图形数据通过VDMA发送出去.在FPGA的接收端口产生 ...

  5. 转:浅谈CSS在前端优化中一些值得注意的关键点

    前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...

  6. 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)

    [项目管理和构建]十分钟教程,eclipse配置maven + 创建maven项目(三) 上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合 ...

  7. OV5640摄像头的数据处理配置流程(一)

    module RGB_init( //系统信号输入(时钟+复位) input cmos_clk_i, //模块控制时钟 input rst_n_i, //系统复位信号 //OV5640输出信号(从56 ...

  8. 利用AXI VDMA实现OV5640摄像头采集笔记(二)

    导读:摄像头采样图像数据后经过VDMA进入DDR,通过PS部分控制,经过三级缓存,将DDR中保持的图形数据通过VDMA发送出去.在FPGA的接收端口产生VID OUT时序驱动HDMI显示器显示图形. ...

  9. 海康摄像头配置固定IP

    前言 首先要海康设备连接好网线,电脑客户端跟海康设备在同一个局域网络. 1.直接在海康网站下载SADP工具软件,安装SADP工具,如图所示: 2.安装成功后,桌面的出现设备网络搜索, 面板介绍:这里将 ...

随机推荐

  1. Mybatis-Plus学习.,简化你的开发,提升开发效率.

    Mybatis-Plus学习以及实践 简介 参考网址 开发环境 开始开发 - 配置pom.xml - Dao/Service/Entity - 基本方法 - 查询类 - 更新类 分页插件 - pom. ...

  2. navicat工具 pymysql模块

    目录 一 IDE工具介绍(Navicat) 二 pymysql模块 一 IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navi ...

  3. Java 网络爬虫,就是这么的简单

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...

  4. 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)

    apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值 ...

  5. 一个基于protobuf的极简RPC

    前言 RPC采用客户机/服务器模式实现两个进程之间的相互通信,socket是RPC经常采用的通信手段之一.当然,除了socket,RPC还有其他的通信方法:http.管道...网络开源的RPC框架也比 ...

  6. 安装vant2.2.7版本报错These dependencies were not found: vant/es/goods-action-big-btn in ./src/config/vant.config.js......

    一.问题 前天,在使用vant的checkbox复选框的时候,注意到新增加一个全选功能,通过 ref 可以获取到 CheckboxGroup 实例并调用实例方法.于是我就想用这个,但是按照上面的示例写 ...

  7. 三天讲透SpringBoot-初识基础使用

    这次我们来说一下我们的SpringBoot,现在SpringBoot已经成为趋势,在我这里我用三篇文章的形式来讲清楚我们的SpringBoot,大致分为,第一篇讲搭建,基本使用,第二篇三方集成,自动装 ...

  8. JavaScript中闭包的使用和各种继承介绍

    一.什么是闭包?     (1)闭包的概念:a.闭包就是函数嵌套时,让局部变量变成自由变量的环境,是一种让局部变量进化的方式.                 b.定义在一个函数内部的函数.      ...

  9. spring-boot-plus XSS跨站脚本攻击处理

    XSS跨站脚本攻击处理 XSS:Cross Site Scripting 跨站脚本攻击(XSS),是目前最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当 ...

  10. C-01 手写数字识别

    目录 手写数字识别应用程序 一.导入模块 二.图像转向量 三.训练并测试模型 四.模型转应用程序 4.1 展示图片 4.2 处理图片 4.3 预测图片 更新.更全的<机器学习>的更新网站, ...