0

我想知道VIC如何有效地处理外部中断

4

1 回答 1

13

一点背景(您标记“arm7”,所以大概这个问题与 Cortex NVIC 等无关。)

最初,ARM 处理器支持 2 种类型的中断:正常中断 (IRQ) 和快速中断 (FIQ)。每个可能中断 CPU 的外设都会触发 IRQ 或 FIQ。IRQ 有一个向量,FIQ 有一个向量。

有时从外设到 IRQ/FIQ 的映射是在硬件中完成的,有时它是可配置的。但关键是,一旦您有 >2 个外设中断,它们就必须共享一个中断向量。换句话说,如果您有 3 个中断源,则可以保证至少 IRQ 或 FIQ 之一将被多个设备使用。这意味着当你接受中断时,你必须“轮询”(通常是硬件寄存器)来找出“我为什么在这里?谁打断了我?”

VIC 的整个想法是每个中断都有自己独特的向量,因此当您向量到该中断槽时,您可以确切地知道是谁在打断您。没有轮询“好吧,谁打断了我?”

在 ARM 的站点上有更多关于 ARM VIC(及其许多变体)的信息,包括配置信息、寄存器定义、嵌套/优先中断等,但您的问题专门询问了 VIC 如何有效处理中断。描述其特征的每一个细节都超出了这个问题的范围。

(我将“有效”解释为“尽可能少地进行轮询/询问”。请注意,VIC 也支持优先级中断,减少高优先级中断的延迟,这也可能被认为是“更有效”,尽管我并没有真正将它与不必调查“谁打断我?”归为一类)

有关 Primecell VIC 的更多信息,请访问 ARM 网站

于 2011-01-05T15:25:35.773 回答