2 XDMA IP中断
三种中断
1. Legacy
- 定义:Legacy 中断是传统的中断处理方式,使用物理中断线(例如 IRQ)来传递中断信号。
- 缺点:
- 中断线数量有限,通常为 16 条,限制了可连接设备的数量。
- 中断处理可能会导致中断风暴,影响系统性能。
- 不支持多处理器系统中的负载均衡。
- 使用场景:主要用于旧设备和不支持 MSI 或 MSI-X 的硬件。
INTA, INTB, INTC, or INTD 区别
- 优先级顺序:从高到低一般是 INTA > INTB > INTC/INTD。不过,具体的优先级也可以在系统 BIOS(Basic Input - Output System)或操作系统的设备管理部分根据设备的实际重要性和使用场景进行调整。
- 应用场景倾向:INTA 倾向于用于对实时性和性能要求高的关键设备,INTB 用于实时性要求稍低的设备,而 INTC 和 INTD 更多地用于对中断响应要求不高、数据更新频率较低或不太关键的设备。这种区分有助于在复杂的 PCI 系统中合理分配中断资源,以满足不同设备的需求
2. MSI(Message Signaled Interrupts)
- 定义:MSI 是一种通过消息而不是传统的中断线来发送中断信号的机制。
- 优点:
- 减少了中断线的数量,支持更高的设备数量。
- 提高了中断的处理效率,减少了中断风暴的可能性。
- 可以支持多处理器系统中的负载均衡。
- 最多32个
- 使用场景:常用于现代设备,尤其是 PCI 和 PCIe 设备。
- 默认情况下,MSI 功能是启用的,且启用了 1 个向量。可以选择最多 32 个向量。通常情况下,Linux 只使用 1 个向量用于 MSI。这是在IP中断配置页面,使能并选择msi中断的重点
3. MSI-X
- 定义:MSI-X 是 MSI 的扩展版本,提供了更大的灵活性和更高的中断数量。
- 优点:
- 支持更多的中断向量(最多可达 2048 个),适合需要高并发中断的设备。
- 提供更好的性能和可扩展性,尤其是在高性能网络和存储设备中。
- 使用场景:主要用于高性能设备,如网络适配器和存储控制器。
总结
- MSI 和 MSI-X 提供了更高效和灵活的中断处理机制,适合现代设备和高性能应用。
- Legacy 中断则是传统的方式,适用于老旧设备,但在性能和扩展性上存在限制。
中断使用
- XDMA的中断类型,以及控制时序:
1)、Legacy Interrupts:
对于Legacy Interrupts中断,当user_irq_ack 第一次为1的时候usr_irq_req可以清0,当user_irq_ack 第二次为1的时候,可以重新设置usr_irq_req发起中断。
在PCI总线里面INTx中断是由四条可选的中断线决定的,这种中断方式是共享式的,所有的pci设备把中断信号在一条中短线上相与,再上报给cpu,cpu收到中断以后再查询具体是哪个设备产生了中断。
在PCIE总线里面已经没有了实体的INTx物理中断线了,PCIE标准使用专门的Message事务包来实现INTx中断,这是为了兼容以前的PCI软件。_INTx__是共享式_的,cpu相应中断后还需要查询具体中断源,效率比较低

解释一下这个图什么意思:
- 首先是usr_irq_req[15:0] = 16’h3 = 0000 0000 0000 0011 中断0和1发出了中断请求
- 然后是usr_irq_ack[15:0] = 16’h1 = 0000 0000 0000 0001 响应中断0
- 然后是usr_irq_ack[15:0] = 16’h2 = 0000 0000 0000 0010 响应中断1
- 中间的波浪线是省略的意思,也就是说在中断响应前和后,中断请求都需要保持一段时间,这个时间多少我没测试过,有大佬知道的可以留言
2)、MSI Interrupts:
MSI 发出usr_irq_req 中断请求后,user_irq_ack 为1只是说明中断已经被主机接收了,但是不代表已经处理,软件或者驱动层可以去清零usr_irq_req。
MSI中断和MSI-X都是往配置的CPU中断寄存器里进行memory写操作,来产生中断,效率比INTx是共享式高,其中MSI最多支持32个中断向量,而MSI-X最多支持2048个中断向量。
![![[Pasted image 20240927204256.png]]](https://i-blog.csdnimg.cn/direct/3205326689284560a8a47b4a950908c3.png)
3)、MSI-X Interrupts:
当usr_irq_req 中断请求后,只要user_irq_ack为1 就可以清零usr_irq_req,但是没说明说明时候可以置1,重启下次中断。
![![[Pasted image 20240927204309.png]]](https://i-blog.csdnimg.cn/direct/ed9305fc6ca6436fa8a6fb86f9c1c443.png)
经过以上所有中断方式测试发现,MSI-X中断,会导致系统非常慢,估计是底层频繁中断导致,软件非常卡反而影响了传输效率,Legacy和MSI 对于usr_irq_req的清除,对于大数据量的传输,比如一幅图像的传图,只要确保usr_irq_req足够长的时间,中断就能被响应。 保守的做法:当软件收到中断后,通过AXI-LITE接口清除usr_irq_req。 usr_irq_req清除后可以重新置位响应中断。
Note
在XDMA IP 配置期间,主机可从指定的支持中断列表中启用一种或多种中断类型。即使启用了多个中断类型,IP 在给定时间内也只会产生一个中断类型。MSI-X 中断优先于 MSI 中断,MSI 中断优先于传统中断。主机软件不得在断言或等待中断发生时切换(启用或禁用)中断类型。
在驱动中的引用
- 后面介绍到驱动的时候说吧,这里就提一句,xdma驱动在读取中断事件的时候是挂起的状态,也就说在没读取到中断事件前不会往下执行其他程序,起到了阻塞的作用,如果你知道linux 驱动那么这个应该会很清楚,如果刚开始的和我一样没学过linux驱动的话就记住这个,我还特意去学了linux驱动基础…
相关文章:
2 XDMA IP中断
三种中断 1. Legacy 定义:Legacy 中断是传统的中断处理方式,使用物理中断线(例如 IRQ)来传递中断信号。缺点: 中断线数量有限,通常为 16 条,限制了可连接设备的数量。中断处理可能会导致中断风…...
自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器
使用 Open AI 兼容的 API,可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑,私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量,为了简化网络配置&#…...
抖音矩阵是什么
抖音矩阵是指在同一品牌或个人IP下,通过创建多个不同定位的抖音账号(如主号、副号、子号等),形成一个有机的整体,以实现多维度、多层次的内容覆盖和用户互动。以下是关于抖音矩阵的详细介绍: 抖音矩阵的类…...
怎么抓取ios 移动app的https请求?
怎么抓取IOS应用程序里面的https? 这个涉及到2个问题 1.电脑怎么抓到IOS手机流量? 2.HTTPS怎么解密? 部分app可以使用代理抓包的方式,但是正式点的app用代理抓包是抓不到的,例如pin检测,证书双向校验等…...
pyqt鸟瞰
QApplication是Qt框架中的一个类,专门用于管理基于QWidget的图形用户界面(GUI)应用程序的控制流和主要设置。QApplication类继承自QGuiApplication,提供了许多与GUI相关的功能,如窗口系统集成、事件处理等。 QAppli…...
【Docker】入门教程
目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …...
Token和JWT的关系详细讲解
Token 和 JSON Web Token (JWT) 是两个相关但概念上不同的术语,它们在现代 Web 应用程序的身份验证和授权中扮演着重要角色。下面将详细介绍两者之间的关系以及 JWT 的具体工作原理。 1. Token 概述 Token 是一种广义的概念,指的是任何可以证明用户身份…...
【Linux系列】Curl 参数详解与实践应用
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
解决 Git SSL 连接错误:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno
问题描述 在执行 git pull 命令时遇到以下错误: > git pull --tags origin main fatal: unable to access github仓库: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0这个错误通常表示 Git 在尝试通过 HTTPS 连接到 GitHub 时遇到了 SSL 连接问题。 解决方案…...
《Vue3 八》<script setup> 语法
<script setup> 是在单文件中使用 Composition API 的编译时语法糖,里面的代码会被编译成组件 setup() 函数的内容。 <script setup> 中的代码在每次组件实例被创建的时候都都会被执行。 定义数据: 在 <script setup> 语法糖的写法中…...
51单片机和STM32集成蓝牙模块实用指南
51单片机和STM32集成蓝牙模块实用指南 蓝牙模块(如HC-05、HC-06、JDY-31等)是嵌入式开发中常用的无线通信模块,广泛应用于智能家居、物联网、机器人等领域。本文将详细介绍如何将蓝牙模块集成到 51单片机 和 STM32 中,并提供一个…...
Transformer:深度学习的变革力量
深度学习领域的发展日新月异,在自然语言处理(NLP)、计算机视觉等领域取得了巨大突破。然而,早期的循环神经网络(RNN)在处理长序列时面临着梯度消失、并行计算能力不足等瓶颈。而 Transformer 的横空出世&am…...
sql 函数
# 四则运算 - * / # 函数 distinct 、count、sum、max、min、avg、sum、round select concat(device_id 是,device_id ) device_id from device_id_apply_factor where device_id D6A42CE6A0; select concat_ws(|||,device_id ,factor_a ,module_type) from 、device_id_app…...
C# OpenCV机器视觉:OCR产品序列号识别
在一个看似平常却又暗藏玄机的工作日,阿明正坐在办公室里,对着堆积如山的文件唉声叹气。突然,电话铃声如炸雷般响起,吓得他差点从椅子上摔下来。原来是公司老板打来的紧急电话:“阿明啊,咱们刚生产出来的那…...
2012wtl,学习活扩
原文 WTL学习注意–活扩 在Win32下,活扩控件已是个成熟的概念了,即使对COM不太了解,使用活扩控件仍是件容易的事情.既然是控件,无非要关注两个方面,第一是如何调用它的函数,其次是如何接收它的事件. 看看在WTL中,如何使用活扩控件(基本对话框): 1.创建项目时,让对话框支持活…...
使用Deepseek搭建类Cursor编辑器
使用Deepseek搭建类Cursor编辑器 Cursor想必大家都用过了,一个非常强大的AI编辑器,在代码编写上为我们省了不少事,但高昂的价格让我们望而却步,这篇文章教你在Visual Studio Code上搭建一个类Cursor的代码编辑器。 步骤其实非常…...
mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]
sql示例(MySQL) WITHtemp1 AS (SELECT name AS resultsFROM Users uJOIN MovieRating m ON u.user_id m.user_idGROUP BY m.user_idORDER BY COUNT(*) DESC,left(name,1)LIMIT 1),temp2 AS (SELECT title AS resultsFROM Movies mJOIN MovieRating r ON m.movie_id r.movie_…...
基于改进粒子群优化的无人机最优能耗路径规划
目录 1. Introduction2. Preliminaries2.1. Particle Swarm Optimization Algorithm2.2. Deep Deterministic Policy Gradient2.3. Calculation of the Total Output Power of the Quadcopter Battery 3.OptimalEnergyConsumptionPathPlanningBasedonPSO-DDPG3.1.ProblemModell…...
C#中通道(Channels)的应用之(生产者-消费者模式)
一.生产者-消费者模式概述 生产者-消费者模式是一种经典的设计模式,它将数据的生成(生产者)和处理(消费者)分离到不同的模块或线程中。这种模式的核心在于一个共享的缓冲区,生产者将数据放入缓冲区&#x…...
git: hint:use --reapply-cherry-picks to include skipped commits
问: 当我在feture分支写完功能,切换到dev更新了远端dev代码,切回feture分支,git rebase dev分支后出现报错: warning skipped previously applied commit 709xxxx hint:use --reapply-cherry-picks to include skippe…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
