zynq中断

CPU接收中断的三种主要来源

  1. 私有外设中断(Private Peripheral Interrupts, PPI)

    • 这些中断是特定于每个CPU的,也就是说,每个CPU都有自己的一组私有外设,它们产生的中断不会与其他CPU共享。
    • PPI通常包括:
      • 全局定时器:用于提供系统时间或计时功能。
      • 专用看门狗定时器(AWDT):用于监控系统状态,如果系统出现故障,看门狗定时器可以触发重启。
      • 专用定时器:用于特定任务的定时。
      • 来自PL(处理器逻辑)的FIQ/IRQ:FIQ(快速中断请求)和IRQ(中断请求)是两种不同类型的中断,FIQ通常用于处理更紧急的事件。
  2. 软件生成的中断(Software Generated Interrupts, SGI)

    • 这些中断是由软件触发的,而不是由硬件事件触发。
    • SGI可以通过SGI分配器分配给一个或两个CPU,这意味着软件可以决定将这些中断发送给哪个CPU处理。
  3. 共享外设中断(Shared Peripheral Interrupts, SPI)

    • 这些中断可以由多个CPU共享,它们通常由I/O设备或存储控制器生成。
    • SPI可以被路由到任何一个或两个CPU,这意味着多个CPU可以处理来自同一外设的中断。
    • 来自PS(处理器核心)外设的SPI也可以被路由到PL,这意味着处理器核心产生的中断可以由处理器逻辑部分来处理。

存储寄存器

  • 用于私有访问的存储寄存器允许每个CPU独立地配置和管理自己的PPI。

总结

  • PPI是每个CPU独有的,用于处理与该CPU直接相关的中断。
  • SGI是由软件生成的,可以灵活地分配给一个或两个CPU。
  • SPI是多个CPU可以共享的,由外设生成,可以被任意CPU处理。

这种设计允许系统灵活地处理不同类型的中断,确保系统能够高效地响应各种硬件和软件事件。

通用中断控制器

  1. 通用中断控制器的作用

    • 它是一个中央处理中心,用于管理来自处理器核心(PS)和外设(PL)的中断。
    • 它可以启用、禁用、屏蔽和设置中断源的优先级。
  2. 中断处理流程

    • 所有中断源首先被集中到控制器。
    • 控制器根据中断的优先级,将最高优先级的中断分配给CPU。
    • 当CPU处理完一个中断后,控制器会发送下一个最高优先级的中断。
  3. 安全扩展

    • 控制器支持安全扩展,用于实现安全感知系统。
  4. 基于ARM架构

    • 该控制器基于ARM的通用中断控制器架构版本1.0(GIC v1)。
  5. 寄存器访问

    • GIC的寄存器通过CPU私有总线访问,这样可以避免在总线或互连中产生阻塞,实现快速的读写响应。
  6. 中断的独占性

    • 确保一次只有一个CPU可以处理一个中断。
  7. 中断ID和优先级

    • 每个中断源都有一个唯一的中断ID。
    • 每个中断ID都可以配置自己的优先级和目标CPU列表。

简单来说,通用中断控制器(GIC)就像一个交通警察,负责管理来自各个方向(处理器核心和外设)的“交通”(中断请求)。它会根据“交通”的紧急程度(优先级)来决定哪个“交通”(中断)需要优先处理,并且确保一次只有一个“交通”(中断)被处理,以避免混乱。

在这里插入图片描述

中断源

软件生成的中断(SGI)

工作原理,包括如何生成SGI、如何清除SGI,以及SGI的触发方式和敏感性类型。

  1. SGI的生成

    • 每个CPU都可以使用SGI来中断自己、另一个CPU或同时中断两个CPU。
    • 系统中有16个SGI,每个SGI都有一个唯一的编号。
    • 通过向软件生成的中断寄存器(ICDSGIR)写入特定的值,可以生成SGI。这个值包括SGI的编号和目标CPU的标识。
  2. 写操作

    • 向ICDSGIR写入操作是通过CPU自己的专用总线进行的,这意味着操作是直接在CPU内部完成的,不需要通过外部总线。
  3. SGI寄存器

    • 每个CPU都有自己的一组SGI寄存器,用于生成16个SGI中的一个或多个。
  4. 中断的清除

    • 中断被触发后,需要被清除以便CPU可以继续正常操作。
    • 中断清除可以通过以下两种方式之一完成:
      • 读取中断确认寄存器(ICCIAR):通过读取这个寄存器,可以确认哪个中断被触发,并开始处理它。
      • 向中断挂起清除寄存器(ICDICPR)写入“1”:通过向这个寄存器的相应位写入“1”,可以清除挂起的中断。
  5. SGI的触发方式

    • 所有的SGI都是边缘触发的。这意味着中断只有在信号的边缘(如从低到高或从高到低)发生变化时才会被触发。
  6. SGI的敏感性类型

    • SGI的敏感性类型是固定的,不能修改。这意味着一旦SGI被配置为某种敏感性类型(如边缘触发),就不能更改为其他类型。
    • 只读的ICDICFR0寄存器指定了所有16个SGI的敏感性类型。

总结

  • SGI是一种由软件触发的中断,可以用于中断一个或多个CPU。
  • 通过向ICDSGIR写入特定的值,可以生成SGI。
  • 每个CPU都有自己的SGI寄存器,用于生成SGI。
  • 中断可以通过读取ICCIAR或向ICDICPR写入“1”来清除。
  • 所有的SGI都是边缘触发的,且其敏感性类型是固定的,不能修改。

这种机制允许软件灵活地控制CPU的行为,例如在需要时强制CPU执行特定的任务或处理紧急情况。
在这里插入图片描述

在这里插入图片描述

处理器私有外设中断(PPI)

在这里插入图片描述
这段描述涉及到处理器私有外设中断(PPI)、快速中断(FIQ)和中断(IRQ)信号的处理,以及如何对通用中断控制器(GIC)进行编程以适应不同的中断类型。

  1. 私有外设中断(PPI)

    • 每个CPU核都连接到一个包含五个外设中断的私有组。
    • 这些PPI的敏感类型是固定的,不能改变。
  2. 信号反转

    • 来自处理器逻辑(PL)的FIQ和IRQ信号在发送给中断控制器之前,会在传输给处理器核心(PS)时被反转。
    • 这意味着在PL内部,这些信号是低电平有效的,而在PS-PL接口处是高电平有效的。

总结

  • 每个CPU核都有自己的一组PPI,这些PPI的敏感类型是固定的。
  • PL发送给PS的FIQ和IRQ信号在传输过程中会被反转,因此在PL内是低电平有效,在PS-PL接口处是高电平有效。

共享外设中断(SPI)

在这里插入图片描述在这里插入图片描述
这段描述涉及到通用中断控制器(GIC)如何处理来自不同模块的中断,以及如何编程GIC以适应不同的中断敏感类型。以下是详细解释:

  1. 中断路由

    • 大约60个中断可以被路由到处理器逻辑(PL)或CPU中的一个或两个。这意味着这些中断可以被分配给特定的CPU进行处理。
  2. 中断优先级和接收

    • 目标为CPU的中断的优先级和接收情况由中断控制器管理。这意味着GIC负责确定哪个中断应该首先被处理,以及哪个CPU应该接收并处理该中断。
  3. 中断灵敏度类型

    • 除特定的IRQ(中断请求)编号(61至68和84至91)外,所有中断的灵敏度类型都是固定的,不能更改。这意味着这些中断的触发方式(如电平敏感或边缘敏感)是由硬件固定,软件无法修改。
  4. GIC编程

    • 必须对GIC进行编程以适应这些固定的敏感类型。这是因为不同的中断可能需要不同的处理方式,例如,电平敏感的中断需要在中断处理程序中清除,而边缘敏感的中断可能在信号变化时自动触发。
  5. Boot ROM和SDK设备驱动程序

    • Boot ROM不会编程这些寄存器,因此SDK(软件开发工具包)中的设备驱动程序必须对GIC进行编程以适应这些敏感类型。这意味着开发者需要在他们的软件中包含适当的代码来配置GIC。
  6. 电平敏感类型的中断

    • 对于电平敏感类型的中断,请求源必须为中断处理程序提供一种机制,以便在确认中断后清除中断。这是因为电平敏感的中断会持续触发,直到它们被明确清除。
  7. 上升沿敏感的中断

    • 对于上升沿敏感的中断,请求源必须提供足够宽的脉冲以便GIC捕获。这通常至少为2个CPU_2x3x周期。这意味着中断信号必须在一定时间内保持高电平,以便GIC能够识别并触发中断。

总结

  • 大约60个中断可以被路由到PL或CPU中的一个或两个。
  • 中断的优先级和接收情况由GIC管理。
  • 除特定IRQ编号外,所有中断的灵敏度类型都是固定的。
  • 开发者需要在SDK设备驱动程序中对GIC进行编程以适应这些敏感类型。
  • 对于电平敏感和上升沿敏感的中断,请求源必须提供适当的机制以便GIC正确处理中断。

这种设计确保了中断系统能够灵活地处理不同类型的中断请求,同时保持了系统的稳定性和可靠性。

中断控制器如何管理和分配中断请求,以及如何确定中断的优先级。

  1. 中断ID编号

    • 所有的中断请求,无论是私有外设中断(PPI)、软件生成中断(SGI)还是共享外设中断(SPI),都被分配了一个唯一的ID编号。这个编号用于中断控制器的仲裁过程,以确定哪个中断应该被优先处理。
  2. 中断分派器

    • 中断分派器负责保存每个CPU的中断挂起列表,并从中选择优先级最高的中断,然后将其发送到CPU接口。这个过程确保了中断请求可以被有效地管理和分派。
  3. 优先级冲突解决

    • 如果两个具有相同优先级的中断同时到达,中断分派器会选择具有最低中断ID的中断首先发送。这种机制确保了在优先级相同的情况下,中断的处理也有一定的确定性。
  4. 每个CPU的优先级定序逻辑

    • 每个CPU都有自己的优先级定序逻辑,这意味着对最高优先级中断的选择是每个CPU各自进行的。这允许系统在多CPU环境中更有效地处理中断。
  5. 中央列表和软件中断触发

    • 中断分派器具有中断、处理器和活跃信息的中央列表,并负责触发CPU的软件中断。这确保了中断请求可以被正确地识别和处理。
  6. SGI和PPI分派器寄存器

    • SGI和PPI分派器寄存器是分组的,这意味着每个处理器都有自己的副本。这种设计允许每个CPU独立地处理自己的SGI和PPI,提高了系统的并行处理能力。
  7. 中断的获取和结束

    • 硬件确保针对多个CPU的中断同一时间只能被一个CPU获取。在发送挂起的最高优先级的中断给CPU接口后,中断分配器会从该CPU收到中断已被确认的消息,这样它就可以改变对应的中断状态。只有确认中断的CPU才能结束该中断。

总结

  • 中断控制器通过分配唯一的ID编号来管理和仲裁中断请求。
  • 中断分派器负责选择和发送最高优先级的中断到CPU。
  • 在处理具有相同优先级的中断时,会选择具有最低中断ID的中断。
  • 每个CPU都有自己的优先级定序逻辑,独立地选择和处理中断。
  • 中断分派器通过中央列表管理和触发中断,包括SGI和PPI。
  • 硬件确保同一时间只有一个CPU可以获取针对多个CPU的中断,并且只有确认中断的CPU才能结束该中断。

这种设计确保了中断系统能够高效、公平且确定性地处理各种中断请求,从而提高了整个系统的响应能力和性能。

Zynq中,中断是一种处理器暂停正在执行的当前任务,转而执行与中断相关的任务的机制。Zynq中断具有优先级的概念,优先级决定了中断被响应的顺序。 每个中断都有一个特定的优先级,优先级数值越小表示优先级越高。当多个中断同时发生时,Zynq会根据中断的优先级来决定哪个中断优先被处理。 Zynq中,有两种类型的中断优先级:硬件优先级和软件优先级。硬件优先级由Zynq硬件定义,软件优先级由软件编写者进行定义。 硬件优先级在中断控制器内部实现,是通过对中断请求信号进行优先级编码来实现的。每个中断请求都有一个对应的优先级。当多个中断请求同时到达中断控制器时,硬件会根据这些优先级进行比较,并选择优先级最高的中断请求来处理。硬件优先级在编程过程中无法修改,由硬件设计决定。 软件优先级由编程者在中断处理程序中定义。在Zynq中,可以通过配置寄存器来设置每个中断的软件优先级。软件优先级与硬件优先级相互独立,但软件优先级必须小于硬件优先级。软件优先级的设置允许开发者自定义中断的响应顺序,以满足特定需求。 总的来说,Zynq中断的优先级是通过硬件优先级和软件优先级来确定的。硬件优先级由硬件设计决定,而软件优先级由编程者在中断处理程序中进行设置。根据这些优先级,Zynq选择性地处理中断请求,以确保高优先级的中断可以及时响应和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值