Zynq PL中断在Linux上的应用 (zynq pl 中断 linux)

随着嵌入式设备的广泛应用,SoC(System on Chip)已成为嵌入式系统中的重要组成部分。Xilinx Zynq系列是当前业界最为出色的SoC设计,该系列利用FPGA的可重构性和ARM的处理器内核,为设计人员提供了一个高度可定制化的解决方案。

Zynq SoC在嵌入式系统中的主要应用是作为处理器子系统的扩展,可用于实现高效的数据处理,通信、控制、安全等功能。其中,PL(Programmable Logic,可编程逻辑)部分扮演着重要的角色,可通过编程将其定制为不同的硬件设备和接口,以满足各种应用需求。

本文将重点介绍Zynq PL中断在Linux中的应用,并探讨其实现方法和技术难点。

一、Linux中断机制简介

在Linux系统中,中断机制是实现各种硬件设备和外设与系统的交互的重要手段。中断是指硬件设备向系统发出的异步事件通知,例如按键按下、定时器超时等。当硬件设备触发中断时,系统将中断事件通知到相应的中断处理程序中进行处理。中断处理程序会暂时中止当前正在执行的任务,执行中断处理程序,处理完中断后,继续执行之前的任务。

对于大多数外设,如定时器、串口等,中断处理程序的编写是必须的。在Linux内核中,中断处理程序是通过IRQ(Interrupt ReQuest)机制来注册的。IRQ号是中断号的一个别名,主要用于将中断响应程序绑定到特定的硬件中断等操作。IRQ号可以在启动时从设备树中获取,也可以通过内核API(Application Programming Interface)动态分配。

二、Zynq中断架构

Zynq SoC的PL部分是一个FPGA芯片,可重新编程以满足不同的硬件需求。在Zynq SoC中,PL通过PS(Processing System,处理器系统)接口与处理器核之间进行数据交换。其中,PL端与PS端的中断处理非常重要。

PL中断可以由多种外设触发,例如GPIO(General Purpose Input Output)、SPI(Serial Peripheral Interface)、I2C(Inter-Integrated Circuit)等,处理器核可以通过访问中断控制器来注册和注销PL中断,使用相应的中断处理程序响应外设中断。

在Zynq SoC中,处理器核和可编程逻辑之间的中断交互涉及到两个主要的IP(Intellectual Property)核心,MSC(Muli-standard Communication Co-processor)和AXI(Advanced eXtensible Interface)Interrupt Controller。MSC是一个可编程逻辑收发器,可用于支持高速通信协议,例如PCI Express、SATA等,AXI Interrupt Controller则是管理PL外设中断的核心。

MSC中断响应:

当MSC接收到一个来自PL外设的中断请求时,它会将该请求转发给AXI Interrupt Controller,该控制器将处理器核分配给与中断请求相关联的中断服务程序。在中断服务程序执行期间,AXI Interrupt Controller将暂停来自PL的外设的中断请求,以保证中断服务程序能够在执行期间访问系统资源。中断处理程序完成后,AXI Interrupt Controller将恢复来自PL外设的中断请求。

AXI Interrupt Controller:

AXI Interrupt Controller通过AXI总线连接到PS和PL之间的连接器,用于实现中断请求的仲裁和分配,以及中断优先级的管理。该控制器可以为每个外设分配一个唯一的中断号,以避免中断信号冲突。此外,AXI Interrupt Controller还支持动态中断控制,可以在运行时添加和删除中断服务程序。

三、Zynq PL中断在Linux中的应用

在Linux系统中,PL中断处理程序可以快速响应硬件事件,以提高系统的响应性和工作效率。在Zynq SoC中,通过AXI Interrupt Controller可以为PL外设分配唯一的中断号,方便编程人员编写中断处理程序。

在使用PL中断时,需要在设备树中添加相应的中断控制器,例如AXI Interrupt Controller,以及与之对应的中断路径。中断路径由设备的名称和中断号构成。当中断请求产生时,系统将从设备树中获取相应的中断路径和号码,并将它们传递给中断处理程序。

使用中断的另一个优点是增强了系统的可靠性和稳定性。由于中断机制能够快速响应硬件事件,防止系统出现死锁和资源占用。因此,开发人员应该根据具体应用需求合理地设计和管理中断,以提高系统的可靠性和稳定性。

四、小结

Zynq SoC作为更先进的SoC方案,为嵌入式系统带来了很多创新。使用PL中断可以提高系统的响应性和工作效率,同时也增强了嵌入式系统的可靠性和稳定性。本文介绍了Zynq PL中断在Linux中的应用,以及在实现中需注意的技术难点。希望本文能对有志于从事嵌入式系统设计和开发的人员有所帮助。

相关问题拓展阅读:

如何学习zynq以太网控制器及协议栈

第 9 章 ZedBoard 入门

前面大家已经对 ZYNQ 架构以及相应的开发工具有一定的认识,接下来我们将带领大家来一起 体验 ZYNQ,体验软硬件协同设计的魅力。由于时间的关系,下面的一些实验(本章及后续章节的实验) 可能有不完善的地方,欢迎读者向我们反馈。 9.1 跑马灯 本实验将指导大家使用 Vivado 集成设计环境创建本书的之一个 Zynq 设计。这里,我们使用跑马灯 这个入门实验来向大家介绍 Vivado IDE 的 IP Integrator 环境,并在 Zedboard 上实现这个简单的 Zynq 嵌 入式系统。之后,我们将会使用 SDK 创建一个简单的软件应用程序,并下载到 Zynq 的 ARM 处理器中, 对在 PL 端实现的硬件进行控制。本实验分为三个小节来向大家进行介绍: ? 之一节我们将使用 Vivado IDE 创建一个工程。 ? 在之一节的基础上,第二节我们将继续构建一个 Zynq 嵌入式处理系统,并将完成后的硬件导入 到 SDK 中进行软件设计。 ? 最后一节我们将使用 SDK 编写 ARM 测试应用程序, 并下载到 ZedBoard 上进行调试。 实验环境:Windows 7 x64 操作系统, Vivado2023.4,SDK 2023.4

9.1.1 Vivado 工程创建

1) 双击桌面 Vivado 快捷方式 ,或者浏览 Start > All Programes > Xilinx Design Tools > Vivado

2023.4 > Vivado 2023.4 来启动 Vivado. 2) 当 Vivado 启动后,可以看到图 9-1 的 Getting Started 页面。

图 9- 1 Vivado 开始界面

3) 选择 Create New Project 选项,图 9-2 所示的 New Project 向导将会打开,点击 Next。

图 9- 2 New Project 对话框 4) 在 Project Name 对话框中早卖,输入 first_zynq_design 作为 Project name, 选择 C:/XUP/Zed 作为 Project location,确保 Create project subdirectory 被勾选上,如图 9-3,点击 Next。

图 9- 3 Project Name 对话框 5) 在 Project Type 对话框中,选择 RTL Project,确保 Do not specify sources at this time 选项没有 被勾选,如图 9-4,点击 Next。

图 9- 4 Project Type 对话框 6) 在 Add Source 对话框中, 选择 Verilog 作为目标语言,如果你拍睁李对 VHDL 熟悉的话, 你也可以 选择 VHDL,如果这里你忘记了选择,在工程创建完成后,也可以在工程设置中选择你熟悉的 HDL 语言。如果你已经有了源文件,在这里就可以选择 Add file 或者 Add directory 进行添加, 由于我们没有任何的源文件, 所以这里我们直接点击 Next 即可,如图 9-5。

图 9- 5 添加源文件 7) 在 Add Existing IP 对话框中,点击 Next。 8) 在 Add Constraints 对话框中,点击 Next。 9) 在 Default Part 对袭迟话框中,在 Specify 框中选择 Boards 选项,在下面的 Board 列表中选择 ZedBoard Zynq Evaluation and Development Kit,点击 Next,如图 9-6。

图 9- 6 芯片选择 10) 在 New Project Summary 对话框中,点解 Finish 完成工程创建,至此,我们已经使用 Vivado 创建了一个 Zynq 设计的工程框架,图 9-7 为 Vivado 的工程界面,在第四章我们已经对该界面 进行过介绍,如果还不熟悉的读者再回到前面复习一下。下面我将使用 Flow Navigator 的 IP Integrator 功能完成第二节的嵌入式系统设计。

图 9- 7 Vivado 工程界面

9.1.2 在 Vivado 中创建 Zynq 嵌入式系统 这一节我们将创建一个简单的 Zynq 嵌入式系统,该系统使用 Zynq PL 部分实现一个通用 I/O 控制 器 (GPIO),控制器同 ZedBoard 上的 8 个 LED 相连接,并且通过 AXI 总线连接到 PS 端,这样我们就可 以通过将要在第三小节中实现的 ARM 应用程序来对 LED 进行控制。系统结构图如图 9-8 所示。

说到学习ZYNQ+SOC+Linux开发,我认为主要应该细分为lian两大点:zynq,soc合为一个点,linux为一个点。下面我就给大家介绍学习的流程和路线。

一,学习zynq+soc的FPGA开发部分和片上ARM核的寄存器,裸奔应用开发,我推荐大家收阅读文档《ZYNQ+SOC修炼秘籍-最全面的pdf》,下面我给大家贴上下载地址。

CSDN下载链接:

二,如果各位能按部就班的阅读并自己动手编写测试《ZYNQ+SOC修炼秘籍-最全面的pdf》里面的内容,我相信大家对于zynq的硬件部分已经足够了解,并且能够写出基于FPGA+ARM构架的裸奔程序应用了。

那么接下来,我们就应该学习管如何在zynq平台上搭建Linux操作系统了。

(1)u-boot的编译

我相信大家已经肯定在网上搜索理解了很多关于u-boot编译的资料,所以在此睁稿我给大家提供的shi是如何解决编译过程中遇到的一些问题,将自己在银兆项目实践中的记录分享给大家,具体请参考《zynq-u-boot编译说明书》这个资料,下面为下载链接地址。

CSDN下载链接:

(2)kernel的编译

众所周知,kernel为Linux的内核,这个是最最核心的部分,在此不做过多的赘述,给大家分享项目中的记录吧。具体参考《zynq-kernel编译说明书》这个资料。

CSDN下载链接:

(3)设备树的编译

不知道大家是否知道,Linux上的驱动是怎么和硬件挂钩的吗?没错,就是使用的设备树,话不多说,请参照《zynq设备树配置说明》这个资料,下面为下载链接地址。

CSDN下载链接:

(4)文件系统的搭载

在完成上述三步的操作之后,需要一个完整的Linux系统我们就还需要搭载上文件系统,国外很多人喜欢利用buildroot自己及定制文件系统,但是对于初学者我的建议是先使用已经完善的文件系统,具体的做法请参照《zynq文件系统挂载》这个资料,下面为下载链接地址。

CSDN下载链接:

三,在完成了u-boot的编译,kernel的编译,设备树的编译,文件系统的编译挂载后,一个完整的Linux系统就搭建成功了。不过我相信在过程中肯定会遇到或多或少的各种各样的问题,在此本人为大家分享一些在过程中遇到的问题以及解决方法,水平有限望大神勿喷。

(1)在运行挂载文件系统的时候本人就曾经遇到,系统默认挂载的是ramdisk,所以无法挂载我搭建在SD卡上的ext4的文件系统,请参考《zynq不加载悉搏孝ramdisk的方法》资料里的解决方法,下面为资料xixi下载链接。

CSDN下载链接:

(2)如何解决板子每次上电都动态分配ip,导致用户无法准确知道板子的ip呢?那就请参考《zynq_linux配置静态和动态ip的方法》这个资料里的内容,下面为下载链接。

CSDN下载链接:

(3)配置好静态ip后,那么肯定是kai’开始用用SSH连接板子,现在就让我们来解决SSH连接的问题,请参考《zynq上的SSH无法链接问题》这个资料里的内容,下面为下载链接。

CSDN下载链接:

(4)以上问题都解决了后,自然是想自己动手编写Linux下的驱动咯。只有有了驱动才能使得FPGA为Linux所用,那么接下来给大家分享几个编写Linux下的axi dma驱动的资料供大家参考。

《zynq字符设备驱动代码》

CSDN下载链接:

《zynq_linux字符驱动之自动创建设备节点》

CSDN下载链接:

《zynq上axi-dma作为字符设备的驱动代码》

CSDN下载链接:

《zynq_dma_device_tree说明文件》

CSDN下载链接:

四,以上介绍大部分均为本人在学习,做项目时的总结,在此分享给大家,希望对广大的学习群体有所帮助,本人水平有限,在此希望各路大神们勿喷。接下来就靠大家自己努力加油了!

关于zynq pl 中断 linux的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Zynq PL中断在Linux上的应用 (zynq pl 中断 linux)