Embedded 如何使用矢量中断控制器(VIC)有效地处理外部中断?

Embedded 如何使用矢量中断控制器(VIC)有效地处理外部中断?,embedded,arm7,Embedded,Arm7,我想知道VIC如何有效地处理外部中断一点背景知识(您标记了“arm7”,所以这个问题可能与Cortex NVIC无关,等等) 最初,ARM处理器支持两种类型的中断:正常中断(IRQ)和快速中断(FIQ)。每个可能中断CPU的外围设备都会触发IRQ或FIQ。IRQ有一个向量,FIQ有一个向量 有时,从外围设备到IRQ/FIQ的映射是在硬件中完成的,有时是可配置的。但关键是,只要有>2个外围中断,它们就必须共享一个中断向量。换句话说,如果您有3个中断源,则可以保证多个设备将使用至少一个IRQ或FIQ

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

一点背景知识(您标记了“arm7”,所以这个问题可能与Cortex NVIC无关,等等)

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

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

VIC的整个思想是,每个中断都有自己独特的向量,因此当你向那个中断槽向量时,你确切地知道是谁在中断你。没有投票“好吧,谁打断了我?”

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

(我将“高效”解释为“尽可能少的轮询/询问”。注意,VIC也支持优先级中断,减少了高优先级中断的延迟,这也可能被认为是“更高效”,尽管我并没有将其归入不必轮询“谁打断了我?”)的类别。)


可以找到Primecell受害者的更多信息。

受害者是谁?中断控制器不是由ARM7内核定义的,它是特定于供应商的外部外围设备。此外,您的问题是关于硬件如何工作或如何使用硬件的?在任何一种情况下,答案都是阅读供应商数据表/参考手册。@Clifford:VIC在ARM7设备上非常常见,我认为标签没有脱节(是否有可用的ARM7设备没有VIC?)。而且,就其本身而言,RTFM会回答一个问题并不一定意味着一个问题不适合这样做;我想这里的绝大多数问题都可以通过阅读文档来回答。@Micheal Burr:我不是这么说的。向量中断控制器是一个通用术语,一个供应商实现的不一定与另一个供应商的实现相同。其他人可能实现一个中断控制器,并完全使用另一个术语。关键是,中断控制器不是由ARM定义的。ARM定义了一个中断控制器,它的使用是可选的,许多供应商使用替代实现(例如ST的STR7 EIC)。NXP部件使用PrimeCell实现,也许我们可以假设问题与此相关,但尽管如此,了解确切的部件将提供更好的目标答案。