我想知道VIC如何有效地处理外部中断
答案 0 :(得分:12)
一个小背景(你标记为“arm7”,所以大概这个问题不是关于Cortex NVIC等。)
最初,ARM处理器支持两种类型的中断:普通中断(IRQ)和快速中断(FIQ)。每个可能会中断CPU的外设都会触发IRQ或FIQ。 IRQ有一个向量,FIQ有一个向量。
有时从外设到IRQ / FIQ的映射是在硬件中完成的,有时它是可配置的。但问题是,只要你有> 2个外设中断,它们就必须共享一个中断向量。换句话说,如果您有3个中断源,则可以保证多个设备将使用至少一个IRQ或FIQ。这意味着当你接受中断时,你必须“轮询”(通常是硬件寄存器)来找出“为什么我在这里?谁打断了我?”
VIC的整个想法是每个中断都有自己独特的向量,因此当您向该中断槽移动时,您确切知道是谁在打扰您。没有民意调查“好的,谁打断了我?”
ARM的站点上有关于ARM VIC(及其许多变体)的更多信息,包括配置信息,寄存器定义,嵌套/优先级中断等,但您的问题具体询问了VIC如何有效地处理中断。描述其特征的每个细节都超出了本问题的范围。
(我将“有效”解释为“尽可能少地进行轮询/询问”。请注意,VIC支持的优先中断可以减少高优先级中断的延迟,这也可能被认为“更有效” “,虽然我并没有真正把它归入同一类别,因为没有进行民意调查”谁打断了我?“)
有关Primecell VIC的更多信息,请here at ARM's site。