ZYNQ从放弃到入门(三)- 中断(一)

在检查PS端IO口状态时,常用的就是轮询,但是实际工程中很少用这种方式,主要是运行复杂逻辑时,轮询方式效率太低,CPU需要等待IO口状态变化,这种肯定不符合大多数应用,所以多数情况下都是使用中断方式进行驱动的。

在许多具有许多输入的系统中,键盘、鼠标、按钮、传感器等。来自这些设备的输入通常与当前执行的进程或任务异步,并且轮询 I/O 方法对于具有许多输入的系统通常效率太低。因为无法始终预测事件何时发生,因此必须经常使用轮询 I/O 方法检查 I/O 状态。轮询例程通常会获得空结果,这是低效的。使用中断可以使处理器继续进行其他处理,直到事件发生,从而大大提高了执行效率。当发生 I/O 事件时,产生的中断会导致处理器分支并寻址 I/O 事件。

在最高级别,中断可以分为两种类型:可屏蔽和不可屏蔽。但事情不是那么简单的。随着处理器变得越来越先进,中断源的数量呈爆炸式增长。因此,双核 Xilinx Zynq All Programmable SoC 使用 ARM 通用中断控制器 (GIC) 来处理中断,中断可能来自:

软件生成的中断 – 每个处理器 16 个。软件产生的中断可以中断自己和一个或两个处理器。

共享外设中断 – 总共 60 个。这些中断可能来自 Zynq SoC 处理器系统 (PS) 中的 I/O 外设,也可能来自器件的可编程逻辑 (PL) 端。两个 ARM Cortex-A9 MPCore CPU 共享这些中断。

Private Peripheral Interrupts – 5 个中断,每个 CPU 都是私有的(例如 CPU 定时器、CPU 看门狗定时器和专用的 PL 到 CPU 中断)。

下面是 Zynq SoC 的框图,其中 GIC 以红色圈出。请注意 GIC 如何紧邻两个 ARM Cortex-A9 MPCore 处理器:红色圈出的 Zynq SoC 通用中断控制器 (GIC)共享外设中断非常有趣,因为它们非常灵活。可以将它们从 I/O 外设(总共 44 个中断)或从 FPGA 逻辑(总共 16 个中断)路由到 ARM Cortex-A9 MPCore CPU。还可以将中断从 I/O 外设路由到器件的 PL 部分,从而允许 Zynq SoC 中的可编程逻辑在应用程序需要时卸载处理器。从 PS IOP 到 PL 的中断

 


在解释如何在 Zynq 上设置中断之前,我认为回顾一下 ARM Cortex-A9 MPCore 处理器如何处理中断是一个好主意。当中断发生时,会发生以下事件:

 

 

中断显示为待处理。

处理器停止执行当前线程。

处理器将当前线程的状态保存在堆栈上,以便在处理完中断后允许中断前的处理继续进行。

处理器执行中断服务程序 (ISR),它定义了如何处理中断。

处理器在从堆栈中恢复中断线程后恢复它的操作。

因为中断是异步事件,有可能同时发生多个中断。因此,中断被优先处理,以便处理器可以首先处理最高优先级的中断挂起。下一篇博客将介绍如何初始化和使用 Zynq SoC 的 GIC。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值