对于软件来说,中断是一种异步事件。
中断(主要是硬件中断)可以进一步被分类为以下几种类型:
• 可屏蔽中断(Maskable Interrupts,IRQ)——可通过在中断屏蔽寄存器中设定位掩码来关闭。触 发可屏蔽中断的事件源不是每次都是重要的。程序设计人员需要决定该事件是否应该导致程序跳到所需处理的地方去。使用可屏蔽中断的设备包括定时器、比较器和 ADC。
• 不可屏蔽中断(Non-Maskable Interrupts,NMI)——无法通过在中断屏蔽寄存器中设定位掩码来关闭。这些是不可忽视的中断。NMI 的事件包括上电、外部重启(用实际的按钮)和严重的设备失效。
• 处理器间中断(Inter-Processor Interrupts,IPI)——在多处理器系统中,一个处理器可能需要中断另一个处理器的操作。在这种情况下,就会产生一个 IPI,以便于处理器间通信或同步。
Zynq 芯片的 PS 部分是基于使用双核 Cortex-A9 处理器和 GIC pl390 中断控制器的 ARM 架构。中断结构与 CPU 紧密链接,并接受来自 I/O 外设(IOP)和可编程逻辑(PL)的中断。中断控制器架构如下图所示:
从上图可知,zynq主要有三类中断:
1、软中断(software generate interrupt,SGI),共16个。
2、私有中断(private peripheral interrupt ,PPI)(CPU0、CPU1各有5个),包括全局定时器、专用看门狗定时器(AWDT)、专用(私有)定时器和来自 PL 的 FIQ/IRQ。
3、共享中断(shared periphearl interrupt ,SPI),PS端有44个,PL端16个,共60个。
对于软中断来说:所有的 SGI 都是边缘触发的,且其敏感性类型是固定的,不能修改。ICDICFR0寄存器是只读的,因为它指定了所有16个gi的灵敏度类型。
对于私有中断来说:ppi的灵敏度类型是固定的,不能改变;因此,ICDICFR1寄存器是只读的,因为它指定了所有5个ppi的灵敏度类型。
对于共享中断来说:对于电平触发的中断而言,接收中断以后需要清除。
一组大约60个来自不同模块的中断可以路由到其中一个或两个
中断控制器为cpu管理这些中断的优先级和接收。
除了irq# 61到#68和#84到#91之外,所有的中断灵敏度类型都是由请求源固定的,不能更改。必须对GIC进行编程以适应这一点。引导ROM不会对这些寄存器进行编程;因此,SDK设备驱动程序必须对GIC进行编程以适应这些灵敏度类型。
对于上升沿触发的中断,请求源必须提供足够宽的脉冲以供GIC捕获。这通常是至少2个CPU_2x3x周期。此要求适用于任何IRQF2P[n](来自PL)具有上升沿灵敏度类型。