外部中断处理和内部中断处理的差异性
在现今SOC设计中,当周边装置(Peripheral IP)想要和中央处理器(CPU)沟通时,最常使用的机制是透过中断(Interrupt)。周边装置可触发中断给中央处理器,当中央处理器接收到中断后,则可判断是由那个周边装置触发些中断,接着处理相对应的中断处理程序(ISR,Interrupt Service Routine),藉此达到彼此沟通的目的。
而AndesCore?在中断处理方面,共支持两种模式:内部中断处理器(IVIC Mode,Internal Vector Interrupt Controller)和外部中断处理器(EVIC Mode,External Vector Interrupt Controller)。其中最大的差异性,即是中断控制器所存在的位置。在内部中断处理模式下,AndesCore?本身即设置了一个中断控制器存在于CPU内部,经由此中断控制器来处理相关中断的工作。而在外部中断处理模式下,用户必须在CPU外部实做一个中断控制器来处理相关中断工作。
除了上述的差异性之外,在硬件方面的整合和软件方面的应用,也存在些许差异性。本文之目的除了介绍这些差异性外,也提供一个简单的设计平台供使用者参考。期望能对使用者有所帮助,也希望读者不吝指教提供您宝贵的意见。
1. 中断处理模式介绍
AndesCore?共支持两种中断处理模式:内部中断处理器(IVIC Mode,Internal Vector Interrupt Controller)和外部中断处理器(EVIC Mode,External Vector Interrupt Controller)。以下的介绍将架构于AndesCore? N968A-S这颗中央处理器。带领使用者循序渐进地,了解这两种中断处理模式的差异。
1.1 Definition
AndesCore? N968A-S支持两种中断处理模式,首先,我们先介绍关于这两种模式的定义。
1.1.1 IVIC Mode
AndesCore? N968A-S内部设计了一个中断控制器,所支持的中断来源数目可透过配置来决定。目前最大可支持16个中断来源,但可扩充至32个。请参考图表 1。若使用这存在于CPU内部的中断控制器来处理相关中断工作时,则为IVIC模式。假若SOC的中断来源大于32个时,使用者还是可以使用IVIC模式,但是需要将多个中断来源合为一个中断讯号线(ex: OR function),且中断处理程序(ISR)在该中断讯号线触发时,需要去判断是由那个中断来源所触发。在N968A-S的IVIC mode之下,每个中断来源可以选定值为0~3的优先权 (priority). 优先权高的中断来源可以打断优先权低的中断来源。
1.1.2 EVIC Mode
假若IVIC模式不符合用户所设计的系统,用户就需要选用EVIC模式。在此模式下,用户需要额外设计一个中断控制器,用来处理周边装置和中央处理器之间相关中断的工作,作为两者间沟通的桥梁。
图表 1. AndesCore? N968A-S 所支持中断来源数目
1.1.1 Interruption Vector Entry Points
为了加速中断处理的时间,AndesCore? N968A-S内部实做了一个Interruption Vector Table。将不同的中断事件分别对应到不同的Vector Entry,当中断发生时,CPU即可判断中断是由那个周边装置所触发,并跳到该中断所对应的Vector Entry,进而执行相关的中断处理程序(ISR)。
在前面章节有介绍AndesCore? N968A-S支持两种不同的中断处理模式。因此,在不同的中断处理模式下,也对应了不同的Interruption Vector Table。
1.1.1.1 Interruption Vector Table of IVIC Mode
在IVIC模式下,所支持的中断来源可由用户来配置,支持的数目由2个到32个。Interruption Vector Table相关信息如下:
l 41 entry points (9 exceptions + 32 interrupts)
l Address = IVB.IVBASE + (entry number) * IVB.ESZ
(VEP: Vector Entry Point)
图表2. Interruption Vector Table of IVIC Mode
1.1.1.1 Interruption Vector Table of EVIC Mode
在EVIC模式下,所支持的中断来源数目可达到64个中断。Interruption Vector Table相关信息如下:
l 73 entry points (9 exceptions + 64 interrupts)
l Address = IVB.IVBASE + (entry number) * IVB.ESZ
图表3. Interruption Vector Table of EVIC Mode
1.2 Signal Descriptions
AndesCore? N968A-S 提供相关中断讯号线,使得CPU可与周边装置或是外部中断控制器沟通。在EVIC模式下,除了中断来源讯号线之外,还包含了和外部中断控制器相互沟通的讯号线,详细讯号线叙述如下:
其中,evic_ireqval和evic_ireqack这两个讯号线用来和外部中断控制器沟通。在IVIC模式下,周边装置的中断讯号可和int_req[N:0]直接整合。当周边装置触发中断时,相对应的int_req讯号会拉起,告知CPU该周边装置触发了中断,CPU即会跳到所对应的Vector Entry来执行相关的中断处理程序。
而在EVIC模式下,外部中断控制器会负责处理周边装置的中断讯
- ARM Linux外部中断处理过程(11-20)
- 产品成功设计14项要素(08-19)
- 中断处理模式: 外部中断处理和内部中断处理的差异性(08-08)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)