zynq的pl中断在linux下的配置及中断驱动

转至 https://blog.youkuaiyun.com/shangguanyunlan/article/details/78498518

Zynq的中断号在dts中的表示 可参考这个文章,不过该文章说的是在dts设备树中的中断号 的配置。 
现在的情况是,在zynq 的PL端配置外设中断 ,不涉及dts。 
比如zynq中的外设中断号从#61开始,配置成按键button,按下按键时,Linux系统接收中断进行处理。 
这里写图片描述
此时就需要在Linux的驱动中按照物理中断号注册,也就是硬件中断号


    //注册中断
    ret = request_irq(61, TxDoneHandler, IRQF_TRIGGER_RISING,"TXDONE_INT", NULL);
    if(ret)
    {
        printk("request TXDONE_INT failed! ret = %d\n", ret);
        return -1;
    }
在基于ZynqLinux系统中,PL(可编程逻辑)到PS(处理系统)的中断配置是一个重要的环节,确保两者之间的通信顺畅。下面将详细介绍如何正确配置Linux内核以支持这种类型的中断,并提供一些实用技巧帮助您顺利完成这个过程。 ### Zynq Linux PL-PS 中断的基本原理 当PL侧发生某个事件(如定时器超时、数据准备好等),它可以生成一个中断信号并通过AXI中断控制器传递给PS端。然后,Linux操作系统会响应该中断并执行相应的ISR(Interrupt Service Routine)。为此,我们需要确保以下几个方面都得到了妥善配置: #### 1. **设备树(Device Tree)** 编辑 设备树是用来描述嵌入式系统的硬件拓扑结构及其属性的数据结构。针对PL-PS中断的具体情况,在设备树源文件(.dts)里需明确指定: - 中断线映射关系; - 所有相关外围设备节点; 示例片段展示了一个简单的UART实例: ```c amba_pl { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; uart0: serial@e0001000 { /* 这里的地址取决于具体的硬件连接 */ device_type = "serial"; compatible = "xlnx,xuartps"; // Xilinx提供的串口IP核心兼容字符串 reg = <0xe0001000 0x100>; // 物理基址和大小 interrupts = <0 89 4>; // IRQ编号及类型(这里假设是第89号中断) interrupt-parent = <&gic>; // GIC作为上级中断控制单元 status = "okay"; xlnx,fifo-depth = <256>; clocks = <&clkc 7>, <&clkc 8>; clock-names = "ref_clk", "aper_clk"; }; ``` 此段代码说明了如何为UART分配合适的中断资源并且关联到了全局中断控制器(GIC)。 #### 2. **内核配置** 为了让Linux识别并管理上述硬件资源,必须适当调整`.config`文件内的各项开关状态。通常来说,下列选项应当被激活: - `CONFIG_OF`: 启用对DeviceTree的支持; - `CONFIG_IRQ_DOMAIN`: 允许更复杂的IRQ域划分方案,适合多层级中断架构; - `CONFIG_ARM_GIC`: 使用通用中断控制器v1/v2版本,这是大多数ARM平台上常见的选择; - `CONFIG_XILINX_VCU`: 如果涉及到视频编码解码等功能模块则需要勾选此项; - 根据具体情况加载对应外设的标准驱动程序,比如上面提到的UART就会自动引用"xilinx,zynq-xuartps"这样的compatibility标识符去匹配已有的驱动; 此外还有可能是某些高级特性或调试工具相关的配置也要注意开启与否,视乎个人需求而定。 #### 3. **编写用户空间应用程序** 最后一步就是在应用层面上验证所有前期工作成果啦~可以通过poll()函数监视/dev/ttyPS*设备的状态变化,或者直接注册回调函数来捕捉到来自底层的事件通知。当然也可以借助诸如ethtool之类的命令行工具来进行实时监控与诊断分析。 --- 通过以上步骤就可以初步建立起一套完整的从物理层面直到软件接口均畅通无阻地衔接起来的解决方案了!不过需要注意的是每个项目都会存在差异性较大之处,所以建议尽可能参照官方手册及相关资料进行深入学习研究哦~
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值