zynq PS端跑Linux响应中断

这篇文章主要是讲述如何在Zynq的PS上跑Linux启动IRQ,环境为vivado2019.1,petalinux2019.1 ubuntu20.04,本人初学者,欢迎批评指正

1. Vivado硬件设计

确保自定义IP的中断信号通过 IRQ_F2P 连接到PS端。在开始Petalinux配置之前,请确保您的IP已经正确设置为向PS发送中断信号,所有的时钟、AXI和复位连接都已正确配置。

  1. 在Vivado中,选择 File > Export > Export Hardware
  2. 勾选 Include Bitstream(如果设计已完成并生成了比特流文件)。
  3. 将硬件描述文件(HDF或XSA文件)保存到一个已知目录,我们将在Petalinux配置中使用该文件。

2. 设置Petalinux工程

2.1 创建Petalinux工程

  1. 打开中断,加载Petalinux环境:

    source /opt/petalinux/2019.1/settings.sh
    
  2. 创建一个新的Petalinux工程,适用于Zynq平台:

    petalinux-create --type project --template zynq --name irq_prj
    
  3. 进入到项目目录:

ZYNQ架构中,PL可以通过多个F2P(Fabric to Processor)中断引脚将中断信号传递至PS。每个中断信号对应一个特定的中断编号,并由中断控制器(ICD)进行管理与分发[^1]。 ### 硬件配置 在硬件设计阶段,需要在Vivado中配置多个PL-PS中断信号。具体操作包括: - 在BD(Block Design)中启用PL-PS中断接口,并为每个中断源分配独立的中断号。 - 将PL中断信号连接到ZYNQ PS模块的F2P中断输入引脚。ZYNQ支持最多20个PL到PS中断信号。 - 配置中断触发方式,例如高电平触发或上升沿触发。对于边缘触发的中断,在PL逻辑中应确保信号具备足够的脉冲宽度以被CPU捕获[^2]。 ### 中断控制器设置 中断控制器(GIC)负责接收来自PL的多个中断请求,并将其分发给指定的CPU核心。配置时需完成以下寄存器操作: - **中断优先级寄存器(ICDIPR)**:为每个中断源设置优先级。例如,中断号61对应的优先级寄存器偏移地址为`0xF8F01400 + (Int_Id/4)*4`,写入值如`0x000000a0`表示设定优先级为0xA0[^1]。 - **中断目标处理器寄存器(ICDIPTR)**:决定中断被发送到哪个CPU接口。例如,通过写入`0xF8F0183D, 0x00000200`,可将中断61定向至CPU1。 - **中断敏感类型寄存器(ICDICFR)**:设置中断触发类型,如电平触发或边沿触发。例如,`0xf8f01c0c`地址写入`0x55555555`表示所有中断均采用高电平触发模式。 ### 软件注册与处理 在Linux内核驱动中,使用`request_threaded_irq`函数注册多个中断处理程序。该函数允许传入中断号、中断触发类型、共享中断标志以及中断服务例程(ISR)。示例代码如下: ```c int request_pl_irq(int irq, const char *devname, irq_handler_t handler) { int err = request_threaded_irq(irq, NULL, handler, IRQF_TRIGGER_RISING | IRQF_SHARED, devname, (void *)handler); if (err) { printk(KERN_ALERT "Failed to request IRQ %d\n", irq); return err; } return 0; } ``` 此函数可以多次调用以注册不同中断号对应的处理函数。每个中断处理函数应根据中断编号执行不同的响应逻辑,或者读取状态寄存器以区分多个中断源。 ### 清除中断标志 在中断服务例程中,必须手动清除相应的中断标志位。例如,在回调函数中写入`0xf8f01284`地址并设置`0x10000000`以清除中断61的标志位[^1]。否则,中断可能会重复触发,导致系统异常。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值