天马行空 发表于 2019-10-29 16:57:57

XDMA中断问题

本帖最后由 天马行空 于 2019-10-29 17:00 编辑

汤总,我现在XDMA用的是AXI_Stream接口,跟你们的教程不一样。现在有3个问题想问下:
1 usr_irq_req这个中断使能信号在什么时候使用呢?
      在C2H传输时,FPGA需要主动的发数据到host端,那这个中断信号是在发送一包数据之前使能拉高还是在发送一包数据之后,检测到tlast才拉高呢?pg195上说,C2H通道接收数据时需要被使能,所以我的理解是在发送一包数据前拉高这个中断信号,告诉驱动去使能C2H通道,然后检测到c2h_ready有效后才能发送数据,这样理解对吗?
      
2usr_irq_req拉高后,软件驱动那边是如何获取到这个中断有效的呢?这个中断与msi和轮询中断(poll mode)有什么区别呢?

3FPGA通过C2H通道主动发送数据时,只要检测到C2H_ready为1后就发送,是否可以不使用usr_irq_req中断,而是直接通过msi和轮询中断自己去判断?

uisrc 发表于 2019-10-30 13:19:40

根据手册说明:
1、对于Legacy Interrupts中断,当user_irq_ack 第一次为1的时候usr_irq_req可以清0,当user_irq_ack 第二次为1的时候,可以重新设置usr_irq_req发起中断
2、对于MSI
MSI 发出usr_irq_req 中断请求后,user_irq_ack 为1只是说明中断已经北主机接收了,但是不代表已经处理,软件或者驱动层可以去清零usr_irq_req
3、对MSI-X中断
当然usr_irq_req 中断请求后,只要user_irq_ack为1就可以清零usr_irq_req,但是没说明说明时候可以置1

经过以上所有中断方式测试,发现,MSI-X中断,会导致系统非常慢,估计是底层频繁中断导致,软件非常卡
,Legacy和MSI 对于usr_irq_req的清除,对于大数据量的传输,比如一幅图像的传图,只要确保usr_irq_req足够长的时间,中断就能被响应。 或者当软件 收到中断后,通过AXI-LITE接口清除usr_irq_req。 usr_irq_req清除后可以重新置位响应中断

天马行空 发表于 2019-10-30 13:58:20

谢谢解答,手册中还说到一种中断不是很明白,就是pollmode(轮询中断):


按照这种描述我是否可以理解为驱动或者软件可以通过这种轮询中断的方式自己去判断一帧图像是否传输完毕,而不需要fpga逻辑层这边通过Legacy ,MSI,msi-X这三种中断的方式来告诉驱动层或者软件?

uisrc 发表于 2019-10-30 20:07:31

是的

郭、先生 发表于 2019-11-12 12:46:30

为什么 按照这种中断方式 处理会导致 一段时间 qt程序 的图像采集会卡死

郭、先生 发表于 2019-11-12 12:46:51

msxbo 发表于 2019-10-30 20:07
是的

为什么 按照这种中断方式 处理会导致 一段时间 qt程序 的图像采集会卡死

uisrc 发表于 2019-11-12 20:59:08

不清楚,没有深入研究了,底层的比较复杂,以后有时间再研究,最近赶项目,先把项目弄完。实现的方式很多,如果要搞清楚也是要费一番时间,可能底层驱动都要修改

打铁小肥罗 发表于 2020-9-1 17:56:18

你好,我在在使用xdma 的msi中断时,发出usr_irq_req中断请求之后,迟迟没有收到usr_irq_ack,host也没有收到相应的中断,但是bar1的0x2040和0x2048寄存器都置1了,请问这是怎么回事?

vkhvrvhw 发表于 2022-3-21 22:19:20

uisrc 发表于 2019-10-30 13:19
根据手册说明:
1、对于Legacy Interrupts中断,当user_irq_ack 第一次为1的时候usr_irq_req可以清0,当us ...

egacy和MSI 对于usr_irq_req的清除,对于大数据量的传输,比如一幅图像的传图,只要确保usr_irq_req足够长的时间,中断就能被响应。
您好,这个时间您有测过吗?大概需要多久?
页: [1]
查看完整版本: XDMA中断问题