ZYNQ PL端向PS端发出中断

在之前的项目中知道zynq的PS端可以通过AXI总线向PL端的IP核写入数据,而PL端也可以通过AXI总线去访问PS端的DDR等设备。然而当PL端的IP在接收到PS端的指令完成操作后,该如何告知PS端我已经完成操作了呢?有一种方式是PS端使用AXI总线轮询,不停地访问AXI总线直到出现预期的标志位。另外一种方式则是使用PL端到PS端的中断,在完成操作后发出一个中断通知PS端可以进行后续的处理了。

PL端向PS端发出触发的方式

在zynq上有16个PL到PS端的常规中断接到双核心的PS端,每个CPU又有独立的1个常规中断和快速中断。在这里我们先介绍使用F2P的这一组中断。

从PL端发出这个中断的方式非常简单,就是从模块上给出一个信号然后连接到zynq PS的F2P端口上。当需要触发这个中断时将模块的这个信号由低拉高即可。

PS端F2P支持高电平触发或者是上升沿触发,可以根据实际的需求进行配置。

PS端的中断处理

```c

#include <stdio.h>

#include "platform.h"

#include "xil_printf.h"

#include "xil_io.h"

#include "xscugic.h"

#include "xparameters.h"

#define PL_DDR_BASE_ADDR 0x10000000

#define INT_ID 61U

#define XIL_EXCEPTION_ID_INIT 5U

XScuGic ScuGic;

void irq_handler(void* data) {

u32 id;

id = XScuGic_ReadReg(XPAR_SCUGIC_CPU_BASEADDR, XSCUGIC_INT_ACK_OFFSET);

id = id & XSCUGIC_ACK_INTID_MASK;

xil_printf("irq occur, id: %d\r\n", id);

XScuGic_WriteReg(XPAR_SCUGIC_CPU_BASEADDR, XSCUGIC_EOI_OFFSET, id);

}

int pl_irq_init() {

XScuGic_Config* pScuGicCfg;

pScuGicCfg = XScuGic_LookupConfig(XPAR_PS7_SCUGIC_0_DEVICE_ID);

XScuGic_CfgInitialize(&ScuGic, pScuGicCfg, pScuGicCfg->CpuBaseAddress);

XScuGic_Connect(&ScuGic, INT_ID, (Xil_ExceptionHandler)irq_handler, NULL);

XScuGic_SetPriorityTriggerType(&ScuGic, INT_ID, 0xA0, 0x03);

XScuGic_Enable(&ScuGic, INT_ID);

Xil_ExceptionInit();

Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INIT, (Xil_ExceptionHandler)irq_handler, &ScuGic);

Xil_ExceptionEnable();

}

int main()

{

init_platform();

pl_irq_init();

print("read ddr app\n\r");

while(1);

cleanup_platform();

return 0;

}

```

参考链接

https://adaptivesupport.amd.com/s/question/0D52E00006iHoxcSAC/irqf2p-width-mismatch?language=zh_CN

https://adaptivesupport.amd.com/s/article/70347?language=en_US

相关推荐
szxinmai主板定制专家5 天前
基于 AM62x + Artix-7 的低功耗 ARM+FPGA 平台在轨道交通车门控制中的应用
arm开发·人工智能·fpga开发·zynq·am62x
szxinmai主板定制专家6 天前
ARM 还是 x86?CODESYS 数控机床控制器选型、FPGA 取舍与实时性真相
arm开发·人工智能·fpga开发·zynq·1024程序员节·codesys
XMAIPC_Robot12 天前
ARM+FPGA+AI船舶/工业自动化控制器EMC测试等级解析(IEC60533/IEC60945)
arm开发·人工智能·fpga开发·zynq·arm+fpga·rk3588+fpga
szxinmai主板定制专家13 天前
ZYNQ 数据采集方案踩坑总结:电力强电磁干扰、工业现场多协议适配优化
运维·人工智能·fpga开发·机器人·zynq
szxinmai主板定制专家13 天前
软硬协同!ZYNQ 高速多通道同步采集,变电站 / 工厂设备状态监测方案详解
人工智能·深度学习·机器学习·fpga开发·zynq·rk3576
szxinmai主板定制专家13 天前
告别 ARM 实时性短板:基于 ZYNQ 的电力故障录波 + 工业振动数据采集系统设计
arm开发·人工智能·fpga开发·zynq·数据采集卡·arm+fpga·rk3588+fpga
璞致电子17 天前
璞致电子PZSDR P151Q 大规模多通道软件无线电平台|ZU15EG + 四片 AD9361 8T8R 相位同步 SDR
xilinx·zynq·软件无线电·sdr·璞致电子·p151q·zu15eg
szxinmai主板定制专家19 天前
面向虚拟电厂协调控制:RK3588+FPGA+AI边缘控制器设计思路与算力评估
人工智能·嵌入式硬件·fpga开发·机器人·jetson·zynq·振动采集
szxinmai主板定制专家24 天前
基于Zynq的高精度多通道数据采集卡完整解决方案(工业振动/高速采集/边缘传输)
fpga开发·zynq·数据采集卡
吉他英雄一里25 天前
zynq入门教程
fpga开发·zynq