zynq pl配置linux中断

zynq pl配置linux中断

一、zynq工程如图所示

下图所示为zynq的pl工程图,请注意途中画蓝色框内,在图一左侧的蓝色框内,请在vivado约束条件中设置irq[0:0]与板子上的按键连接具体约束条件见。在右侧蓝框内的xlconcat_0中,由于In0[0:0]连接别的设备,In1[0:0]连接外部按键,故In0[0:0]的中断号为61,In1[0:0]的中断号为62。图二是将中断连接到zynq的IRQ_F2P[1:0]中。
图一:
在这里插入图片描述
图二:
在这里插入图片描述

二、zynq中断号的由来

  1. Zynq的中断类型有:
    软件中断(Software Generated Interrupt, SGI,中断号0-15)(16–26 reserved)
    私有外设中断(Private Peripheral Interrupt, PPI,中断号27-31),
    共享外设中断(Shared Peripheral Interrupt, SPI,中断号32-95).
  2. 私有外设中断(PPI):每个CPU都有一组PPI,包括全局定时器、私有看门狗定时器、私有定时器和来自PL的FIQ/IRQ.
  3. 软件中断(SGI)被路由到一个或者两个CPU上,通过写ICDSGIR寄存器产生SGI.
  4. 共享外设中断(SPI)由PS和PL上的各种I/O控制器和存储器控制器产生,这些中断信号被路由的CPU.
  5. 通用中断控制器(GIC)是核心资源,用于集中管理从PS和PL产生的中断信号的资源集合。控制器可以使能、关使能、屏蔽中断源和改变中断源的优先级,并且会将中断送到对应的CPU中,CPU通过私有总线访问这些寄存器。
  6. 中断控制器(ICC,Interrupt Controller CPU)和中断控制器分配器(ICD, Interrupt Controller Distributor)是GIC寄存器子集。
  7. (外部)中断请求(IRQ)、快速中断请求(FIQ)。
  8. a、对于非 SPI中断,则对应到Linux 的中断标号,为芯片datasheet的中断号 -16。
    例如中断号为 30,则对应的linux 中断号为 30 -16 = 14。
    b、对于SPI 中断,则对应的 linux 中断标号,为芯片 datasheet 的中断号 -32。
    例如:IRQ_F2P中断,中断号为 61,则对应的 linux 中断号为 61 - 32 = 29。
  9. 总上所述,下图为u585-zynq的数据手册中截取的部分内容,详细信息请参考该数据手册,该表画黄色的区域标识pl的中断号。由于In0[0:0]在前,In1[0:0]在后,分配中断号的时候,In0[0:0]会被先分配,故之前提到的In0[0:0]为61,In1[0:0]为62。
    在这里插入图片描述

三、vivado中约束条件

在这里插入图片描述在这里插入图片描述

四、设备树内增加如下内容

在这里插入图片描述
其中interrupts = <0 32 2>;内的0代表的是SPI中断,32对应的中断号,2代表中断触发方式为下降沿触发。触发方式一共有4中,分别是上升沿触发(1),下降沿触发(2),高电平触发(4),低电平触发(8)。
在这里插入图片描述

五、驱动代码

// An highlighted block
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/types.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/device.h>
#include <linux/cdev.h>
#include <linux/of.h>
#include <linux/delay.h>
 
#include <linux/dma-mapping.h>
 
#include <linux/pm.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/gfp.h>
#include <linux/mm.h>
#include <linux/dma-buf.h>
#include <linux/string.h>
#include <linux/uaccess.h>
#include <linux/dmaengine.h>
#include <linux/completion.h>
#include <linux/wait.h>
#include <linux/init.h>
 
#include <linux/sched.h>
#include <linux/pagemap.h>
#include <linux/errno.h>	/* error codes */
#include <linux/clk.h>
  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值