ISP DMA TEST

news/2025/9/29 10:59:50/文章来源:https://www.cnblogs.com/chivalrySun/p/19118248

定义理解

Camera ISP 场景

Camera ISP 场景下在 ISP → Memory 的数据流里:ISP 内部有 DMA 引擎(通常叫 ISP output DMA / Write DMA)。
ISP 出一帧时,数据通过 内部 DMA 硬件写入内存。

一帧传完,ISP 会产生“frame done”中断,有些 SoC 把这个中断叫做 ISP 中断,本质上是 ISP 内部 DMA 完成触发的中断。

也就是说:在 Camera ISP 里,应用看到的中断不是“通用 DMA 控制器的中断”,而是 ISP 内部的帧完成中断。
但它的意义和 DMA 完成中断是一样的:告诉 CPU 有一帧写好了,可以 DQBUF 了。

驱动层处理逻辑

ISP/DMA 完成一帧 → 硬件产生中断 → GIC 送到 CPU。

驱动的中断 handler 被调用。驱动在 handler 里标记该 buffer 已完成 → 之后把它放入 done 队列;
唤醒等待队列(select/poll/unblock DQBUF), 应用 VIDIOC_DQBUF → 成功取到这一帧。
如果中断没来 → buffer 永远不会进 done 队列 → 应用只能报 EAGAIN。

总结

DMA 完成一定会有中断,否则 CPU/驱动不知道哪块 buffer 填好了。
在 ISP 这种专用硬件里,这个中断通常以 ISP frame done IRQ 的形式暴露出来(但实际上就是 DMA 完成事件)。

测试DMA读写模块测试

ISP_APB_DMA_TASK_TYPE

typedef struct  ISP_APB_DMA_TASK_TYPE{uint32_t    task_valid; //1:task enableuint32_t    task_mode ; //0:auto clean task on done. 1:manualuint32_t    task_type ; //0:read task 1:write taskuint32_t    task_lens ; //rd:reg_num-1 wr:reg_num*2-1;uint32_t    task_caddr; //command ddr addressuint32_t    task_daddr; //rd cmd to ddr address
}ISP_APB_DMA_TASK_t;

ISP_APB_DMA_TASK_t 这个结构体其实就是一个 DMA 描述符(task descriptor),用来告诉 ISP 的 DMA 引擎:
要做一个任务(读/写)读/写多少寄存器,数据要从哪里来 ,要到哪里去;

读任务(task_type = 0)

DMA 任务作用:从寄存器 → DDR
task_caddr
存放要读的寄存器地址列表。
例如:0x1000, 0x1004, 0x1008 ...

DMA 会依次按照这些寄存器地址去 APB 读寄存器。

task_daddr
DMA 把读出来的数据写到 DDR 里的起始地址(即 task_daddr 指定的位置)。
最终 DDR 里的数据会长这样:
[reg0_value][reg1_value][reg2_value]...

写任务(task_type = 1)工作中一般用到写任务

DMA 任务作用:从 DDR → 寄存器
task_caddr :存放命令对: (寄存器地址 + 要写的值)。
通常一个写命令需要两个 word:[addr0][data0][addr1][data1][addr2][data2]...;所以 task_lens = reg_num * 2 - 1

task_daddr:在 写任务 中通常不用(或者保留),因为数据已经和地址一起放在 task_caddr 的 DDR buffer 里了。
DMA 引擎只需要去 task_caddr 取 (寄存器地址, 数据) 对(根据实际要求填写buffer),依次写入寄存器。

对比总结

字段 读任务(read) 写任务(write)
task_lens reg_num - 1 reg_num * 2 - 1
task_caddr 存放寄存器地址列表 存放 (寄存器地址, 数据) 对,或者(数据,寄存器地址、或者地址偏移量等)
task_daddr 存放寄存器值的 DDR 地址 通常不用(数据在 caddr 里)

注释

task_caddr = 任务的命令区(告诉 DMA 要操作哪些寄存器 / 要写哪些数据)
task_daddr = 数据存放区(只在读任务时真正使用,写的时候通常不用)

  • RDMA(读任务,task_type=0)

reg_num = 你要读的寄存器个数。
DMA 控制器每次按 "一个寄存器的宽度(比如 4字节)" 去搬数据。
所以 task_lens 配置时,告诉硬件 "我要读多少个寄存器 - 1"。task_lens = reg_num - 1;

比如要读 4 个寄存器,就配 task_lens = 3。
原因是很多硬件寄存器里的长度字段定义是 "实际长度 - 1",因为 0 就代表 1 个元素,避免出现歧义。

  • WDMA(写任务,task_type=1)

写的时候不只是写寄存器值,还需要告诉硬件 "写哪个寄存器 + 写的值"。所以一个寄存器写操作,实际上需要 两个 32-bit 命令字:
地址字段(寄存器地址)4字节 + 数据字段(要写的值) 4字节
因此 一个寄存器对应两个 word。task_lens = reg_num * 2 - 1;

比如要写 4 个寄存器,需要 8 个 word → task_lens = 7。

举例说明点击查看代码

*//wr src0
./devmem3 w 0x78c40000 0x1234567 //第一个四字节,先写值再写地址;
./devmem3 w 0x78c40004 0x000000 //第二个四字节, 0xff00 0000 基地址,编译地址0x000000 ,最终地址是 0xff00 0000  ./devmem3 w 0xff010404 0x0 //MIPI_DMA_CTL0
./devmem3 w 0xff0100c8 0x0
./devmem3 w 0xff0100cc 0x0
./devmem3 w 0xff010400 0x100109./devmem3 w 0xff0104c0 0x1
./devmem3 w 0xff0104c0 0x5
./devmem3 w 0xff0100c0 0x0./devmem3 w 0xff0104c4 0x78c40000 //task_caddr
./devmem3 w 0xff0104cC 0xC0000001 // MIPI_DMA_SRC0_PING_TASK0 读写属性 读写长度等./devmem3 w 0xff010404 0x80000000./devmem3 w 0xff010410 0x0 ./devmem3 w 0xff0100c8 0x1
./devmem3 w 0xff0100c8 0x10001 //MIPI_ISP_RDMA_CTRL0 dma_trig./devmem3 r 0xff000000
./devmem3 r 0xff010408 //读取中断状态 如果完成 则是1 表示中断正常
./devmem3 r 0xff0104cC
=================================================
*//wr src1
./devmem3 w 0xff000000 0x0./devmem3 w 0x78c40000 0x1234567
./devmem3 w 0x78c40004 0x00000./devmem3 w 0xff010404 0x0
./devmem3 w 0xff0100c8 0x2
./devmem3 w 0xff0100cc 0x0
./devmem3 w 0xff010400 0x100109./devmem3 w 0xFF0104F4 0x1
./devmem3 w 0xFF0104F4 0x5
./devmem3 w 0xff0100c0 0x1./devmem3 w 0xFF0104F8 0x78c40000
./devmem3 w 0xff0104cc 0xC0000001./devmem3 w 0xff010404 0x80000000./devmem3 w 0xff010410 0x0./devmem3 w 0xff0100c8 0x1
./devmem3 w 0xff0100c8 0x10001./devmem3 r 0xff000000
./devmem3 r 0xff010408
./devmem3 r 0xff0104cC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于遗传优化的SVM织物瑕疵类型识别matlab仿真 - 实践

基于遗传优化的SVM织物瑕疵类型识别matlab仿真 - 实践2025-09-29 10:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…

完整教程:大模型agent综述:A Survey on Large Language Model based Autonomous Agents

完整教程:大模型agent综述:A Survey on Large Language Model based Autonomous Agentspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

三脚电感在报警器芯片里的实际作用与用法

由芯片上的声音输出端,通过1K电阻,接到三极管基极脚,再通过集电极脚接到三脚电感的第3脚,同时接到蜂鸣片。三脚电感的另外二个脚,长的2脚接到电源正极,1脚直接接到蜂鸣片。这样就能提升音量,,可以与不接三脚电…

莆田外贸自建网站国家建设局网站

Github网址:nagadomi/waifu2x:动漫风格艺术的图像超分辨率 (github.com) 该项目主要讲述的是如何利用预训练的深度学习模型来达到无损扩大收缩和去噪,对于一般训练图像的小伙伴应该很清晰图像经常要通过resize操作固定大小,然后c…

音乐网站模板免费源码哔哩哔哩网站4 3比例怎么做

最近呢小誉收到了一位工作十年的学员投稿,这位学员是2011年从誉天学习HCIE课程并顺利拿证,先后在华为等大厂工作。他想把他这十年的工作经验分享给各位学弟学妹们。 这些经验并非来自于具体的技术实现,而是在架构设计和实施过程中所体会到的一…

洛谷题单指南-进阶数论-P5091 【模板】扩展欧拉定理

原题链接:https://www.luogu.com.cn/problem/P5091 题意解读:求ab % m,b超级大。 解题思路: 大数幂取模问题,通常要用到扩展欧拉定理,下面从欧拉函数开始介绍。 1、欧拉函数 定义:小于等于n的正整数中与n互质的…

jenkins maven nacos springboot profile实现多环境配置

在 Jenkins 构建 Spring Boot 项目时,结合 Maven、Nacos 和 Profile 可以实现多环境(开发、测试、生产)的自动化部署与配置管理。以下是四者的协同工作方式及具体实现步骤: 核心概念与关系Spring Boot Profile:用…

RAG is really dead? 大模型和知识之间的桥梁没了? - spader

作者:SpaderMan 从 RAG 到上下文工程:理性思考 AI 应用开发,以交付业务结果为目标 最近,Latent Space 播客发布了一期标题为["RAG 已死,上下文工程为王"](https://www.latent.space/p/chroma "&qu…

.NET操作Excel:高效材料读写与批量运行

.NET操作Excel:高效材料读写与批量运行pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

【深度解析】从零构建体育数据流水线:足球与篮球数据接入实战

【深度解析】从零构建体育数据流水线:足球与篮球数据接入实战不止于兴趣,更是技术实践 作为一名开发者兼体育爱好者,我始终对数据驱动体育的世界着迷。但不同于普通观众,我们更关心的是:这些数据如何通过技术手段…

Qwen-Image技术报告

原文:https://mp.weixin.qq.com/s/GLEa3fIc67uX9IK50LDeNw 全文摘要本文介绍了一种名为Qwen-Image的图像生成基础模型,它在复杂文本渲染和精确图像编辑方面取得了显著进展。为了解决复杂文本渲染的挑战,作者设计了一…

苏州相城区网站建设渭南市工程建设项目审批网上办事大厅

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

wordpress全站ajax用wordpress仿a站

中介者模式 中介者模式 中介者模式 介绍:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 实现:抽象中介者类,定义一个…

服装设计网上自学课程宁波网站搜索引擎优化

以下文字是钱学森在1990年给汪成为院士的信中对虚拟现实技术的科学意义和未来发展给与的思考和建议,他也提出可以将虚拟现实技术成为灵境技术。

IOS-和安卓-AR-游戏开发指南-全-

IOS 和安卓 AR 游戏开发指南(全)原文:zh.annas-archive.org/md5/eaf1b154611090aa6422cd5e3d6dc2fc 译者:飞龙 协议:CC BY-NC-SA 4.0前言 在本书中,我们将介绍增强现实及其如何使用强大而简单的工具实现。利用 V…

Winform/C# 输出到Release VS中Release模式下生成去掉生成pdb文件

前几天发布项目,有时候就发布那几个dll,但是一个dll同时还有一个pdb文件,而且pdb文件貌似还挺大。 pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的. 在程序发布为r…

成都响应网站建设网站文章标题

一、实验内容与目的 实验要求: 利用CP226实验仪上的小键盘将程序输入主存储器EM,通过指令的执行实现微程序控制器的程序控制。 实验目的: 1.掌握模型机的操作码测试过程; 2.掌握模型机微程序控制器的基本结构以及程序控制的基本原…

表格上传网站建设网游小说

1. 引言 在任何编程语言中,错误处理都是一个至关重要的部分。在 Go 语言中,错误处理方式独具特色,它并没有采用异常处理机制(try-catch),而是通过显式的错误返回值来处理错误。这种方式让代码更加明确、易于维护,也使得错误处理更加透明。 在这篇博客中,我们将深入探…

做外贸好的网站有哪些百度识图在线

目录 0、基本信息1、研究动机2、创新点2.1、核心思想:2.2、思想推导: 3、准备3.1、符号3.2、互信息3.3、JS散度3.4、Deep InfoMax方法3.5、判别器:f-GAN估计散度 4、具体实现4.1、局部-全局互信息最大化4.2、理论动机 5、实验设置5.1、直推式…

校园二手网站开发与设计任务书行政单位单位网站建设

1.实现一个纵横字谜 2.支持14x14的网格 3.可以查看答案 4.猜测错误会提示答案信息 5.从txt读取词汇 6.每次游戏开始 随机生成纵横字谜 n’h