【DVP接口】0v5640 的DVP接口设计分析(软件)

谁来救救我…
【DVP接口】0v5640 的DVP接口设计分析(硬件)
【DVP接口】0v5640 的DVP接口设计分析(软件)

0. 个人简介 && 授权须知

image-20230911133730620

📋 个人简介

  • 💖 作者简介:大家好,我是喜欢记录零碎知识点的菜鸟打工人。😎
  • 📝 个人主页:欢迎访问我的博客主页🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:嵌入式开发专栏 🍁 🍁
  • 💬格言:写文档啊不是写文章,重要的还是直白!🔥

转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者

若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:积跬步、至千里

image-20230911133724204

1. buf 队列管理

VIN模块中的队列管理,参考了LinuxV4L2框架,通过 struct vb_queue 结构中的两个Buf队列来管理,DVP驱动中还需要维护一个buf_list来配合DVP控制器的地址更新。 整个Buf流转的过程如下图:

在这里插入图片描述
在这里插入图片描述

2. 初始化

2.1 硬件接口初始化

在这里插入图片描述

2.1.1 行中断 HNUM 配置

设置DVP控制器接收 10 行数据的后,产生中断,10href 下降沿的个数
硬件产生中断以后,软件上更新buf地址在新的内存空间接收数据

在这里插入图片描述

2.1.2 注册中断服务函数

在这里插入图片描述

2.2 申请内存空间

g_mpp_dvp_buf 是内存空间的首地址
在这里插入图片描述

2.3 软件数据结构初始化

2.3.1 【3个】链表的初始化

vb_queue,用于描述 buf 的数据结构

// 用于描述 buf 的数据结构
struct vb_queue {
    aicos_sem_t         done;                         // 信号量

    struct vb_buffer    bufs[VIN_MAX_BUF_NUM];       // buf 大小
    unsigned int        num_buffers;                 // buf 个数

    struct list_head    queued_list;                 // 空闲链表
    unsigned int        queued_count;                // 空闲节点个数
    unsigned int        owned_by_drv_count;          // 驱动使用的个数

    struct list_head    done_list;                  // 填充了视频数据的 链表

    unsigned int        streaming:1;                // 正在开始运行视频流
    unsigned int        error:1;                    
    unsigned int        waiting_in_dqbuf:1;
};

DVP 控制器设备管理信息【三个链表】的初始化

在这里插入图片描述

设置视频的输入和输出格式
在这里插入图片描述
在这里插入图片描述

3. 用户申请 video buf

在这里插入图片描述
参考 【2.2 申请内存空间】小节,最终 binfo指向了 g_mpp_dvp_buf 内存空间的首地址。
代码中设定的参数为:
在这里插入图片描述
video_buf 参数的赋值为:

赋值过程为:
在这里插入图片描述

4. buf 入列

我们申请了 3buf ,每个 buf 大小为 640*480*2,将三个buf入列,最终加入到
vb_queue 这个数据结构中

在这里插入图片描述
在这里插入图片描述

入列之后,链表为,此时所有 buf 都在空闲链表中

在这里插入图片描述

在这里插入图片描述

5. 启动 stream

在这里插入图片描述

下面实在分析不下去了,脑子都要炸了

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值